【发布时间】:2020-12-23 09:22:14
【问题描述】:
对不起我的英语,我正在编写一个房地产评估模块,并决定尝试使用 DDD 范式编写。 我查看了示例和不同的文章,并为自己形成了以下图片(简化):
-
ApplicationCore.Domain- 业务逻辑的核心,包含所有必要的对象,分为两种类型Entitys- 如果实体需要存储在数据库中,并且它是现成的完整业务逻辑对象.ValueObjects- 封装行为的所有其他属性,通过字段的值进行比较,并且是实体的一部分 仅创建有效对象非常重要,因此我通过带有验证器的工厂创建所有内容,并且构造函数是私有的。 不应引用其他依赖项,尽可能隔离。 -
ApplicationCore.App-ApplicationCore.Domain上方的层,包含指向它的链接。 使用来自ApplicationCore.Domain的对象并通过Port/Adapter 使用外部服务。Port- 例如,存储库的抽象,通过Infrastructure层上的Adapter实现。
ApplicationCore 的交互逻辑在 AppServices 中 - 用于经典实现或在命令/请求中 - 用于 CQRS -
Infrastructure- 包含指向ApplicationCore.Domain和ApplicationCore.App的链接。 实现ApplicationCore.App层的端口
实体之间相互独立,通过按键相互引用进行交互。 我在这个范式中保留了评估系统的基本逻辑。 但是这里有必要添加一个服务,该服务在窃听模式下接收来自不同来源的附加评估信息。 那些。在监听 TcpIp 套接字的背景下工作
服务设置存储在数据库中并经常更改 - 即您需要引入新的Entity
形成一条链
DataProvider (ApplicationCore.Domain) -> IDataProviderRepository (ApplicationCore.App) -> EfDataProviderRepository (Infrastructure).
DataProvider - 必须依赖于ITcpIpTransport,没有它它只是TcpIpTransport 的一组设置。
从逻辑上讲,DataProvider 是用于接收数据的服务,但它的设置和状态存储在数据库中,即您需要将其设为Entity。
如果你让DataProvider 依赖于Infrastructure 层,那么ApplicationCore.Domain 也会有外部服务的端口,这样可以吗?
如何最好地实现它。
【问题讨论】: