【jframe】Java Web应用程序框架 - 第01篇:Get Started
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的依赖
- spring mvc
- mysql
- hibernate
- commons
- fastjson
- tiles
- maven
- tomcat
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.
【jframe】Java Web应用程序框架 - 第01篇:Get Started的更多相关文章
- 【jframe】Java架构师之路 - 第01篇:Get Started
jframe是什么? jframe是一个基于MIT协议开源的java web应用程序框架,汇聚了我们团队之于java web应用程序的核心架构思想以及大量最佳实践,并且持续在实际项目中不断完善优化. ...
- 如果你不知道这11款常见的Web应用程序框架 就说明你out了
本文推荐了11款常见的Web应用程序框架,并列出了相关的学习资料和下载文档.如果对这些项目还不熟悉,就赶紧学起来吧~ Rails Rails是Ruby on Rails的简称,是一款开源的Web应用框 ...
- 使用IzPack打包JAVA Web应用程序
使用IzPack打包JAVA Web应用程序步骤如下: 这里使用IzPack-4.3.5 + launch4j-3.1.0-beta1-win32.zip(绿色版)对Web应用程序打包,打包后即可对我 ...
- 【转】Tomcat中部署java web应用程序
http://www.blogjava.net/jiafang83/archive/2009/06/02/279644.html 转载:今天给大家介绍怎样在Tomcat5.5.9中部署Java Web ...
- 在Tomcat中部署Java Web应用程序
在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署 静态部署指的是我们在服务器启动之前部 ...
- 简单java web应用程序搭建与部署
1. 准备工作 工具:tomcat.editplus.jdk.windows操作系统 操作:在windows操作系统上安装jdk.tomcat.editplus,配置JAVA_HOME,Path,CL ...
- Tomcat中部署Java Web应用程序的方式
Tomcat中部署Java Web应用程序的几种方式: #PetWeb是工程名 1.在TOMCAT_HOME\conf\server.xml文件的HOST节点中加入 <Context docBa ...
- 在Tomcat中部署Java Web应用程序几种方式
在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署 静态部署指的是我们在服务器启动之前部 ...
- Java Web自定义MVC框架详解 (转)
转自:http://blog.csdn.net/jackfrued/article/details/42774459 最近给学生讲Java Web,希望他们能够在学完这部分内容后自己实现一个MVC框架 ...
随机推荐
- ShadowBroker释放的NSA工具中Esteemaudit漏洞复现过程
没有时间测试呢,朋友们都成功复现,放上网盘地址:https://github.com/x0rz/EQGRP 近日臭名昭著的方程式组织工具包再次被公开,TheShadowBrokers在steemit. ...
- Java学习笔记——设计模式之四.代理模式
To be, or not to be: that is the question. --<哈姆雷特> 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 上代码: p ...
- JS执行效率与性能提升方案
如果是追加字符串,最好使用s+=anotherStr操作,而不是要使用s=s+anotherStr.如果要连接多个字符串,应该少使用+=,如 s+=a;s+=b;s+=c;应该写成s+=a + b + ...
- 如何获取url中文件的后缀名
这是今天给学生解答问题的时候学生问的一个问题,我就在班级里给学生整体讲了一下,现在做一下分享,大家一起学习!! $url = 'http://www.sina.com.cn/abc/de/fg.php ...
- Java 8 Learn Notes
Main reference: [1] http://winterbe.com/posts/2014/03/16/java-8-tutorial/ [2] https://plus.google.co ...
- mxnet:结合R与GPU加速深度学习(转)
近年来,深度学习可谓是机器学习方向的明星概念,不同的模型分别在图像处理与自然语言处理等任务中取得了前所未有的好成绩.在实际的应用中,大家除了关心模型的准确度,还常常希望能比较快速地完成模型的训练.一个 ...
- iOS安全攻防之越狱设备检测
iOS 越狱(iOS Jailbreaking),是用于获取苹果公司便携装置操作系统iOS最高权限的一种技术手段,用户使用这种技术及软件可以获取到 iOS 的最高权限,甚至可能可以进一步解开运营商对手 ...
- C语言数组之冒泡排序+折半查找法(二分查找)
冒泡排序算法 将相邻的元素进行两两比较,大的向后"冒", 小的向前"赶". 口诀: N个数字来排队,两两比较小靠前 外层循环N-1(控制需要比较的轮数). 内层 ...
- Seafile安装踩坑
欢迎大家访问我的博客新地址: 博客:http://monsterlin.com/ 原文地址:http://monsterlin.com/archives/HowToInstallSeafile.htm ...
- JVM-2.Class文件结构
1.Class文件 (1)无关性:除了平台无关性,JVM还支持语言无关性:目前Clojure.Groovy.JRuby.Jyphon.Scala等语言可以在JVM上运行.实现语言无关性的原理仍然是字节 ...