DDD架构中的领域是什么?


​ 我们经常说到DDD分层架构(领域驱动设计),那么究竟什么是DDD架构?如果去网上查通常会告诉你告诉你区别于过去的三层架构思想,DDD(领域驱动设计)是一种四层架构,一般网上给出的就是用户接口层、应用层、领域层、基础层。而当你真正开始看的时候发现通篇文章中会反复出现领域这个词,而领域究竟是什么?却又很少有人能去解释或者说无法解释

1、浅谈领域一词

​ 领域一词在不同人不同行业中都有不同的理解。中文中【领域】有生物学概念、数学概念等多重意义。出自闻一多《文学的历史动向》:“诗,不但支配了整个文学领域,还影响了造型艺术。” 对它的解释有:具体指一种特定的范围或区域、一国主权所达之地、一种专门活动或事业的范围、部类或部门。那么根据字面意思来看,无论何种解释,它指的都是一个范围一个区域。

2、面向对象谈领域

​ 1、现在的编码都由原来的面向过程编程变成了面向对象编程

​ 2、既然我们是谈DDD(领域驱动设计),那么就得先知道DDD(领域驱动设计)的大概思想,这里先不多做解释,在DDD设计模型中,领域的核心思想是业务

​ 通过以上两点我们得到了我们是面向对象编程,我们的DDD(领域驱动设计)领域核心是业务。那么对象和领域又是什么样的关系呢?

​ 我们都知道代码中有一种思想叫做抽象,而抽象就是把现实中真实存在的一些人、物或者事等等使用抽象化的代码来表示,对于抽象出来的代码我们用一个类表示,这个类有自己的属性有自己的操作,而这个类就是一个对象,我们又叫做实体

​ 我们之前说了,领域就是一个范围,在面向对象编程中,一个领域就是多个相同实体的集合,是一个一对多的关系,从多个相似实体抽象出共同特征得到一个领域

3、领域的划分

​ 领域划分的主要思想是从需求出发,通过需求先划分实体。通过上面我们知道领域是多个实体的集合,那么再通过实体划分领域。这样一来我们包含的层级结构一下就出来了,具体我们以一个商城的案例分析一下

​ 1、首先我们对需求进行深度分析,商城一般包含有订单实体、订单详情实体、营销活动实体、营销工具实体等等

​ 2、接下来我们需要对所有实体按照职责相似度,对实体进行归类,每一类我们取一个新的名字,这就是领域。比如我们的订单实体和订单详情实体都是在交易的时候需要的,而营销活动和营销工具都是做推广的,那么我们分别为其取名为交易域和推广域。这也体现了我们之前所说的领域和实体一对多的关系

​ 虽然只有两个步骤,但是具体的分析却是要慎之又慎,如果当碰到一个新的实体就划分为一个新的域,那么你会恐怖的发现自己的域会越来越多,这个时候对于未来的业务上又会出现越来越多的高耦合场景。所以对于抽象出域的标准和规范需要根据具体业务场景进行深度分析之后划分。切忌:以场景来划分领域,我们应该以业务对象聚合来划分领域

​ 领域划分的原则就是按照实体的职责相似度来划分,领域之间的边界明显清晰。而这就是为了达到领域的高内聚低耦合。最大程度上做到相似的领域聚集在一起,无相似度的领域之间最好是隔离的、耦合度很低的,这样更加有利于业务的稳定和扩展。

4、回顾

​ 以上讲解的就是我们DDD(领域驱动设计)中的领域和领域划分,具体我们划分了领域有什么作用,在DDD(领域驱动设计)中怎么去使用这种划分,我们在下一篇中再慢慢谈

