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个:

  1. admin:超级管理员后台;
  2. pc:pc浏览器版;
  3. app: app 浏览器版,可以理解为微信版或H5版;
  4. api:为WEB前端提供API访问;

模块都是随便加减的,增加或移除一个模块对系统没有任何影响。你也可以根据项目需要自建更多模块。

jframe的依赖

  1. spring mvc
  2. mysql
  3. hibernate
  4. commons
  5. fastjson
  6. tiles
  7. maven
  8. 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的更多相关文章

  1. 【jframe】Java架构师之路 - 第01篇:Get Started

    jframe是什么? jframe是一个基于MIT协议开源的java web应用程序框架,汇聚了我们团队之于java web应用程序的核心架构思想以及大量最佳实践,并且持续在实际项目中不断完善优化. ...

  2. 如果你不知道这11款常见的Web应用程序框架 就说明你out了

    本文推荐了11款常见的Web应用程序框架,并列出了相关的学习资料和下载文档.如果对这些项目还不熟悉,就赶紧学起来吧~ Rails Rails是Ruby on Rails的简称,是一款开源的Web应用框 ...

  3. 使用IzPack打包JAVA Web应用程序

    使用IzPack打包JAVA Web应用程序步骤如下: 这里使用IzPack-4.3.5 + launch4j-3.1.0-beta1-win32.zip(绿色版)对Web应用程序打包,打包后即可对我 ...

  4. 【转】Tomcat中部署java web应用程序

    http://www.blogjava.net/jiafang83/archive/2009/06/02/279644.html 转载:今天给大家介绍怎样在Tomcat5.5.9中部署Java Web ...

  5. 在Tomcat中部署Java Web应用程序

    在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署      静态部署指的是我们在服务器启动之前部 ...

  6. 简单java web应用程序搭建与部署

    1. 准备工作 工具:tomcat.editplus.jdk.windows操作系统 操作:在windows操作系统上安装jdk.tomcat.editplus,配置JAVA_HOME,Path,CL ...

  7. Tomcat中部署Java Web应用程序的方式

    Tomcat中部署Java Web应用程序的几种方式: #PetWeb是工程名 1.在TOMCAT_HOME\conf\server.xml文件的HOST节点中加入 <Context docBa ...

  8. 在Tomcat中部署Java Web应用程序几种方式

    在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署      静态部署指的是我们在服务器启动之前部 ...

  9. Java Web自定义MVC框架详解 (转)

    转自:http://blog.csdn.net/jackfrued/article/details/42774459 最近给学生讲Java Web,希望他们能够在学完这部分内容后自己实现一个MVC框架 ...

随机推荐

  1. [笔记]机器学习(Machine Learning) - 00.目录/大纲/写在之前

    目录会根据我的学习进度而更新,给自己列一个大纲以系统地看待整个学习过程. 学习资料来源 学习的是Coursera上吴恩达(Andrew Ng)老师的机器学习视频(课程传送门,最近在"最强大脑 ...

  2. Linux防火墙的关闭和开启

    1) 重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2) 即时生效,重启后失效 开启: service iptables sta ...

  3. 使用configuration配置结束在quartz.net中使用硬编码Job,Trigger任务提高灵活性

    经常在项目中遇到定时任务的时候,通常第一个想到的是Timer定时器,但是这玩意功能太弱鸡,实际上通常采用的是专业化的第三方调度框架,比如说 Quartz,它具有功能强大和应用的灵活性,我想使用过的人都 ...

  4. Android ec环境配置

    ec环境配置 1.0概述 鉴于很多同事,或者新从事android开发,虽然会做android的开发,但是会遇见一些最基本的环境搭建问题,本文仅作为(win7 64位系统)eclipse中集成andro ...

  5. centos mysql5.7 二进制包安装

    此种方式安装非常简单 cd /usr/local 下载安装包wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-linux- ...

  6. 学习SpringMVC中优秀的代码编写风格

    在org.springframework.web.servlet.FrameworkServlet 中有下面这段代码 private class ContextRefreshListener impl ...

  7. B507实验室打印机连接方法

    一.准备工具 实验室打印机内网IP地址:172.16.135.41 ,这个地址要看具体的打印机地址(可能会更换). 从实验室QQ群(土匪窝)上下载打印机驱动,如下图所示. 3. 非常重要的事情:请链接 ...

  8. 《算法4》1.5 - Union-Find 算法解决动态连通性问题,Python实现

    Union-Find 算法(中文称并查集算法)是解决动态连通性(Dynamic Conectivity)问题的一种算法,作者以此为实例,讲述了如何分析和改进算法,本节涉及三个算法实现,分别是Quick ...

  9. WCF(远程服务器返回错误: 400 错误的请求)

    类似相关问题有以下: WCF- restful接口 POST方式调用报错(远程服务器返回错误: 400 错误的请求) WCF Rest:不使用UriTemplate使用post方式传参解决HTTP40 ...

  10. Struts2入门(一)

    今天学习Struts2首先struts是一个成熟的框架.Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Cont ...