【jframe】Java架构师之路 - 第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的依赖
- 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.
【jframe】Java架构师之路 - 第01篇:Get Started的更多相关文章
- 【转】java架构师之路:JAVA程序员必看的15本书的电子版下载地址
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...
- paip.java 架构师之路以及java高级技术
paip.java 架构师之路以及java高级技术 1. Annotation 设计模式... 概念满天飞.ORM,IOC,AOP. Validator lambda4j memcache. 对 ...
- Java架构师之路:JAVA程序员必看的15本书
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...
- java架构师之路:推荐的15本书
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...
- Java架构师之路 Spring学习笔记(一) Spring介绍
前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...
- Java 架构师之路(2)
一.技术 J2EE技术是架构师的基础.1.<Java编程思想> 初学Java时阅读这本书觉得好难,阅读第二遍时才觉得讲的很细致.这是一本不怕多读的好书. 2.<J2EE应用与BEA ...
- Java 架构师之路(1)
本人也是coding很多年,虽然很失败,但也总算有点失败的心得,不过我在中国,大多数程序员都是像我一样,在一直走着弯路.如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序员 ...
- java架构师之路--推荐书籍
1.大型网站技术架构:核心原理与案例分析 本书通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选 ...
- java架构师之路,享学课堂VIP课程视频下载
享学课堂并发编程:百度网盘 链接:https://pan.baidu.com/s/10O8oXC0yNRArUh3WKkXayg 提取码:o01s 更多视频获取方式请留言
随机推荐
- SSIS 检查点
在SSIS中,检查点实际上是一个记录系统,用于记录控制流中Task组件的执行状态.通过合理地配置Checkpoint,在Package运行出错之后,重新执行Package,可以跳过上一次已经成功执行的 ...
- UDP和TCP的差异
UDP和TCP传递数据的差异类似于电话和明信片之间的差异. TCP就像电话,必须先验证目标是否可以访问后才开始通讯. UDP就像明信片,信息量很小而且每次传递成功的可能性很高,但是不能完全保证传递成功 ...
- testng生成自定义html报告
转自:https://blog.csdn.net/kdslkd/article/details/51198433 testng原生的或reportng的报告总有些不符合需要,尝试生成自定义测试报告,用 ...
- Linux.安装phantomjs
PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, ...
- 关于bash
Linux中有一位名叫"巴士"的tool.他是如何出世的呢?原来,他是一个为GNU计划(GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起 ...
- BZOJ_[JSOI2010]Group 部落划分 Group_kruskal
BZOJ_[JSOI2010]Group 部落划分 Group_kruskal Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人 ...
- 读书笔记--Android Gradle权威指南(下)
前言 最近看了一本书<Android Gradle 权威指南>,收获挺多,就想着来记录一些读书笔记,方便后续查阅. 本篇内容是基于上一篇:读书笔记--Android Gradle权威指南( ...
- 挑子学习笔记:DBSCAN算法的python实现
转载请标明出处:https://www.cnblogs.com/tiaozistudy/p/dbscan_algorithm.html DBSCAN(Density-Based Spatial Clu ...
- Qt之QDomDocument操作xml文件-模拟ini文件存储
一.背景 不得不说Qt是一个很强大的类库,不管是做项目还是做产品,Qt自身封装的东西就已经非常全面了,我们今天的这篇文章就是模拟了Qt读写ini文件的一个操作,当然是由于一些外力原因,我们决定自己来完 ...
- 从一到万的运维之路,说一说VM/Docker/Kubernetes/ServiceMesh
摘要:本文从单机真机运营的历史讲起,逐步介绍虚拟化.容器化.Docker.Kubernetes.ServiceMesh的发展历程.并重点介绍了容器化阶段之后,各项重点技术的安装.使用.运维知识.可以说 ...