jframe是什么?
jframe是一个基于MIT协议开源的java web应用程序框架,汇聚了我们团队之于java web应用程序的核心架构思想以及大量最佳实践,并且持续在实际项目中不断完善优化。
简单的讲,jframe可以看成是MvcSolution(一个基于ASP.NET MVC的程序框架)的java实现,因为它们体现的都是完全同样的架构思想和非常相似的最佳实践。
如果你是一个java新手,想要学习如何成为java架构师,相信jframe和本系列文章将会给你很大的帮助;
如果你是学.NET的想要转java,但是却不知道怎么开始,本系列文章和jframe框架也会是你不错的选择,因为本系列文章会解释很多为什么,还会分享我们踩过的坑,对于你理解java体系的逻辑大有助益;
如果你是java大神,你也可以看看jframe的实现,因为jframe里面融合了很多.NET世界的优点(比如java版的linq),可能是java程序员不曾体会过的,当然,我们更希望java大神们多多指点,指出我们的错误实践,帮助jframe不断完善。
jframe的架构思想:分层和模块化
应该说任何一个架构师在做项目架构的时候,不管那个项目多么复杂,其架构思想都是分层跟模块化。
jframe的主要分层(5层):
- infrastructure(基础设施);
- data(数据库定义);
- service(数据库访问);
- web(controller);
- web前端(html/js/css)。
每一个主要分层中,其实是由无数个小层组合起来的。比如我们的data层就分了:数据库、数据表对应的实体类、枚举类、枚举类converter、DbSet、data层基础设施等等。
再细分,每一个类又可能分了很多个层(也可以算是编码规范)。比如我们的枚举类就分了:值定义、文档、获取值、值逻辑计算等。
所以,基于jframe进行开发,我们建的每一个文件和写的每一行代码都有它应该待的地方,都不是想放在哪里就放在哪里的。比如一个枚举类应该放在哪个文件夹,枚举类的内容应该怎么写。
当然,虽然jframe定义了大量的规范,但是我们却极其推崇自由的写代码的方式。举个简单的例子:我们完全不排斥中文写代码,反而对于某些很难说清楚的事情我们强烈推荐用中文命名变量/方法,因为那比一个错误的英文命名+一个正确的中文注释容易维护多了。在整个jframe框架中,你会看到大量的非常自由的代码,完全不受传统的编码潜规则的束缚,比如,你会在一个枚举类里面看到大量的业务逻辑的实现。
这样的话,看上去jframe既是一个规范强迫者又是一个自由主义者。这其实源于我们唯一的编码规则。
jframe唯一的编码思想:把相关的业务逻辑写到一堆
这个算什么思想呢?连个名字都没有,不像TDD、DDD、AMD这么高大上,但这个思想是我们这么些年总结下来唯一适用得最好的编码指导思想。其实呢,它还是有一个名字的,叫fat model开发方式,也就是说你建一个类,你就卯足了劲把这个类写肥,把它相关的业务逻辑全部写到一起,肥死它。(Fat Model原意是指在MVC模式中,把MVC中的M写肥,本文的思想不局限于MVC的M,而是项目中的全部实体类)。其实跟DDD也是很相似的,只不过DDD建议的是把Domain层实体类写肥。
比如:你建了一个dto对象从数据库查询数据,但是你却把sql写在另外一个地方(如service层),某一天,你需要增加一个字段的返回,这时你就需要find usages(clipse里面叫refercene)去一个一个找了;但是如果你把查询sql就放在dto对象内部,那要增删改某个字段就非常不容易出错了。
这里,不小心提到了一个好架构应该具备的品质:让程序员不容易写出错误的代码。
后面我会专门写文章解释为什么jframe不用spring data,主要原因就是其对于事务的管理非常容易让程序员写出错误的代码。
jframe的架构思想:模块化
jframe自带的模块有这4个:
- admin:超级管理员后台;
- pc:pc浏览器版;
- app: app 浏览器版,可以理解为微信版或H5版;
- api:为WEB前端提供API访问;
模块都是随便加减的,增加或移除一个模块对系统没有任何影响。你也可以根据项目需要自建更多模块。
jframe的依赖
- jdk8
- spring mvc
- mysql
- hibernate
- commons
- fastjson
- tiles
- maven
- tomcat
为什么用JDK8 呢?因为jframe用到了大量的lamda表达式,这也是因为我们用习惯了C#,无法忍受没有lamda的编程体验。
mysql 客户端我们是用的dbeavor,感觉比Navicat好用很多。
jframe使用的IDE: intellij idea
官网下载地址:http://www.jetbrains.com/idea/
intellij idea是本人认为最好的java集成开发工具了,该工具也是由jetbrains公司开发的,就是resharper的开发者。用过resharper的朋友应该都深有体会,他们公司的产品实在是太懂程序员了。
虽然没有用过myeclipse,但是用过几个月的eclipse和基于eclipse修改的几个其他定制版,感觉eclipse系列相比intellij idea差了1万倍。本人用了几个月的eclipse还是觉得离visual studio相差甚远,但是用了intellij idea几个小时就觉得跟vs的写代码的体验非常接近了。所以,如果你还没有尝试过intellij idea,请一定要尝试一下,即使你已经用eclipse用的滚瓜烂熟倒背如流也值得一试。
关于作者
本来不想加关于作者这一节的,但是考虑到对读者负责,于是还是加上一个简短的说明。主要是想告诉读者,作者并非java领域的大神,也不是来自BAT等知名公司,作者只是一个普普通通拥有8年编程经验的架构师,对于架构有一些自己的见解。作者从开始java开发到现在也只有半年时间,只不过web程序的架构不管是.NET还是java都有很多相似之处,因此才将.NET平台下的MvcSolution搬到java的世界,于是才有了jframe。
另外,作者对于编程思想有很多“不合规矩”的想法,希望读者朋友们在读到这些奇怪的想法时,可以以更open一点的心态来拥抱这些奇怪的想法,因为世界是在不断改变的,现在对你来讲很难接受的一个想法说不定过几年你就完全认可了。作者也是一个善于独立思考的人,从来不迷信任何权威,比如就连这么流行的spring mvc,作者也认为有很多设计不合理的地方。于是,作者自己创造了很多新的东西,也重复发明了不少的轮子。
所以,作者虽然不能保证jframe一定比你们现在的框架更优,但却可以保证在你看jframe框架的时候,你会看到很多突破常理的设计,会看到很多新的东西。这些新的东西可能会给你新的灵感,这样,可能就已足够了。
jframe 源码下载
好了,理解了jframe的基本架构思想和编程思想,也对外部依赖和IDE有了基本的概念,现在可以下载jframe看看了。
github 项目地址:https://github.com/leotsai/jframe
中文QQ技术交流群:651499479
下一篇预告,jframe文件组织结构、maven依赖管理、调试、发布,敬请期待。
THE END.