作为一个阶段性总结,有很多的东西需要说明,有细节的,有架构的,且听我细细说来。

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来实现。

剩下的半年时间我会好好的琢磨透这些目录下的所有秘密,努力吧老居!

学习java一个月的进展的更多相关文章

  1. 笨重的mfc还在基于系统控件,熟练的mfc工程师还比不过学习Qt一个月的学生开发效率高(比较精彩,韦易笑)

    作者:韦易笑链接:https://www.zhihu.com/question/29636221/answer/45102191来源:知乎著作权归作者所有,转载请联系作者获得授权. 更新:擦,本来只有 ...

  2. 学习PHP一个月的感受

    学习PHP将近一个月了,接触IT这个行业也是从去年开始的,在这之前,IT行业只是耳闻,并不是很了解.接触IT这个行业以后,我最大的感受是,学起来并不是很困难,难的是要去精通它,我们必须时刻保持一颗学徒 ...

  3. 学习python一个月盘点

    1,看了30多个视频,是一些基本操作的.粗略的了解了语法,函数,循环,正则表达,将视频内容全部敲入文本: 2,看了100页的书,习题不太会,进展很慢.第五章10以后的题都没做: 3,看C++的书,有点 ...

  4. java一个月日历

    项目须要,获取当天之后的30天.并提示星期几(周几),写了一个工具类 /** * 计算日期时间 * @author shijing * 2015年8月10日下午2:16:09 * @param dat ...

  5. 自学一个月的java了

    不知道这篇博文有不有朋友看到.先自我介绍一下,硕士一年级下学期. 对编程感兴趣,硕士一年级下学期转学计算机专业,目前刚好一个月的时间.接触计算机也是刚好一个月的时间. 学习了java,javaweb. ...

  6. 学了近一个月的java web 感想

    对于每天学习的新知识进行一定的总结,是有必要的. 之前我学的每一门知识,我都没有怎么总结自己的问题,也没有怎么去想想该怎样才能学的更好,把知识掌握的更牢固.从现在开始呢,我会每半个月,或每一个月总结总 ...

  7. java_面试_01_一个月的面试总结(java)

    重点知识 由于我面试的JAVA开发工程师,针对于JAVA,需要理解的重点内容有: JVM内存管理机制和垃圾回收机制(基本每次面试都会问,一定要搞得透彻) JVM内存调优(了解是怎么回事,一般做项目过程 ...

  8. java获取本月开始时间和结束时间、上个月第一天和最后一天的时间以及当前日期往前推一周、一个月

    import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.uti ...

  9. 【ZZ】Java : 一个帝国的诞生 & 假如时光能够倒流, 我会这么学习Java

    Java : 一个帝国的诞生 http://dy.qq.com/article.htm?id=20160523A06XFS00 写的很有意思,一下子了解了JAVA的历史. 假如时光能够倒流, 我会这么 ...

随机推荐

  1. A锚点实现,滚动页面内容改变tab选项

    Css: ul{margin:0;padding:0;list-style:none;} a{ text-decoration: none; outline:none; -webkit-tap-hig ...

  2. 下面程序的输出结果是____ A:11,10 B:11,11 C:10,10 D:10,11 int x=10; int y=x++; printf("%d,%d",(x++,y),y++);

    下面程序的输出结果是____ A:11,10 B:11,11 C:10,10 D:10,11 int x=10; int y=x++; printf("%d,%d",(x++,y) ...

  3. lr12关联,响应乱码

    1.前程贷登录.投标脚本 Action() { //    web_url("登录页", //        "URL=http://120.78.128.25:8765 ...

  4. html页面禁止用户右键粘贴复制保存的代码

    HTML页面禁止选择.页面禁止复制.页面禁止右键 原创古城寨主2018-03-01 17:50:59评论(1)228人阅读   HTML页面内容禁止选择.复制.右键 刚在一个看一个站点的源代码的的时候 ...

  5. Failed to install the hcmon driver

    在安装虚拟机的时候出现“Failed to install the hcmon driver”错误,是之前VM没有卸载干净,提供两个参考解决方法: 1:在C盘的驱动文件夹也就是“C:\Windows\ ...

  6. 一条命令关掉centos所有不必要的服务和端口号

    centos作为服务器开放的服务多了,难免一些服务软件有漏洞,开放的端口号越多,上线的服务器越危险,所以我们必须在服务器上线之前把centos里面不必要的服务全部干掉,不让坏人有可乘之机. 首先看一下 ...

  7. python之路-格式化输出、编码

    格式化输出 user = input('Username:') pwd = input('Password:') msg = 'your username:%s,your password:%d,10 ...

  8. 电脑小白和ta的小白电脑——PowerDesigner的安装与破解

    (一)下载 网盘链接:https://pan.baidu.com/s/1Ts_4D4LL7OukaMPgErp6ng 提取码:werf (二)安装 进入解压缩后的安装包文件夹: 1.双击运行Power ...

  9. 如何启动linux的telnet服务--转载

    如何启动linux的telnet服务 如何启动linux的telnet服务 步骤如下: 1.如果安装了telnet.telnet-server的rpm包,就跳到2.,否则安装这个包. 2.修改teln ...

  10. sql表中数据遍历

    步骤: 1:先定义一个临时表,把需要用的数据放入临时表中,如果数据不连续,则在临时表中定义一个自增长键 DECLARE @temp table(Id INT IDENTITY(1, 1) ,ShopC ...