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)

相关推荐

  • 适用于Python的编写工具有哪些

    技术适用于Python的编写工具有哪些本篇内容主要讲解“适用于Python的编写工具有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“适用于Python的编写工具有哪些”吧

    攻略 2021年11月3日
  • vxworks怎么看任务使用情况(vxworks操作系统用在哪儿)

    技术vxworks中系统任务有哪些小编给大家分享一下vxworks中系统任务有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!根据配置的不同,VxWorks系统在启动时,会同步启动一些系统任务,其中有

    攻略 2021年12月22日
  • 微信小程序模拟零钱(微信小程序中的零钱通)

    技术Java模仿微信如何实现零钱通简易功能本篇文章为大家展示了Java模仿微信如何实现零钱通简易功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. 需求描述使用Java 开发

    攻略 2021年12月14日
  • 英国的英语怎么说,“UK”是王国还是帝国

    技术英国的英语怎么说,“UK”是王国还是帝国UK全程是United Kingdom of Great Britain and Northern Ireland——大不列颠和北爱尔兰联合王国英国的英语怎么说。简称联合王国—

    生活 2021年10月25日
  • mysql视图产生派生表无法优化案例

    技术mysql视图产生派生表无法优化案例 mysql视图产生派生表无法优化案例环境:mysql 5.7/8.0
    导入测试数据:git clone https://github.com/datacharm

    礼包 2021年11月4日
  • Hibernate如何实现拦截器与监听器

    技术Hibernate如何实现拦截器与监听器这篇文章将为大家详细讲解有关Hibernate如何实现拦截器与监听器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。拦截器与事件都是Hiber

    攻略 2021年12月8日