DDD架构中的领域是什么?的更多相关文章

  1. 关于领域驱动设计(DDD)中聚合设计的一些思考

    关于DDD的理论知识总结,可参考这篇文章. DDD社区官网上一篇关于聚合设计的几个原则的简单讨论: 文章地址:http://dddcommunity.org/library/vernon_2011/, ...

  2. 分享一个CQRS/ES架构中基于写文件的EventStore的设计思路

    最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客 ...

  3. DDD~概念中的DDD(转)

    概念中的DDD DDD: 领域驱动设计,它是对面向对象的的分析和设计(OOAD,Object Orient Analysis Design)的一个补充,对技术框架进行了分层规划,同时对每个类进行了策略 ...

  4. DDD(Domain Driver Designer) 领域驱动设计简介

    领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity i ...

  5. ASP.NET Core Web API下事件驱动型架构的实现(四):CQRS架构中聚合与聚合根的实现

    在前面两篇文章中,我详细介绍了基本事件系统的实现,包括事件派发和订阅.通过事件处理器执行上下文来解决对象生命周期问题,以及一个基于RabbitMQ的事件总线的实现.接下来对于事件驱动型架构的讨论,就需 ...

  6. MVC架构中的Repository模式 个人理解

    关于MVC架构中的Repository模式   个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间.它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接 ...

  7. InfoQ 趋势报告:架构和设计领域技术演变详解

    https://www.infoq.cn/article/R7lWXd0R4VFf3E0bB*38 本文概述了我们对当前“架构和设计”领域的看法,这个领域侧重于基础设施模式.技术框架模式的实现,以及软 ...

  8. NET Core Web API下事件驱动型架构CQRS架构中聚合与聚合根的实现

    NET Core Web API下事件驱动型架构在前面两篇文章中,我详细介绍了基本事件系统的实现,包括事件派发和订阅.通过事件处理器执行上下文来解决对象生命周期问题,以及一个基于RabbitMQ的事件 ...

  9. ddd 架构设计——abp

    一.为什么要分层 分层架构是所有架构的鼻祖,分层的作用就是隔离,不过,我们有时候有个误解,就是把层和程序集对应起来,就比如简单三层架构中,在你的解决方案中,一般会有三个程序集项目:XXUI.dll.X ...

  10. 单元测试布道二:在全新的 DDD 架构上进行单元测试

    目录 回顾 dotnet 单元测试相关的工具和知识 可测试性 不确定性/未决行为 依赖于实现:不可 mock 复杂继承/高耦合代码:测试困难 实战:在全新的 DDD 架构上进行单元测试 需求-迭代1: ...

随机推荐

  1. Linux python后台任务

    Ubuntu 后台持续运行python服务 一般使用 nohup python -u app.py>t.log 2>&1 & nohup python3 -u app.py ...

  2. RabbitMq的部署(docker)和操作(python)详解

    一.简介: RabbitMq 是实现了高级消息队列协议(AMQP)的开源消息代理中间件.消息队列是一种应用程序对应用程序的通行方式,应用程序通过写消息,将消息传递于队列,由另一应用程序读取 完成通信. ...

  3. obs问题记录

    1.安装obs后,可能无法使用,需要下载dll文件,我的阿里云盘中有: 2.录制时电脑没电会报错'编码器错误': 3.插上声卡后播放视频想听到声音需要在声卡上插耳机听: 4.

  4. 个人PSP(四则运算)升级

    源代码管理平台Gitbee地址:https://gitee.com/chen-haijin/ 1.题目要求:能自动生成小学四则运算题目,且每一道题目的运算结果不能为负.除了支持整数运算外,还要支持真分 ...

  5. Offer 提速:如何写出有亮点的简历

    先来个灵魂拷问: 你与他人相比,有什么能形成明显区分度的优势条件? 这里有两个层面的问题,一是 如何识别出你的优势条件,毕竟大多数人大多数时候可能都是在做业务,临到写简历的时候要求总结日常工作中跟别人 ...

  6. java-------导出数据csv

    outputStream = new FileOutoutStream(file); outputStreamWriter = new OutputStreamWriter (outputStream ...

  7. CentOS7 yum方式安装mysql 5.7

    1.检查服务器上有没有安装mysqlyum安装方式:yum list installed mysql*yum卸载 yum remove 已安装的包卸载完安装包后,删除安装文件rm -rf /var/l ...

  8. 实验5 开源控制器实践——POX

    实验5 开源控制器实践--POX 一.实验目的 1.能够理解 POX 控制器的工作原理: 2.通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握P ...

  9. java文本转语音

    下载jar包https://github.com/freemansoft/jacob-project/releases 解压,将jacob-1.18-xxx.dll相应放到项目使用的JAVA_HOME ...

  10. pip install keras==2.0.3 -i https://pypi.tuna.tsinghua.edu.cn/simple

    pip install keras==2.0.3 -i https://pypi.tuna.tsinghua.edu.cn/simple