DDD架构中的领域是什么?
DDD架构中的领域是什么?
我们经常说到DDD分层架构(领域驱动设计),那么究竟什么是DDD架构?如果去网上查通常会告诉你告诉你区别于过去的三层架构思想,DDD(领域驱动设计)是一种四层架构,一般网上给出的就是用户接口层、应用层、领域层、基础层。而当你真正开始看的时候发现通篇文章中会反复出现领域这个词,而领域究竟是什么?却又很少有人能去解释或者说无法解释
1、浅谈领域一词
领域一词在不同人不同行业中都有不同的理解。中文中【领域】有生物学概念、数学概念等多重意义。出自闻一多《文学的历史动向》:“诗,不但支配了整个文学领域,还影响了造型艺术。” 对它的解释有:具体指一种特定的范围或区域、一国主权所达之地、一种专门活动或事业的范围、部类或部门。那么根据字面意思来看,无论何种解释,它指的都是一个范围一个区域。
2、面向对象谈领域
1、现在的编码都由原来的面向过程编程变成了面向对象编程
2、既然我们是谈DDD(领域驱动设计),那么就得先知道DDD(领域驱动设计)的大概思想,这里先不多做解释,在DDD设计模型中,领域的核心思想是业务
通过以上两点我们得到了我们是面向对象编程,我们的DDD(领域驱动设计)领域核心是业务。那么对象和领域又是什么样的关系呢?
我们都知道代码中有一种思想叫做抽象,而抽象就是把现实中真实存在的一些人、物或者事等等使用抽象化的代码来表示,对于抽象出来的代码我们用一个类表示,这个类有自己的属性有自己的操作,而这个类就是一个对象,我们又叫做实体
我们之前说了,领域就是一个范围,在面向对象编程中,一个领域就是多个相同实体的集合,是一个一对多的关系,从多个相似实体抽象出共同特征得到一个领域
3、领域的划分
领域划分的主要思想是从需求出发,通过需求先划分实体。通过上面我们知道领域是多个实体的集合,那么再通过实体划分领域。这样一来我们包含的层级结构一下就出来了,具体我们以一个商城的案例分析一下
1、首先我们对需求进行深度分析,商城一般包含有订单实体、订单详情实体、营销活动实体、营销工具实体等等
2、接下来我们需要对所有实体按照职责相似度,对实体进行归类,每一类我们取一个新的名字,这就是领域。比如我们的订单实体和订单详情实体都是在交易的时候需要的,而营销活动和营销工具都是做推广的,那么我们分别为其取名为交易域和推广域。这也体现了我们之前所说的领域和实体一对多的关系
虽然只有两个步骤,但是具体的分析却是要慎之又慎,如果当碰到一个新的实体就划分为一个新的域,那么你会恐怖的发现自己的域会越来越多,这个时候对于未来的业务上又会出现越来越多的高耦合场景。所以对于抽象出域的标准和规范需要根据具体业务场景进行深度分析之后划分。切忌:以场景来划分领域,我们应该以业务对象聚合来划分领域
领域划分的原则就是按照实体的职责相似度来划分,领域之间的边界明显清晰。而这就是为了达到领域的高内聚低耦合。最大程度上做到相似的领域聚集在一起,无相似度的领域之间最好是隔离的、耦合度很低的,这样更加有利于业务的稳定和扩展。
4、回顾
以上讲解的就是我们DDD(领域驱动设计)中的领域和领域划分,具体我们划分了领域有什么作用,在DDD(领域驱动设计)中怎么去使用这种划分,我们在下一篇中再慢慢谈
DDD架构中的领域是什么?的更多相关文章
- 关于领域驱动设计(DDD)中聚合设计的一些思考
关于DDD的理论知识总结,可参考这篇文章. DDD社区官网上一篇关于聚合设计的几个原则的简单讨论: 文章地址:http://dddcommunity.org/library/vernon_2011/, ...
- 分享一个CQRS/ES架构中基于写文件的EventStore的设计思路
最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客 ...
- DDD~概念中的DDD(转)
概念中的DDD DDD: 领域驱动设计,它是对面向对象的的分析和设计(OOAD,Object Orient Analysis Design)的一个补充,对技术框架进行了分层规划,同时对每个类进行了策略 ...
- DDD(Domain Driver Designer) 领域驱动设计简介
领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity i ...
- ASP.NET Core Web API下事件驱动型架构的实现(四):CQRS架构中聚合与聚合根的实现
在前面两篇文章中,我详细介绍了基本事件系统的实现,包括事件派发和订阅.通过事件处理器执行上下文来解决对象生命周期问题,以及一个基于RabbitMQ的事件总线的实现.接下来对于事件驱动型架构的讨论,就需 ...
- MVC架构中的Repository模式 个人理解
关于MVC架构中的Repository模式 个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间.它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接 ...
- InfoQ 趋势报告:架构和设计领域技术演变详解
https://www.infoq.cn/article/R7lWXd0R4VFf3E0bB*38 本文概述了我们对当前“架构和设计”领域的看法,这个领域侧重于基础设施模式.技术框架模式的实现,以及软 ...
- NET Core Web API下事件驱动型架构CQRS架构中聚合与聚合根的实现
NET Core Web API下事件驱动型架构在前面两篇文章中,我详细介绍了基本事件系统的实现,包括事件派发和订阅.通过事件处理器执行上下文来解决对象生命周期问题,以及一个基于RabbitMQ的事件 ...
- ddd 架构设计——abp
一.为什么要分层 分层架构是所有架构的鼻祖,分层的作用就是隔离,不过,我们有时候有个误解,就是把层和程序集对应起来,就比如简单三层架构中,在你的解决方案中,一般会有三个程序集项目:XXUI.dll.X ...
- 单元测试布道二:在全新的 DDD 架构上进行单元测试
目录 回顾 dotnet 单元测试相关的工具和知识 可测试性 不确定性/未决行为 依赖于实现:不可 mock 复杂继承/高耦合代码:测试困难 实战:在全新的 DDD 架构上进行单元测试 需求-迭代1: ...
随机推荐
- JavaWeb-动力节点
目录 项目名 src |---- Servlet webapproot |------WEB-INF |------classes(存放字节码) |------lib(第三方jar包) |------ ...
- 批处理执行指定文件jar包并输出日志
jar包运行,每次都要手动执行命令.这么机械的操作当然要由脚本来完成. @echo off rem 按当天日期输出日志 set today=%date:~0,4%-%date:~5,2%-%date: ...
- Day14-封装、继承、多态
封装.继承.多态 一.封装 package Demo; //类 private私有 public class student { //属性私有 //名字 private String name; // ...
- web后端之表单传值
第一种 第二种 第三种陪置web.xml文件
- BubbleSort,冒泡排序,C++非递归和递归实现
1 // g++ bubble_sort.cc -Wall -O3 && ./a.exe 2 3 4 #include <iostream> 5 #include < ...
- 浏览器对象模型(BOM)中的History对象模型
- vue项目启动报错问题解决. Module build failed: Error: Node Sass does not yet support your current environment
导入vue项目后,启动报错,异常如下: 1 error in ./src/pages/home.vue 2 Module build failed: Error: Node Sass does not ...
- Scala操作Kakfa API
如需大数据开发整套视频(hadoop\hive\hbase\flume\sqoop\kafka\zookeeper\presto\spark):请联系QQ:1974983704 由于我使用的是kafk ...
- Docker部署Reids单机
一.Redis镜像拉取 docker pull redis 指定版本 docker pull redis:5.0.8 二.Redis单实例安装 1.创建容器挂在目录 (-p 递归创建目录,上级目录不存 ...
- C# 根据 RichTextBox 内容 动态 重设其大小 以达到 不会 显示滚动条
/// <summary> /// 根据内容重设大小以达到不会显示滚动条 /// 测试:正确 /// 时间:202106021957 /// </summary> public ...