架构设计你的应用该如何分层呢?
前言
最近review公司的代码,发现现在整个代码层级十分混乱,一个service类的长度甚至达到了5000多行。而且各种分层模型DTO、VO乱用,最终出现逻辑不清晰、各模块相互依赖、代码扩展性差、改动一处就牵一发而动全身等问题。
我们在吸取了阿里巴巴的分层规范以及网上的一些经验后,重新梳理总结了属于我们项目的分层规范。三层架构VS四层架构
我们公司原来的分层采用的是传统的三层架构,比如在构建项目的时候,我们通常会建立三个目录:Web、Service和Dao,它们分别对应了表现层、逻辑层还有数据访问层。
这样导致一个很大的问题,随着业务越来越复杂,逻辑层也就是service层越来越庞大,所以出现了前面说的5000多行的类,可想而知维护成本有多大。
参照阿里发布的《阿里巴巴Java开发手册v1。4。0(详尽版)》,我们可以将原先的三层架构细化成下面的样子:
终端显示层:各端模板渲染并执行显示的层。当前主要是Velocity渲染,JS渲染,JSP渲染,移动端展示等。开放接口层:将Service层方法封装成开放接口,同时进行网关安全控制和流量控制等。Web层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。Service层:业务逻辑层。Manager层:通用业务处理层。主要实现下面的功能,1)对第三方平台封装的层,预处理返回结果及转化异常信息,适配上层接口。2)对Service层通用能力的下沉,如缓存方案、中间件通用处理。3)与DAO层交互,对多个DAO的组合复用。DAO层:数据访问层,与底层MySQL、Oracle、Hbase等进行数据交互。外部接口或第三方平台:包括其它部门RPC开放接口,基础平台,其它公司的HTTP接口。
在这个分层架构中主要增加了Manager层,它可以将Service层中的一些通用能力比如操作缓存、消息队列的操作下沉,也可以将通过feign调用其他服务的接口进行一层包装,再提供给Service调用,这也就是所谓的防腐层。VO、DTO、BO、DO区别
前面讲解了整体的一个分层架构,那么在不同的层级之间必然需要一些模型对象进行流转传递,VO,BO,DO,DTO,那么他们之间有什么区别呢?VO(ViewObject):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。DTO(DataTransferObject):数据传输对象,用于展示层与服务层之间的数据传输对象。BO(BusinessObject):业务对象,把业务逻辑封装为一个对象,这个对象可以包括一个或多个其它的对象。DO(DomainObject):领域对象,阿里巴巴规范中引入,此对象与数据库表结构一一对应,通过DAO层向上传输数据源对象。VO和DTO什么区别?
VO比较容易混淆的是DTO,DTO是展示层与服务层之间传递数据的对象,可以这样说,对于绝大部分的应用场景来说,DTO和VO的属性值基本是一致的,而且他们通常都是POJO,那么既然有了VO,为什么还需要DTO呢?
例如服务层有一个getUser的方法返回一个系统用户,其中有一个属性是gender(性别),对于服务层来说,它只从语义上定义:1男性,2女性,0未指定,而对于展示层来说,它可能需要用帅哥代表男性,用美女代表女性,用秘密代表未指定。说到这里,可能你还会反驳,在服务层直接就返回帅哥美女不就行了吗?对于大部分应用来说,这不是问题,但设想一下,如果需求允许客户可以定制风格,而不同风格对于性别的表现方式不一样,又或者这个服务同时供多个客户端使用(不同门户),而不同的客户端对于表现层的要求有所不同,那么,问题就来了。再者,回到设计层面上分析,从职责单一原则来看,服务层只负责业务,与具体的表现形式无关,因此,它返回的DTO,不应该出现与表现形式的耦合。BO和DTO的区别?
从用途上进行根本的区别,BO是业务对象,DTO是数据传输对象,虽然BO也可以排列组合数据,但它的功能是对内的,但在提供对外接口时,BO对象中的某些属性对象可能用不到或者不方便对外暴露,那么此时DTO只需要在BO的基础上,抽取自己需要的数据,然后对外提供。在这个关系上,通常不会有数据内容的变化,内容变化要么在BO内部业务计算的时候完成,要么在解释VO的时候完成。
我们项目根据实际情况总结了分层领域模型的规范:前端传入的参数统一使用DTO接收由于公司是TOB项目,只有一个电脑web端,所以返回给展示层或者Feign返回的对象建议直接用DTO返回,特殊情况采用VO返回由于历史原因,和数据库模型对应的不采用DO结尾,直接用原始对象,比如学生表student直接使用Student对象目前很多代码存在继承关系,比如DTO、VO继承数据库对象,这个坚决不允许项目目录结构最佳实践
可以参考github上面的github。comalvinlkkma这个项目,它是一个极度遵守阿里巴巴代码规约的项目。
这里面有个关于Feign设计的亮点,主要是为了避免服务提供方修改了接口,而调用方没有修改导致异常的问题。将feign接口抽取出一个独立的模块
服务中依赖feign模块,实现FeignClient
我们来看下整体的一个结构。mall4cloudmall4cloudapi内网接口mall4cloudapiauth授权对内接口mall4cloudapibizbiz对内接口mall4cloudapileaf美团分布式id生成接口mall4cloudapimultishop店铺对内接口mall4cloudapiorder订单对内接口mall4cloudapiplatform平台对内接口mall4cloudapiproduct商品对内接口mall4cloudapirbac用户角色权限对内接口mall4cloudapisearch搜索对内接口mall4cloudapiuser用户对内接口mall4cloudauth授权校验模块mall4cloudbizmall4cloud业务代码。如图片上传短信等mall4cloudcommon一些公共的方法mall4cloudcommoncache缓存相关公共代码mall4cloudcommoncore公共模块核心(公共中的公共代码)mall4cloudcommondatabase数据库连接相关公共代码mall4cloudcommonorder订单相关公共代码mall4cloudcommonproduct商品相关公共代码mall4cloudcommonrocketmqrocketmq相关公共代码mall4cloudcommonsecurity安全相关公共代码mall4cloudgateway网关mall4cloudleaf基于美团leaf的生成id服务mall4cloudmultishop商家端mall4cloudorder订单服务mall4cloudpayment支付服务mall4cloudplatform平台端mall4cloudproduct商品服务mall4cloudrbac用户角色权限模块mall4cloudsearch搜索模块mall4clouduser用户服务复制代码结束语
关于应用分层这块我觉得没那么简单,特别是团队大了以后,人员水平参差不齐,很难约束,很容易自由发挥,各写各的。不知道大家有没有什么好的办法呢?
科莫多巨蜥的毒液到底有多可怕?2009年,一名31岁的渔民安瓦尔,在印尼科莫多岛上采摘水果,结果不小心从水果树上掉了下来,刚好踩到了一只巨型蜥蜴,蜥蜴瞬间就朝他扑了过去,咬住了他的腿,之后又咬住了他的手臂,身体
武汉未来的房价会涨到100000元平米吗?这个问题的答案是肯定的!以目前的趋势,未来武汉房价必然达到10万的水平,只是时间长短的问题。2010年至2017年,短短七年间,武汉的房价已经翻了3番,目前,武汉部分高端楼盘如洞庭
兰州青白石片区,中央公园怎么样?兰州北拓的黄金区域,目前基础交通还跟不上建设需要,交通滞后可能会成为十四五期间兰州青白石片区发展的的最大障碍!不过就兰州地理位置和城区格局而言,青白石片区是离主城区最近的待开发区域
农民为什么不在国家统计失业范围之内?中国有四个儿子,大儿子叫工人,二儿子叫子弟兵,三儿子叫公务员,四儿子叫农民,所以四儿子就没有纳入统计失业包括养老金范围,因为四儿子有金山银山还有三分地。农民有土地,这是农民可以赖以
农村成立社区是什么意思?很多农村驻有村委会办公室,同时也驻有社区管理委员会办公室,特别是在城市郊区的农村和街道的农村都同时设立了村委会和社区管理委员会,很多人弄不明白是怎么回事。那农村成立社区是什么意思呢
农村里的剩男,为何一剩再剩呢?到底是什么原因?男女比例失调。计划生育只要一个孩子时,受封建思想影响,都拚命要男孩,等他们长大了,很难找到媳妇。一,农村姑娘远嫁,二,女孩见少,三,彩礼高,四,剩男挣钱少。我就一大龄剩男!个人亲身
抖音付费直播试水,看直播要给钱了?我们应该如何思考?使劲收,最好是家人们看的话,一分钟100块钱。毕竟粉丝听话的很。毕竟人设都设计好了打PK,卖货摆错价格,怒亏2个亿回馈粉丝。没事就怼工厂,怼员工反正就是赔钱回馈粉丝。赔完还得补交税
马上就要退休了,退休工资才3650元太少了,怎么办?3600不少了。我企业工龄32年,退休时退休金只有2200,涨了这么多年还不到3000。知足常乐吧!如果身体不好,这些钱也够生活了,如果身体还可以,就找一些力所能及的工作,打打工补
南宁五象新区未来的发展潜力很大吗?五象新区无法成为国家级新区!!!目前看来,五象新区的潜力也就这样了。我们对比一下贵阳的贵安新区,贵安新区的面积是1700平方公里,由贵阳市的郊区和安顺市合并得来。是全国第8个国家级
如果把三峡大坝加高10米,截留更多的洪水,可行吗?我国的三峡大坝,作为当今世界上最大的水利枢纽工程,位于湖北省宜昌市上游,距下游葛洲坝水电站38公里,三峡大坝全长2309米高185米,呈梯形形状,集发电旅游航运调控洪水于一身。三峡
大家有经历过亲人去世吗?是怎样走出痛苦和想念的?2018年9月1日下午3点8分,我的妻子在医院里停止了呼吸。她的眼睛没有闭上,我流着泪,帮她合上了双眼。我永远失去了我最亲近的爱人,孩子永远的失去了妈妈。一位好妻子,好女儿,好姑妈
哪个女明星走红毯最美?我认为是家喻户晓的女明星全智贤,相信很多人都对韩国著名女星全智贤非常熟悉了,是优质的偶像明星,是多少人心目中的女神,几年前来自星星的你异常火爆,千颂伊是多少人的女神,全智贤的美是公
有没有植物直接能染发的?想用植物进行染发,肯定是看中它纯天然这个原因,不会对头发以及身体产生不良的损伤,而真的有可以用植物直接染发的,我知道的就有两种,一种是海娜花另一种是土豆,海娜花大家肯定都比较熟悉,
喝多了在车里睡一会儿,车子没有移动,算不算酒驾?看到过这样的例子,小区有人酒喝多了,躺后座睡一觉,半夜的时候冻醒了,于是启动车子打开空调继续在后座睡觉,车窗也是打开一点的,有人看到车子发动着就报警了,警察来了叫醒他,算他酒驾,因
苏州总共有几碗兴字头的面?同德兴同得兴创立于1997年,是由有姑苏面痴之称的肖伟民一手创建的品牌。肖伟民说,取名同得兴,一是沿袭苏州老字号面馆兴的传统,二是希望做面的吃面的都能同德同心,共同做大苏州一碗面。
为什么说光瓶汾是性价比最高的白酒?很高兴回答你的问题。光瓶汾酒,有红盖汾和黄盖汾,红盖汾42度,黄盖汾53度,绝对的纯粮酒,有纯粮标志,价格在45元左右,在这个价位的白酒来说,确实是性价比最高的白酒了,适合当口粮酒
用冷门的手机是一种怎样的体验?我大概就是一直用冷门手机的那个人。在上大学的时候,一直用诺基亚,还算正常。因为3100,6670质量真的没话说。爸妈给我买的。一直也没坏,只是为了可以登录后台可以运行的qq让我迷上
哪些网站可以下载ppt模板?如今,PPT模板下载网站越来越多,有免费也有收费的。但充哥不提倡收费网站,毕竟单个模板下载可能花费2030元,但能使用到的可能只有封面目录图表页面,购买的话并不划算,甚至有些免费模
多少人上头条是为了刷金币?我是去年看的头条,只是简单注册一下,没有认证,只是简单的看看新闻,看看视频,金币的多少没有刻意去注意,感觉头条上的爆料比百度啊什么的内容比较丰富,闲暇之余还可以给个几毛钱的,现在看
第三季度手机排行榜公布,华为跌出前五,你怎么看?这主要是美国打压的功劳。大魔王懂王特朗普上台前,华为手机业绩曾直追三星和苹果,大有赶超之势,却遭到美国及其盟友的联合打压,最关键的就是拉入黑名单,进行限芯,生怕华为抢了西方列强的奶
应届毕业生错过秋招和春招会面临什么?子禾王老师曾在大学就任学生就业指导中心主任,这个问题我来帮你。如果之后还有什么疑问可以继续找王老师提问。你的问题中没有写是因为什么原因错过了招聘季,这对于问题的回答有一点影响。但比
中考过后,我上的中职。但是想考985,211。有什么办法吗?最差的普高都没考取,还看好985。211,洗洗睡吧,梦里啥都有。肯定可以!你看我的故事吧!!机智机智说一下我自己吧,希望给你一点动力。我是2015年考上了高中,但是本地只有一所公办