首页 > 其他分享 >代码工程结构最佳实践(面向微服务)

代码工程结构最佳实践(面向微服务)

时间:2024-02-26 14:46:58浏览次数:34  
标签:Service 对象 代码 Object 复用 业务 最佳 分层 面向

术语解释:

模块(Module):代码工程里面划分为多个小的、独立的子项目,子项目面向特定的功能场景,子项目之间可以相互关联。例如Maven工程(Project)可以被组织为多个模块(Module),此外每个模块都拥有自己的 pom.xml 文件
包(Package):包是一种组织类的方式,包的主要目的是防止命名冲突,并提供一种将相关的类、接口、枚举和注解等组织在一起的方式,从而简化代码的管理和使用。例如在Java中的Package

备注.本文也的相关代码示例都是基于Java的Maven工程

阿里服务分层规范

参考链接:
你的项目应该如何正确分层?

在阿里的编码规范中,其标准示例如下图:

drawing

图中分层介绍如下:

  • 开放接口层:可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口;进行网关安全控制、流量控制等。
  • 终端显示层:各个端的模板渲染并执行显示的层。当前主要是 velocity 渲染、JS 渲染、JSP 渲染、移动端展示等。
  • Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
  • Service 层:相对具体的业务逻辑服务层。
  • Manager 层:通用业务处理层,它有如下特征:一是对第三方平台封装的层,预处理返回结果及转化异常信息;二是对Service层通用能力的下沉,如缓存方案、中间件通用处理;三是与DAO层交互,对多个DAO的组合复用。
  • DAO 层:数据访问层,与底层 MySQL、Oracle、Hbase 进行数据交互。

可以看到有明显的分层和复用的意义,具体实践为:

  • service层的上层,作为第一层,对外提供业务交互接口,要求:轻业务逻辑、参数校验、异常兜底。
  • service层作为业务组装层,包含业务编排逻辑,一般是针对特定业务定制化编写,复用性较低。
  • Mannager层是基础逻辑层,遵循高内聚低耦合思想,粒度较小,提供给上层复用。

对于上述分层架构,需要考虑的另一个因素,是层次之间一定是相邻层互相依赖,数据的流转也只能在相邻的两层之间流转:

drawing

在阿里巴巴编码规约中,列举了下面几个领域模型规约:

DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。
DTO(Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。
BO(Business Object):业务对象,由Service层输出的封装业务逻辑的对象。
AO(Application Object):应用对象,在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。
VO(View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。
Query:数据查询对象,各层接收上层的查询请求。注意超过2个参数的查询封装,禁止使用Map类来传输。
此外还有:POJO 等
以上领域模型仅供参考,体现在代码工程上就是包(Package)名的定义。在实际工作中,也许只会约定其中几项例如:VO、BO、POJO 。

综上,阿里服务分层规范,在实际编码中对应的是包(Package)的规范,因此其对应的工程结构如下:

todo

COLA 4.0

参考链接:
COLA 4.0:应用架构的最佳实践

todo

面向微服务的最佳实践

todo

标签:Service,对象,代码,Object,复用,业务,最佳,分层,面向
From: https://www.cnblogs.com/yu007/p/18034207

相关文章

  • Vue 学习笔记15--用户代码片段
    { //Placeyour全局snippetshere.Eachsnippetisdefinedunderasnippetnameandhasascope,prefix,bodyand //description.Addcommaseparatedidsofthelanguageswherethesnippetisapplicableinthescopefield.Ifscope //isleftemptyor......
  • 云计算 - 以阿里云为例,企业上云策略全览与最佳实践
    云采用框架(CloudAdoptionFramework,简称CAF)为企业上云提供策略和技术的指导原则和最佳实践,帮助企业上好云、用好云、管好云,并成功实现业务目标。本云采用框架是基于服务大量企业客户的经验总结,将企业云采用分为四个阶段,并详细探讨企业应在每个阶段采取的业务和技术策略;同时,还提......
  • 那些维度评价代码的好坏?设计模式
    1.可维护性对于项目来说,维护代码的耗时,远远大于大于代码的编码。代码维护性非常关键主观评价标准:bug容易修复,添加功能比较简单。2.可读性代码的可读性,关乎代码的可维护性。 代码是否符合代码的命名规范。 命名是否规范,注释是否全面,函数是否长短合适,模块划分是否清......
  • maven使用systemPath方式加载本地jar(代码库)
    比如,jar包直接放到根目录 pom.xml里这么配置<dependency><groupId>njcanc</groupId><artifactId>njcanc</artifactId><version>2.12</version><scope>system</scope><systemPath>${project.b......
  • 这3款免费最佳Google翻译替代品,完美解决谷歌翻译国内用不了的尴尬
    前段时间Google谷歌翻译停止了中国区服务,谷歌翻译退出中国已经成为历史事件,导致Chrome谷歌浏览器无法翻译网页,使得很多小伙伴办公和学习都遇到阻碍,目前搜索谷歌翻译的网址无法正常访问,甚至连谷歌翻译的手机APP也无法使用。谷歌在线翻译突然撤出中国,这猝不及防的操作瞬间让很......
  • uniapp-vue2-微信小程序,canvas 裁切图片的代码
    <canvasclass="edit-question-canvas"type="2d"id="canvasCuteImage"></canvas>/*.edit-question-canvas{position:absolute;left:-750rpx;width:690rpx;height:100rpx;}样式随便自己写*/......
  • 教你如何判断Java代码中异步操作是否完成
    本文分享自华为云社区《java代码实现异步返回结果如何判断异步执行完成》,作者:皮牙子抓饭。在许多应用程序中,我们经常使用异步操作来提高性能和响应度。在Java中,我们可以使用多线程或者异步任务来执行耗时操作,并且在后台处理过程完成后获取结果。但是,在使用异步操作时,我们通常需......
  • 代码随想录 day61 每日温度 下一个更大元素 I
    每日温度单调栈的作用就是记录之前的元素好与当前元素比较从栈顶到栈底单调增找第一个第一个大元素单调减找第一个小元素栈内存的是数组下标而不是数组元素因为存元素还要会数组找元素是谁存下标可以直接用栈元素作为索引找数组元素下一个更大元素I跟每日温度......
  • 【译】代码更快、更好,借助 GitHub Copilot 的新功能:斜杠命令和上下文变量
    你是否曾经希望有一个人工智能助手可以帮助你更快更好地编写代码?那就是VisualStudioCopilotChat为您提供的:一个人工智能驱动的结对程序员,可以回答您的问题,建议代码片段,解释代码逻辑,并与您讨论您的项目。您可以使用Copilot更快更好地编写代码,因为它可以帮助您避免错误并......
  • 我获得的职业生涯发展最佳建议
    原文:https://humanwhocodes.com/blog/2013/10/15/the-best-career-advice-ive-received/作者:NicholasC.Zakas写在前面最近,我和一位同事进行了一次有趣的讨论。我们回忆了各自的工作经历,以及我们这些可以说是丰富多彩的个性如何对我们的长期工作产生了负面影响。事实上,大学毕......