spring基于领域分析设计的架构规范

技术spring基于领域分析设计的架构规范本篇内容主要讲解“spring基于领域分析设计的架构规范”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“spring基于领域分析设计的

本文主要解释“基于领域分析和设计的spring架构规范”。感兴趣的朋友不妨看看。本文介绍的方法简单、快速、实用。让边肖带你学习“基于领域分析与设计的春季架构规范”!

领域聚合

让我们以一个相对简单的小型电子商务系统为例来说明几个概念。该电子商务系统的大致要求如下

我们的主打产品是甜品,计划用户可以通过微信小程序完成从点餐到付款的全过程。

用户可以在我们小程序的首页选择甜品主食,然后选择一些详细的配件进行搭配,最后下单。(为了简单起见,我们暂时不考虑购物车,即一个订单只有一个甜品。)

目前只允许在大厅就餐,不考虑配送。

对了,我们偶尔需要发放一些优惠券,用户在付款时可以输入优惠券进行抵扣(一次最多一张优惠券)。

我们希望能够记录每个用户从下单、付款到制作的全过程记录。

然后,我们就可以快速的画出这样的模型图。

spring基于领域分析设计的架构规范

简单来说,就是:

当然,用户可以创建多个订单,而无需下订单。

订单将至少生成一条订单变更记录(从创建开始)。

一个订单只对应一个产品,假设产品的“配件匹配”只作为产品的“备注”属性存储。

一张订单最多只能使用一张优惠券,而且优惠券在那个时候永远不能使用。

如果此时问你,你觉得那两个模型类的相互关系是最紧密的呢?相信几乎每个人都不反对这个答案。

spring基于领域分析设计的架构规范

也许你不能说为什么在这个时候,但至少从直觉,的角度来看每个人都会选择这种方式,而且是真的。

因为这是聚合——订单聚合。

他们的关系非常密切。有多近?如果非要挑一个最重要的因素,那就是:订单变更记录不能离开订单而单独存在.是的,它们必须在一起,订单是中心,变更记录是它的附属。如果订单不存在,或者没有指定订单,那么这个变更记录就没有意义。

其中,顺序被称为聚合根,或根实体。的所有操作都来自订单,而订单更改记录等非根实体不直接与外部世界打交道。

优惠券呢?优惠券不能只用于订单吗?不应该属于“订单优惠券”吗?

不,因为优惠券可以不用,那时候没有订单也是存在的,我们可以在不需要外界任何其他领域的情况下,直接对优惠券进行一些设置修改,这也说明它是一个独立的领域,或者说是一个独立的集合体。

至于分析的目的,我们将在拥挤模型一章中详细解释。

分层模型

下图显示了《领域驱动设计》中提到的分层架构。

spring基于领域分析设计的架构规范

关于原著中四层的介绍,这里就不在原文中重复了。根据我的理解(或疑问),我选择重点分别介绍一下:

用户界面层

实际上,这里有些混乱。不知道作者有没有包括前端应用。如果没有,那么可能有类似网关或路由配置层的东西。然而,这不是领域分析的重点。

00-1010这是一个与领域层的边界相对模糊的层。在原著中,这一层的描述如下:

定义软件能做什么.它不包括处理业务规则或知识,只是协调任务并将工作委托给下一层的协作域对象。

“定义软件可以完成的工作”,我们可以理解这是一个应用服务门户,一个功能单元和一个API。然后,以SpringMVC为例,我们开发的时候门户是什么?自然是@Controller。如果您需要事务支持,可以在这里添加@Transactional。不要以为交易不加@Service,也没什么奇怪的。摆脱这种思维惯性。

“它不包含处理业务规则或知识”

,并非完全“和业务无关”。广义上来说,连一个商业项目的整个架构都是为业务来服务,就算是遵循了“开闭原则”,保证了“扩展性”,依旧是以业务方向做主导。所以,应用层也会涉及业务,但是却非“核心逻辑”。那如何界定?我目前也没有想到一个可以简单描述出来的说法,只是做了一些相对简单粗暴的规定:如果这个功能要求用到一些公共的组件,诸如文件上传下载,EXCEL/WORD等文件解析等明显是工具型做法,一般来说都能放在这一层。

领域层

核心业务逻辑,之后我们讨论的主要内容都在这一层。

基础设施层

持久化读写,公共组件如上面提到的文件下载工具等,还有比如RPC的框架组件等等,都属于此层。这一层可以被上面的任何一层直接调用

到此,相信大家对“spring基于领域分析设计的架构规范”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/96659.html

(0)

相关推荐

  • 将全站进行HTTPS化优势是什么

    技术将全站进行HTTPS化优势是什么本篇文章为大家展示了将全站进行HTTPS化优势是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在HTTPS项目的开展过程中明显感觉到目前国

    攻略 2021年11月12日
  • Maven简介与Maven相关概念

    技术Maven简介与Maven相关概念 Maven简介与Maven相关概念目录Maven第一部分 Maven简介1 项目开发中的问题2 Maven概述Maven定义Maven的作用第二部分 Maven相

    礼包 2021年11月27日
  • 光影精灵,光影精灵和暗影精灵的区别是什么

    技术光影精灵,光影精灵和暗影精灵的区别是什么区别1光影精灵:定位首先,光影精灵5和暗影精灵5最直观的区别就是两者的设计风格完全不同,这个不需要什么分析,也不需要懂产品,只要是有认知能力的人看到图片都会得出这样的结论。两者

    生活 2021年10月22日
  • vue组件上绑定原生事件

    技术vue组件上绑定原生事件 vue组件上绑定原生事件将原生事件绑定在组件上 .native 修饰符:
    子组件
    templatediv class="demo"h2我是子组件/h2h3我是子组件中的信息

    礼包 2021年10月26日
  • python内置函数中的均值函数在哪(python中计算数量的函数)

    技术Python矩与矩生成函数是什么本篇内容主要讲解“Python矩与矩生成函数是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python矩与矩生成函数是什么”吧!斜度

    攻略 2021年12月21日
  • 男人英语单词是什么,英语单词man和men怎么发音

    技术男人英语单词是什么,英语单词man和men怎么发音man[m鎛]把嘴巴张大一点,强调嬉簟en[men]嘴巴张小一点,不需要强调e音男人英语单词是什么。policeman也是一样,嘴巴张大一点,强调嬉簟olicem

    生活 2021年10月27日