第二部分第二篇关于第二部分剩余部分,包括Module,Aggregate,Factory,Repository.
Module作为一种粗粒度的建模和设计元素,在Module内部应该是高内聚的,Module之间应该是低耦合的。系统的领域模型通常可以分为几个Module,比如电子商务的领域就可以大致分为商品,订单,促销,支付,库存等Module。
Aggregate通过定义清晰的所属关系和边界,并避免混乱,错综复杂的对象关系网来实现模型的内聚。Aggregate就是一组相关对象的集合,作为数据修改的单元。每一个Aggregate具有一个Aggregate root和boundary。Aggregate root作为一个特定的Entity,root是唯一允许外界对象保持对它的引用的元素。boundary内部的对象和互相引用。在Aggregate内部除root以外的entity都具有本地标识,本地标识只在内部加以区分。因为外部对象看不到除root以为的对象。root可以将Aggregate内部的对象引用传递给其他对象,其他对象只能暂时的引用。对于boundary内部的Value Object,根可以创建一个副本传递给外界对象,就可以不管了。Aggregate内部只有root能通过数据库直接访问,其他对象只能通过遍历方式得到。
Factory在领域模型中,作为装配Entity,Value Object的对象存在,它承担创建这些对象和聚合的职责,创建Aggregate时作为一个整体,并满足这个Aggregate的固定规则。在使用Factory模式时有几种选择,对于复杂对象的装配可以在合适的位置创建Factory Method,某个Aggregate的root上或者一个Aggregate与另一个Aggregate的交界处如下图所示。
在找不到合适的位置放置factory method时,就需要单独创建一个Factory类。对于一些简单不涉及到其他对象的创建和多态性的使用构造函数无疑要简化许多。在设计到Aggregate的创建时,就不能使用构造函数。
大部分对象都不能通过全局查询来访问,不受限制的数据库查询实际上会破坏领域对象和Aggregate的封装。通过将实际的存储和查询封装至Repository对象中,隐藏实现细节。只为需要直接访问Aggregate root的Entity提供Repository,让客户始终聚焦于模型。
Repository的优点:
<!--[if !supportLists]-->1. <!--[endif]-->应用程序和领域设计与持久化技术解耦;
实现一个Repository的基本特性如下图所示:
Repository和Factory的关系:
Factory是将创建一个复杂对象的复杂过程封装起来,用于创建新对象。而Repository是在内存中或者数据库中查找已有对象(可以使用ORM,Query Object等模式)。
相关推荐
第二章重点讲述了嵌入式Linux C语言开发工具的使用。预处理是C语言编译过程的第一步,通过`#ifndef`、`#define`和`#endif`等宏来避免头文件重复包含。预处理选项`-E`可以仅执行预处理步骤,不进行编译。GCC是Linux下...
- **《嵌入式设计及Linux驱动开发指南——基于ARM9处理器》读书笔记** - 专门讲解了基于ARM9处理器的嵌入式系统设计和驱动开发。 ##### 2. 第二季:应用技巧 - **用批处理实现垃圾文件清除\自动关机\清除copy病毒*...
### 《麦肯锡方法》读书笔记核心知识点详解 #### 一、麦肯锡思考企业问题的方法 **1.1 以事实为基础** - **重要性**:麦肯锡解决问题的第一步是确保所有决策和分析均以充分的事实为依据。 - **实施步骤**: - **...
本文将基于《ORANGE’S:一个操作系统的实现》这本书的第二十二章内容,深入探讨输入输出系统的设计与实现,特别是第四部分涉及的代码实践。书中通过实例展示了如何构建一个简单的I/O系统,帮助读者理解操作系统与...
#### 第二章 STM32片内设备具体功能 - **内部RAM与Flash**:STM32提供了大容量的内部RAM和Flash存储空间,满足程序运行和数据存储需求。 - **时钟管理单元**:包括了多个时钟源的选择和配置机制,如HSI、HSE、LSI、...
图灵机模型后来发展成了冯·诺依曼体系结构,这是所有现代计算机的核心设计,包括运算器、控制器、存储器、输入设备和输出设备,它的二进制逻辑和程序控制原则至今仍被广泛采用。 冯·诺依曼体系结构的提出,不仅极...
在第二版中,你将会看到,你已经可以通过交叉编译的方式为我们的实验性 OS编写应用程序了,也就是说,它已经具备操作系统的基本功能,虽然仍然极其简陋,但第一个圈,毕竟是已经圆起来了。第三,实践类的操作系统...
在第二版中,你将会看到,你已经可以通过交叉编译的方式为我们的实验性 OS编写应用程序了,也就是说,它已经具备操作系统的基本功能,虽然仍然极其简陋,但第一个圈,毕竟是已经圆起来了。第三,实践类的操作系统...