【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框架 ...
随机推荐
- linux vi 报错 E37: No write since last change (add ! to override)
用 vi 命令编辑文本文件,没有文件写入权限的时候会报这个错.:q :wq 怎么都不能退出. 这时只需 ctrl+z 即可,或者在退出命令后加 ! 忽略提示 :q!
- (转)static 变量
一. static 变量 static变量大致分为三种用法1. 用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功能和全局生存期.2. 用于全局变量,主要作用是限制此全局变量被其他的文 ...
- 浅谈prototype和__proto__
讲prototype前先看一下对象的静态方法和实例方法. function Person () { }; Person.sayHello = function () { //定义一个静态方法 cons ...
- 深入tornado中的TCPServer
1 梳理: 应用层的下一层是传输层,而http协议一般是使用tcp的,所以实现tcp的重要性就不言而喻. 由于tornado中实现了ioloop这个反应器以及iostream这个对连接的异步读写,所以 ...
- Angular2 关于*ngFor 嵌套循环
在项目开发中拿到的数据是这样的,要循环遍历出来.可是在ng2中好像不能直接遍历Object datas: any = [ { num: 1, date: "2017-04-12", ...
- springcloud(六):配置中心(一)
随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多.某一个基础服务信息变更,都会引起一系列的更新和重启,运维苦不堪言也容易出错.配置 ...
- 使用Post方法模拟登陆爬取网页
最近弄爬虫,遇到的一个问题就是如何使用post方法模拟登陆爬取网页.下面是极简版的代码: import java.io.BufferedReader; import java.io.InputStre ...
- ELK安装与配置
ELK介绍 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及 ...
- 20个php框架
对于Web开发者来说,PHP是一款非常强大而又受欢迎的编程语言.世界上很多顶级的网站都是基于PHP开发的.本文我们来回顾一下20个2014年最优秀的PHP框架. 每一个开发者都知道,拥有一个强大的框架 ...
- Linux网络服务01——Linux网络基础设置
Linux网络服务01--Linux网络基础设置 一.查看及测试网络 1.使用ifconfig命令查看网络接口 (1)查看活动的网络接口 ifconfig命令 [root@crushlinux ~]# ...