c# – DDD / DI(Unity)/ .NET /组合根 – 域服务

我有一个标准的Order / OrderLineItem设置.

白天生成的一些退款在白天持续存在,退款包括订单ID和1个或多个LineItemId.我需要在一天结束时将这些(在Windows服务中)合并到信用卡,礼品卡,奖励卡等中.

我一直在阅读Mark Seemann’s book并且可以看到使用Composition Root沙沙作响对象图的好处.

整合过程本身就是我需要做最多组合的地方.

我不明白的是这个整合逻辑应该在哪里结束?我可以假设无论合并逻辑在哪里结束,我仍然只在组合根中使用Unity之类的东西,那组合应该很早就发生了吗?

很高兴提供更多信息或酌情澄清!

解决方法

The consolidation process itself is where I need to do the most composition.

那么,您的意思是在系统中创建数据的过程是创建大多数域对象的位置吗?

这是有道理的,并且与大多数应用程序一致.

What I don’t understand is exactly where this consolidation logic should end up?

合并逻辑将由一个或多个服务组件提供,这些组件可能使用一个或多个repository组件和一个或多个unit of work组件.该服务将在组合根中组成,您最终创建的任何存储库/工作单元也将组成.

数据本身是完全动态的.您无法构建应用程序以静态地了解数据的布局,因此您无法在合成根中进行组合.你也不应该尝试.相反,您的代码可能使用ORM来定义或映射到域数据对象之间的关系模式.

然后,您可以使用存储库/工作单元从存储中检索数据.您还可以使用您的UI /服务来创建新数据 – 对于纯粹数据的域对象并不保证没有依赖关系.将新数据或修改后的数据保留到存储库/工作单元.

如果这让你感到畏缩,你总是可以使用从合成根注入的工厂模式来创建这些对象.但是,如果您将低级别域对象的结构设置为DTOs,那么这对您来说不会有太大的影响.

因此,您不必使用Unity来提供所有内容,并且您不必在组合根目录中创建系统中的所有对象.但是您应该尝试在组合根中组合系统的静态部分,甚至是静态可配置的系统动态部分.这很好地映射到像Unity这样的DI容器.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


c语言数组越界会怎么样
c语言指针怎么等于数组
c语言数组怎么存入文字
c语言中怎么显示数组
c语言数组元素怎么选
c语言数组怎么累加
c语言数组符号怎么输入
c语言怎么用长数组
c语言数组函数怎么输入
c语言数组怎么去掉差异
c语言怎么求解数组
c语言数组怎么用变量
c语言怎么申明数组
c语言怎么控制数组
c语言怎么计算数组长度
c语言数组怎么插星号
c语言数组怎么加长度
c语言中怎么输出数组
c语言怎么记住数组边界
c语言数组怎么输入符号