范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

架构设计你的应用该如何分层呢?

  前言
  最近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(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。DTO(Data Transfer Object):数据传输对象,用于展示层与服务层之间的数据传输对象。BO(Business Object):业务对象,把业务逻辑封装为一个对象,这个对象可以包括一个或多个其它的对象。DO(Domain Object):领域对象,阿里巴巴规范中引入,此对象与数据库表结构一一对应,通过 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接收由于公司是TO B项目,只有一个电脑web端,所以返回给展示层或者Feign返回的对象建议直接用DTO返回,特殊情况采用VO返回由于历史原因,和数据库模型对应的不采用DO结尾,直接用原始对象,比如学生表student直接使用Student对象目前很多代码存在继承关系,比如DTO、VO继承数据库对象,这个坚决不允许项目目录结构最佳实践
  可以参考github上面的github.com/alvinlkk/ma…这个项目,它是一个极度遵守阿里巴巴代码规约的项目。
  这里面有个关于Feign设计的亮点, 主要是为了避免服务提供方修改了接口,而调用方没有修改导致异常的问题。将feign接口抽取出一个独立的模块
  服务中依赖feign模块,实现FeignClient
  我们来看下整体的一个结构。mall4cloud ├─mall4cloud-api -- 内网接口 │  ├─mall4cloud-api-auth  -- 授权对内接口 │  ├─mall4cloud-api-biz  -- biz对内接口 │  ├─mall4cloud-api-leaf  -- 美团分布式id生成接口 │  ├─mall4cloud-api-multishop  -- 店铺对内接口 │  ├─mall4cloud-api-order  -- 订单对内接口 │  ├─mall4cloud-api-platform  -- 平台对内接口 │  ├─mall4cloud-api-product  -- 商品对内接口 │  ├─mall4cloud-api-rbac  -- 用户角色权限对内接口 │  ├─mall4cloud-api-search  -- 搜索对内接口 │  └─mall4cloud-api-user  -- 用户对内接口 ├─mall4cloud-auth  -- 授权校验模块 ├─mall4cloud-biz  -- mall4cloud 业务代码。如图片上传/短信等 ├─mall4cloud-common -- 一些公共的方法 │  ├─mall4cloud-common-cache  -- 缓存相关公共代码 │  ├─mall4cloud-common-core  -- 公共模块核心(公共中的公共代码) │  ├─mall4cloud-common-database  -- 数据库连接相关公共代码 │  ├─mall4cloud-common-order  -- 订单相关公共代码 │  ├─mall4cloud-common-product  -- 商品相关公共代码 │  ├─mall4cloud-common-rocketmq  -- rocketmq相关公共代码 │  └─mall4cloud-common-security  -- 安全相关公共代码 ├─mall4cloud-gateway  -- 网关 ├─mall4cloud-leaf  -- 基于美团leaf的生成id服务 ├─mall4cloud-multishop  -- 商家端 ├─mall4cloud-order  -- 订单服务 ├─mall4cloud-payment  -- 支付服务 ├─mall4cloud-platform  -- 平台端 ├─mall4cloud-product  -- 商品服务 ├─mall4cloud-rbac  -- 用户角色权限模块 ├─mall4cloud-search  -- 搜索模块 └─mall4cloud-user  -- 用户服务 复制代码结束语
  关于应用分层这块我觉得没那么简单,特别是团队大了以后,人员水平参差不齐,很难约束,很容易自由发挥,各写各的。不知道大家有没有什么好的办法呢?

演员田海蓉亿万富豪丈夫病死狱中,8年后她和女儿过得怎样?田海蓉,一个集颜值演技智慧于一身的女人,昔日当之无愧的收视女王。章子怡都曾是她的手下败将。苦追陆毅四年,被鲍蕾截胡,后又被王志文无情抛弃,面对背叛她只能无奈哀叹不如往前看。演艺事业咖位暴跌,巴黎时装周上章子怡尴尬了她的幸福人生,孔子最懂文沐心江左梅娘要说今年的明星们,谁最尴尬?陈红家的乖儿子陈飞宇算一个,章子怡也一定数得着。就在刚刚闭幕的巴黎时装周上,章娘娘竟然就坐了冷板凳。排队入场,坐角落,穿过季礼服,自费解决做什么事情,可以提升你的幸福感这世上大部分的烦恼都来源于你的能力不足,想要的又太多。能力配不上野心,是所有烦扰的根源。没有在起风的时候跟上,直到后面在拼命追赶。茫茫大路上又怎知在何方呢?怎知少壮不努力,老大徒伤未解之谜乾隆皇帝的父母真的是汉人吗?看过金庸小说书剑恩仇录的人对书中的一个说法一定很好奇,因为书中说乾隆皇帝是红花会总舵主陈家洛的兄弟。其实,小说中的说法并非空穴来风,是有一定来历的。最广泛的说法是乾隆皇帝是浙江海宁15岁女儿还跟爸爸睡一张床,俩人相拥而眠,爸爸女儿自愿的头条创作挑战赛大家好,欢迎来到闫说教育。孩子在刚出生的时候都是没有自理能力的,所以这也就需要父母无时无刻的照顾,才能让孩子健康成长,可有的孩子对父母的依赖性太强,有时甚至出现了恋母马斯克推特否认要建乌托邦小镇,真相如此!他的员工太幸福了!粉丝推文你是世界上最富有的人,你正在建设一座新城市,这就是你想出来的?(指乌托邦小镇)马斯克这篇文章是假的。Thisarticleisfalse。近日,华尔街日报报道称,特斯拉和S女儿非要和爸爸睡一个被窝,妈妈拒绝,女儿的话让她咬牙切齿头条创作挑战赛大家好,欢迎来到闫说教育。现在的家长都推崇给孩子性别教育,在孩子刚出现性别意识,对性产生好奇的时候,家长便想孩子普及性别教育知识,让孩子了解性别差异,不再对性产生好奇张爱玲姑姑民国最精致剩女,78岁第一次做新娘,结局怎样你能想象用52年的时间去爱一个人吗?这份爱深深地埋藏于心中,不破坏他的家庭,不求任何回报,只因为爱他,甚至不知道结果会怎样?情窦初开时的感情是最为美好的,很多人都难忘初恋,但是你见父母爱情中,老年的德华为什么又回到哥嫂家?不要低估人性的善与恶第三遍刷父母爱情。这部剧真是百看不腻,没有轰轰烈烈的故事,只是一日日细碎的生活,就堆砌出一家人磕磕绊绊的一生。在大结局的那集,安杰生病住院,江德福急坏了,一直守在她身边不肯离开,那消防员秀出文艺范用拿灭火器的手弹出动人的音符老师,您听听我这样弹对吗?手指要像这样按在弦的这个位置上,然后发力才能把音弹准。该大队文体骨干程长兵正在与吉他专业王老师学习吉他演奏。近期,为缓解全体消防救援人员执勤战备压力,丰富新添文化金名片,清溪获广东省诗词之乡称号近日,清溪镇顺利通过广东中华诗词学会的验收,被授予广东省诗词之乡称号。此外,清溪镇厦坭村被授予广东省诗教先进单位称号。省级文化金名片的获得,标志着清溪文化建设喜迎丰收,将为清溪打造
好看又显身材的穿法,蓝色连衣裙,搭配粗跟高跟鞋女生们的身材好不好,自己说了不算,只有行人们才能决定,但不管怎么样,对身材自信的女生有很多,其中不乏乐于分享的女生,利用一些专用的服饰,再通过有技术含量的搭配,轻松展现迷人的身姿,孩子原地踏步,其实是矮小症在作祟专业治疗一年,身高迅速增长12。6cm是否您家的宝贝在班上的座位永远离不开前三排是否每年都眼看着自家孩子身高原地踏步却无能为力孩子长不高,及时就医查明原因是关键!总觉得孩子多吃就可以长个,结果却只胖不高说起这个治疗一年四千年难得一遇美人鞠婧祎,难道美女都是人工造的?四千年一遇美女,前女子团体SNH48成员鞠婧祎,以标致外貌,美好身材为人熟悉,不过有网民发现,她的样子跟出道时有明显分别,又试过鼻梁位置凸起及透光,被质疑她是一名人造美女,近日她分揭密丨荆浩开启全景式山水画堪称一代宗师全景式体验是现在较为流行的呈现形式,其实早在五代十国时期就有,它主要体现在绘画作品中,其中画家荆浩就是代表人物,他确立了中国全景式山水画的格局,堪称中国山水画的一代宗师,所绘制的匡火葬场上空那缕青烟作者杨志怀这篇短文,本准备于冬至当日作为对老父亲的祭文刊发,后因疫情突然泛滥,多地火葬场尸满为患,为避嫌而拖延至今天。(一)1983年12月18日,星期天。一封父病危,速回的加急电重磅突发!王思聪在上海打人?警方刚刚通报,万达集团重回巅峰,家族1000亿元身家!位列内地房地产富豪自手撕以岭药业事件后,前首富王健林之子王思聪便在网络上销声匿迹,但是随着一则上海静安警方的通报,王思聪又因为打人火了。1月12日,上海静安警方发布通报,11日4时许接报南京西路一商于谦父亲于庄敬被郭德纲调侃10多年,他本人对此是什么态度?执笔白小青德云社实际上有三个台柱子。其中两个是明面上的,郭德纲和于谦。还有一个则在江湖上留下了无数传说,但却始终首尾都不见,这便是于谦的父亲于庄敬。在郭德纲的嘴里,于庄敬不止叫于庄事实证明,岳云鹏与张云雷的火,是相声界的一个笑话文阅栀编辑阅栀德云社,又摊上事了!因婚内出轨家暴等被停演8个月的张九南,再次在舞台亮相,带着作品老张的葬礼向粉丝宣布爷们儿又回来了!重新站上舞台的张九南,也给娘家德云社带来两种声音游戏里充值二十多万收利息?有位小杨向我们反映,他从2021年开始,往一个手机软件里面充钱,说是能拿到15的利。但去年,这个软件打不开了,钱也取不出来。1818黄金眼人人共享的游戏走偏了怎么善后小杨生活在新疆渣打银行大湾区行政总裁林远栋看好大湾区巨大发展机遇,新时期继续谱写高质量发展新篇章百余年前,一家起源于英国的国际银行渣打银行进入中国市场,开启了与中国金融市场风雨同舟的发展之路。如今,随着粤港澳大湾区建设步伐的提速,渣打银行顺应时代大潮,将目光聚焦到这一片热土上儿子想在中国,不想出来意大利,不知道用什么方式鼓励他出来好和中国的儿子聊完后,感觉特别的难受,是我们做父母的不够好,缺失了孩子的爱,儿子说不想来意大利,想在中国生活。我们当年送孩子回中国,只是想让他们学好中文后,以后来意大利的,可现在孩子