首页 > 其他分享 >可扩展的三层代码设计

可扩展的三层代码设计

时间:2023-08-20 14:34:28浏览次数:39  
标签:Soa Service 代码 BO 扩展 接口 Entity Facade 三层

可扩展的三层代码设计

图片

这次我们根据上面的图,来谈谈一个SOA服务的代码怎么分层才能做到维护起来如丝般顺滑,下面我们一层一层的说。

  • Soa Service层

SOA层是对外暴露的API层,来表现一些服务能力,打个比方,一个商户服务,可以修改店铺的营业时间,修改营业状态,修改店铺属性等等,这些基础能力的SOA接口则在SOA层暴露出来。

  • Soa Facade Service层

这个叫Facade Soa也好,叫Biz Soa也好,如果是针对某些特定的方做的一些能力的聚合,则使用Facade会更好一些,比如店铺有针对营销的一些接口,并且做了一些裁剪,捆绑,包装等等,则可以抽象出一个
ShopForPromotionFacadeSoa;如果是做一些逻辑上的定制,比如关店并且上锁,可以在ShopForLpdBalanceBizSoa接口里面暴露这个功能,所以具体是Facade还是Biz都是根据实际的功能来命名的,但总的来说,不管是Facade还是Biz,都是对基本Soa的细化,欢聚话说,基本Soa接口是对Facade和Biz的抽象。

综上, Soa和Soa Facade都可以安排在一个叫soa的包里面。当然肯定还有个对应的impl包

  • Domain Service 层

Domain Service层是对具体业务领域的更近一次的抽象,更加接近于业务领域的原子接口,注意,这是业务领域的原子接口,比如Redis缓存,比如MQ消息发送,比如DB的数据操作,比如其他RPC信息的封装,DomainService接口接收和返回的是BO/Entity。

  • Repository Service 层

仓库层,这个仓库是对底层基础设施的封装,比如DB,Redis,Rpc,Es等等... 仓库层对外接收和透出的是BO/Entity, 包括异常,也应该是屏蔽了底层第三方异常。

  • Tunnel Service 层

通道层, 通道层是真正操作DB,Redis,Rpc等基础设施层,这里面透出的可以是第三方的DTO,可以是PO,可以是第三方的Exception

综上
Domain Service 和 Repository Service 这些可以安排在一个叫做 core 的包里面
Tunnel Service 可以安排在一个叫 common 的包里面

  • 其他

如图,DomainService 从始至终都只有BO/Entity 在里面流转, soa impl包里面有BO/Entity 到 DTO 的Transformer, Repository 里面有 PO/第三方DTO到 BO/Entity 的Transformer...

标签:Soa,Service,代码,BO,扩展,接口,Entity,Facade,三层
From: https://www.cnblogs.com/sutgc/p/17643964.html

相关文章

  • vscode 工作区文件数目太多时,代码无法提示补全
    VScode工作区过大时Python插件失效,无法跳转-CSDN根据这篇文章的说法,是由于语言服务器要搜索源文件,文件数目太多时会消耗时间过多,此时表现为ctrl点击模块名/函数名无法跳转(都是白色的,不是彩色的)。打开vscode--输出--Python语言服务器可以看到详细的日志解决方法......
  • 基础入门-算法分析&传输加密&数据格式&密文存储&代码混淆&逆向保护
    基础入门-算法分析&传输加密&数据格式&密文存储&代码混淆&逆向保护基础入门-算法分析&传输加密&数据格式&密文存储&代码混淆&逆向保护传输数据-编码型&加密型等传输格式-常规&JSON&XML等密码存储-Web&系统&三方应用代码混淆-源代码加密&逆向保护加密:1.常见加密编码进制等算法解......
  • 想用低代码平台?不需要从零开始,AstroZero了解一下玩转低代码【玩转低代码】
    低代码,从零开始?对低代码的犹豫点?春风一夜万树开,有一阵,好似大家都在做中后台,都在研究或实现低代码平台。见面聊天在讨论,网上文章也在讲。但是我为什么对从零开始打了一个问号呢?按说我这种喜欢折腾的开发者,怎么也要搞一套。不止我,我的团队,曾有过搭建低代码平台的计划。当时计划集中一......
  • jeecg-Boot基于H2驱动的JDBC任意代码执行
    这几天的把人都给熬傻了,这个漏洞需要添加H2数据库依赖,jeecg自带的依赖没有什么可以利用的点,不知道有没有大师傅有其他想法漏洞描述JeecgBoot受影响版本中,由于jeecg-boot/jmreport/testConnectionApi接口未进行身份验证,并且未对dbUrl参数进行限制,当应用端存在H2数据库驱动依......
  • java基础运算符04(扩展运算符,三元运算符,包机制)
    扩展赋值运算符扩展赋值运算符属于比较偷懒的一种方式,+=,-=,*=,/=都是同样的原理和运用方式,不深入学习,就代码示例一下publicclassDemo{publicstaticvoidmain(String[]args){inta=10;intb=20;a+=b;//a=a+bSystem.out.prin......
  • python机器学习经典算法代码示例及思维导图(数学建模必备)
    最近几天学习了机器学习经典算法,通过此次学习入门了机器学习,并将经典算法的代码实现并记录下来,方便后续查找与使用。这次记录主要分为两部分:第一部分是机器学习思维导图,以框架的形式描述机器学习开发流程,并附有相关的具体python库,做索引使用;第二部分是相关算法的代码实现(其实就是......
  • Python足球小游戏代码
    基于Python pygame的足球游戏源代码,游戏可以双人玩,游戏入口程序为soccer.py。控制人物一方向键:wasd,射门键:r控制人物二,方向键:键盘方向键,射门键:k程序运行截图核心程序代码:soccer.py#-*-coding:utf-8-*-from__future__importunicode_literalsimportitertools,sys,ti......
  • 基于forms组件和Ajax请求的注册功能(代码)
    前端1<divclass="container-fluid">2<divclass="row">3<divclass="col-md-8col-md-offset-2">4<h1class="text-center">注册</h1>5<formid......
  • [代码随想录]Day22-回溯算法part02
    题目:216.组合总和III思路:多加一个记录和的参数,还有一个起始位置的参数(不重复就得加)结束条件是个数到了k:如果此时sum==n那就说明答案正确如果此时sum!=n那就直接返回剪枝的话:如果之后的和大于n那就没必要继续遍历了代码:varres[][]int//答案varpath[]int......
  • k8s推送代码至gitlab报错error: RPC failed; result=22, HTTP code = 413 fatal: The
    #gitpush-uoriginmainUsernamefor'http://gitlab.wjl.net':rootPasswordfor'http://[email protected]':Countingobjects:1032,done.Deltacompressionusingupto8threads.Compressingobjects:100%(871/871),done.error:R......