Selaa lähdekoodia

DDD微服务文档

master
unknown 4 vuotta sitten
vanhempi
commit
7337405015
1 muutettua tiedostoa jossa 50 lisäystä ja 0 poistoa
  1. 50
    0
      实践/后端/项目/imgs/26.DDD微服务.md

+ 50
- 0
实践/后端/项目/imgs/26.DDD微服务.md Näytä tiedosto

@@ -0,0 +1,50 @@
1
+> DDD分层架构视图
2
+
3
+- DDD分层架构包括:展现层、应用层、领域层和基础层
4
+  - 展现层(Interface):用户界面 Web服务 其他 =(数据传输)=》应用层
5
+  - 应用层(Application):应用层服务
6
+  - 领域层(Domain):实体、值对象 领域层服务
7
+  - 基础实施层(Infrastructure):数据库、总线、API网关、缓存
8
+
9
+> DDD分层架构各层智能
10
+  
11
+- 展现层: 负责向用户显示信息和解释用户指令
12
+- 应用层:主要面向用户用例操作,协调和指挥领域对象来完成业务逻辑。
13
+    - 应用层也是与其他系统的应用层进行交互的必要渠道。应用服务尽量简单,它不包含业务规则或知识,只为下一层的领域对象协调任务,使它们互相协作。
14
+    - 应用层还可进行安全认证、权限校验、分布式和持久化事务控制或向外部应用发送基于事件的消息等
15
+ - 领域层
16
+    - 领域层是软件的核心所在,它实现全部业务逻辑并且通过各种校验手段保证业务正确性。它包含业务所涉及的领域对象(实体、值对象)、领域服务以及它们之间的关系。它负责表达业务概念、业务状态以及业务规则,具体表现形式就是领域模型
17
+- 基础层
18
+    - 基础层为各层提供通用的技术能力,包括:为应用层传递消息、提供 API 管理,为领域层提供数据库持久化机制等。它还能通过技术框架来支持各层之间的交互。
19
+    
20
+
21
+
22
+> 服务视图
23
+- 接口服务
24
+   - 接口服务位于用户接口层,用于处理用户发送的 Restful 请求和解析用户输入的配置文件等,并将信息传递给应用层。
25
+
26
+- 应用服务
27
+   - 应用服务位于应用层。用来表述应用和用户行为,负责服务的组合、编排和转发,负责处理业务用例的执行顺序以及结果的拼装。 应用层的服务包括应用服务和领域事件相关服务。 
28
+   - 应用服务可对微服务内的领域服务以及微服务外的应用服务进行组合和编排,或者对基础层如文件、缓存等数据直接操作形成应用服务,对外提供粗粒度的服务。 领域事件服务包括两类:领域事件的发布和订阅。通过事件总线和消息队列实现异步数据传输,实现微服务之间的解耦。
29
+
30
+- 领域服务
31
+   - 领域服务位于领域层,为完成领域中跨实体或值对象的操作转换而封装的服务,领域服务以与实体和值对象相同的方式参与实施过程。
32
+   - 领域服务对同一个实体的一个或多个方法进行组合和封装,或对多个不同实体的操作进行组合或编排,对外暴露成领域服务。
33
+   - 领域服务封装了核心的业务逻辑。实体自身的行为在实体类内部实现,向上封装成领域服务暴露。 为隐藏领域层的业务逻辑实现,所有领域方法和服务等均须通过领域服务对外暴露。 为实现微服务内聚合之间的解耦,原则上禁止跨聚合的领域服务调用和跨聚合的数据相互关联。
34
+
35
+- 基础服务
36
+   - 基础服务位于基础层。为各层提供资源服务(如数据库、缓存等),实现各层的解耦,降低外部资源变化对业务逻辑的影响。 
37
+   - 基础服务主要为仓储服务,通过依赖反转的方式为各层提供基础资源服务,领域服务和应用服务调用仓储服务接口,利用仓储实现持久化数据对象或直接访问基础资源。
38
+
39
+
40
+> DDD名词和术语
41
+
42
+- Event Storming(事件风暴):事件风暴是一项团队活动,旨在通过领域事件识别出聚合根,进而划分微服务的限界上下文。在活动中,团队先通过头脑风暴的形式罗列出领域中所有的领域事件,整合之后形成最终的领域事件集合,然后对于每一个事件,标注出导致该事件的命令(Command),再然后为每个事件标注出命令发起方的角色,命令可以是用户发起,也可以是第三方系统调用或者是定时器触发等。最后对事件进行分类整理出聚合根以及限界上下文。
43
+- Entity(实体):每个实体是唯一的,并且可以相当长的一段时间内持续地变化。我们可以对实体做多次修改,故一个实体对象可能和它先前的状态大不相同。但是,由于它们拥有相同的身份标识,他们依然是同一个实体。例如一件商品在电商商品上下文中是一个实体,通过商品中台唯一的商品 id 来标示这个实体。
44
+- ValueObject(值对象):值对象用于度量和描述事物,当你只关心某个对象的属性时,该对象便可作为一个值对象。实体与值对象的区别在于唯一的身份标识和可变性。当一个对象用于描述一个事物,但是又没有唯一标示,那么它就是一个值对象。例如商品中的商品类别,类别就没有一个唯一标识,通过图书、服装等这些值就能明确表示这个商品类别。
45
+- Aggregate(聚合):聚合是实体的升级,是由一组与生俱来就密切相关实体和值对象组合而成的,整个组合的最上层实体就是聚合。
46
+- Bounded Context(限界上下文):用来封装通用语言和领域对象,为领域提供上下文语境,保证在领域之内的一些术语、业务相关对象等(通用语言)有一个确切的含义,没有二义性。使团队所有成员能够明确地知道什么必须保持一致,什么必须独立开发。
47
+
48
+
49
+- 代码示例链接 https://github.com/marcinstelmach/Ecommerce.Api.git
50
+  - 是关于电子商务的API。可用于许多在线商店。

Loading…
Peruuta
Tallenna