作为一个阶段性总结,有很多的东西需要说明,有细节的,有架构的,且听我细细说来。
java和php最大的区别不止是类型的强制定义,而是在设计思路上有着非常重大的偏差(虽然SY3框架已经开始借鉴JAVA的思路,但是真这样的话也失去了PHP自己的特色)
所有的输出和类型全部都是事先定义好,然后自上而下进行开发,和PHP随心所欲的开发方式完全不同,说的通俗点,PHP没有什么固定的套路,但是java几乎所有的东西都是套路。。
java所有的开发都是基于面向接口和面向服务,所有的接口和服务都要尽量抽象的小而全,而这能力我相信就是程序员之间差距的最根本层面。
首先因为刚接触这个语言,暂时先把重点放在写业务上面,先看项目目录结构,公司的架构采用的是阿里的开发规范,相当严格。
(以下是建立在项目已经一来maven搭建完毕后的业务来说的)
1.web层
这里主要做的工作是适配外部走HTTP协议来请求的路由,并将它们转化为dubbo协议调用api层的接口。
这个层在我的理解中是一切请求的源头,从这个源头开始经过web->api->service->web这样一个流程达到输出结果的目的。
具体的适配如上图,访问/promotion/bargain/manager/page_activity,并将参数带过来就可以访问,具体的细节我还没有完全了解,这里挖个坑,以后编辑。
2.api层
他是一个对外的接口层,web层适配完毕后就将调用他,通过他再调用service,他是service的标准,所有想调用service的人必须通过他这一关,而service也以他为标准进行开发。
而调用方完全不用关心service需要做些什么,这就像打仗指挥部只需要通知军长,军长只需要通知师长,不然的话就算再简单的信息,光电话就能把司令打成哑巴。
数据的传输靠的是定义好的dto,dto代表了交互层面的所有数据类型,而我们要做就是把这些已经定义好的类全部填充一下,并返回。
而service下则是定义的所有服务的接口,一切外部的调用以及内部的实现全部都按照这套逻辑来,这样很好的进行了归一化,方便调用。
3.check层,空缺。。未知领域
4.script层
这一层主要是一些sql,脚本,或者工具,如上图就是一个自动生成对应domain和mapper的工具。
5.service层
这一层是整个架构中的绝对核心部分,所有的业务逻辑全部都在这里进行实现,所以必须细细来讲
5.1 conf
下面存贮的都是一些配置文件,不过貌似这个项目没有把配置文件放在这里,而是dubbo配置放在了web层(dubbo是什么我现在还不清楚,挖坑。。)。
5.2 constants
里面放的绝大多数是一些枚举类型以及常量类型,用来做校验和输出固定内容的时候使用
5.3 dao
说到dao中的mapper,他也是一个接口,而负责实现他业务则是mybatis中的xml(不过现在已经开始使用注解形式写sql了,因为xml实在太蛋疼)
5.4 domain
这个层只是mybatis自动生成的orm,说白了也是接口的一个种类,自己可以在类中build自己返回,也算是一个设计手法了。
5.5 job
这就类似于一个crontab之类的定时脚本,只要有他在,将不在需要设置crontab来占用系统资源了。
5.6 service层
说实在的,写到这里我也觉得很烦,感觉一层一层像是剥洋葱一样,不过规范既然是这么定,套路是怎么走,那就先这样玩吧。
5.6.1adaptor层
从目前的信息来看,这一层貌似是调用第三方接口的时候用的适配层,因为我开发暂时还没用到这个层,所以先略过。又挖一坑。。
5.6.2 facade层
又是一个华丽的门面层。。这个层里面将实现全部api层所设置的接口,但是并不是直接全部实现在这里,这里只是做些简单逻辑和返回数据,真正的所有的重逻辑则全部在inner层
5.6.3 inner层
其实说到这里,才是真正的业务层,上述所有的层全部都是为了拆分,解耦以及一些轻逻辑判断,只有这一层会处理真正的重逻辑,几乎所有的业务逻辑都会在这里聚集,
其实有必要开几个子随笔把这些个层统统细说一下,我估计半年内肯定能全部说完。
ps:java每个类都有自己的单元测试,而且一一对应,这个是php里面原本不具备的,需要用phpUnit来实现。
剩下的半年时间我会好好的琢磨透这些目录下的所有秘密,努力吧老居!