DDD、Repository、Factory百家争鸣

2024-02-29 02:38

本文主要是介绍DDD、Repository、Factory百家争鸣,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Face Bug :學過Design Patterns的人應該對Factory不陌生,我們用它來簡化物件的複雜創建過程。Factory用於從無到有的建立過程,就好比一台Notebook,在生產線上一路組裝各種零件,最後成為一台可被銷售的商品,在這個案例裡,Notebook商品概念就是一個聚合,前面說過,只能透過Aggregate Root來存取整個聚合,因此Factory就是用來建立這個聚合。

你可以直接在Aggregate Root中增加一個Factory method,或是增加一個Factory類別,以我個人的習慣是使用單獨的Factory類別。


Face Bug :我比較偏愛將IRepository放在Domain Layer,實作的部份放在Infrastructure Layer,然後透過依賴注入(DI)的方式將實體注入到Domain Model中,但也有人就直接都放在Domain Layer,兩種方式都有優缺點,放在Domain Layer的壞處是與使用的ORM framework耦合性變高,以我個人來說,不喜歡看到這樣的狀況發生,但相對的必須付出一些效能成本,畢竟IOC的本質是透過Reflection。


Laurence:Domain 层是整个系统的核心层,该层维护一个使用面向对象技术实现的领域模型,几乎全部的业务逻辑会在该层实现。Domain层包含Entity(实体)、 ValueObject(值对象)、Domain Event(领域事件)和Repository(仓储)等多种重要的领域组件。


Laurence:作 为基础设施层,Infrastructure为Interfaces、Application和Domain三层提供支撑。所有与具体平台、框架相关的实 现会在Infrastructure中提供,避免三层特别是Domain层掺杂进这些实现,从而“污染”领域模型。Infrastructure中最常见 的一类设施是对象持久化的具体实现。

池建强:领域驱动设计除了对系统架构进行了分层描述,还对对象(Object)做了明确的职责和策略划分:

  1. 实体(Entities):具备唯一ID,能够被持久化,具备业务逻辑,对应现实世界业务对象。
  2. 值对象(Value objects):不具有唯一ID,由对象的属性描述,一般为内存中的临时对象,可以用来传递参数或对实体进行补充描述。
  3. 工厂(Factories):主要用来创建实体,目前架构实践中一般采用IOC容器来实现工厂的功能。
  4. 仓库(Repositories):用来管理实体的集合,封装持久化框架。
  5. 服务(Services):为上层建筑提供可操作的接口,负责对领域对象进行调度和封装,同时可以对外提供各种形式的服务。

  当然,DDD中还提出了聚合和聚合根(Aggregate Root)的概念,不过我们在实践过程发现聚合根有问题复杂化的倾向,用传统的聚合、组合等概念去描述领域对象之间的关系更容易理解,所以这里对这个概念就不做介绍了。





这篇关于DDD、Repository、Factory百家争鸣的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/757332

相关文章

Spring 注解(@Repository 、@Service 和 @Controller )

Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller 。         在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层 、业务层 和控制层 相对应。虽然目前这 3 个注释和 @

王立平--AES加密图片实现 SkImageDecoder::Factory return null

这个问题是在加密图片,存入sd卡,在解密出来展示,出现的。我个人研究了很久没解决。最后经过高人指点,终于解决了。 在此,拿出来分享,希望各位少走弯路。 我之前的设计思路是:(可以不看哦) 1.把图片从drawable读入成bitmap 2.bitmap-->byte 3.调用AES的byte加密算法。 4.加密成byte,在转化为string 5,把string存入sd卡。

《GOF设计模式》—抽象工厂(Abstract Factory)—Delphi源码示例:基于抽象工厂的迷宫

 示例:基于抽象工厂的迷宫   实现:     如果TMaze.Create是传递一个对象当作参数来建立rooms、walls及doors;如此你可以以不同的参数来改变rooms、walls及doors的类。  请注意MazeFactory也就是工厂方法(Factory Method)的一个集合;这是最通常实现抽象工厂模式的方式。同时请注意MazeFactory不是一个抽象类

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 24 in XML document from

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 24 in XML document from class path resource [bean1.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineN

LLaMA-Factory仓基础功能架构及NPU/GPU环境实战演练

LLaMA-Factory 基础篇 LLaMA-Factory简介 LLaMA-Factory是一个开源的大规模语言模型微调框架,设计用于简化大模型的训练过程。它提供了一个统一的平台,支持多种大模型的微调,包括LLaMA、BLOOM、Mistral等,旨在帮助用户快速适应和调整这些模型以适应特定的应用场景。LLaMA-Factory通过提供一套完整的工具和接口,使用户能够轻松地对预训练的

已经存在的项目如何变成git的一个repository

已经存在的项目如何被git管理 背景: 有一套代码很敏感,可能动不动就要不能正常工作(硬件开发常事),那改动一下下就要有个记录,就决定用git管理 已经有了服务里里docker里运行的gitbucket,已经有了开发用的电脑上的git客户端(Git-2.28.0-64-bit.exe) 很简单的方法: 开发用的电脑上安装git客户端 右键 选 create new resposito

DDD设计方法-3-仓储,封装持久化数据

前情提要:一共包含 如下六篇文章(篇幅精简,快速入门) 1、初识DDD 2、聚合、实体、值对象 3、仓储,封装持久化数据 4、端口和适配器 5、领域事件 6、领域服务,实现约定 DDD设计方法-3-仓储,封装持久化数据 前言1、概念 什么是仓储?2、优缺点 为什么要用?3、和mapper到底什么区别?有关系吗?4、实例: 这里吧mapper 和 Repository 都写出来做个比较更直

简单工厂模式(Abstract Factory)

一直想认认真真的学习一下设计模式,发现不开始行动起来一直找不到时间好好学习一下,索性通过博客的方式督促自己过一遍设计模式 所谓简单工厂模式,英文描述为Provides one level of interface higher than the factory pattern. It is used to return one of several factories.主要是利用

Azure Data Factory 多选选项集不受支持

在用ADF往外部推数据时,会碰到CRM的一种数据类型,多选下拉框,如下图中的                   如果我们把多选字段输入源字段中,会得到如下的提示                 查询官方文档,则有如下的说法      所以把值往外推就需要变通下,例如使用一个文本字段将多选的value值以文本的形式存下来,以这样的格式"1,2,3",可以利用power a