这个问题在贫血模型里是不存在的,反正domain model都是被扒光的数据容器,无论给主键赋值还是通过DTO存取都是Service的事情。在充血模型中,这些又该是谁的责任呢?
首先考虑ID,ID分两种:用户在client填写的(比如UserId)以及系统自动生成的(比如单号),后者一般在Repostory中提供诸如getNextOrderNo()等方法。由另一个coordinator的角色来完成Entity的装配。
Id id=orderRepo.getNextOrderNo();
Order order=new order(id);
这样的好处是将Entity从获取ID的责任中解放出来,给测试带来方便。
至于这个coordinator有三种情况,Factory/(Domain)Service/(Application) Service都可以完成。
再看Repository.store(),这也不是Entity自己的责任,让对象把自己装入Repository就像让人抓住自己的头发拔离地球一样可笑。那么Factory是不是适合作这件事呢?一开始我是这么作的,但后来觉得这样不是很适合:Factory的作用只是生产出一个完整对象交给它的调用者,并不需要关心这个对象下面往何处去。就像现实世界中, 生产车间产出产品,却不知道其会被送到仓库还是质检车间。产品的流向应该由更高层的对象关心,比如(Domain)Service/(Application) Service 中的CreateXXX方法。
这样看来,Factory不负责对象持久化,它更集中在逻辑上(保持不变量)。Factory是和Domain结合很精密的部分,而Domain Service 和Application Service(中的CreateXXX)从持久化的角度看并无区别,都要负责持久化操作:Domain Service只是把App Service中公用的东西提升到了Domain中,相当于一个Facade模式,和Domain结合不是那么紧密。
既然不紧密,那么一个CreateXXX是放在Domain Service还是App Service中,就是比较随意的选择了。随着重构的进行,会有相当一部分CreateXXX显现出从App Service 提升到Domain Service中的需要,这就是比较考验判断的时候了。
分享到:
相关推荐
Entity Framework Repository(含依赖注入)
asp.net 3.5+entity framework实体框架三层实体一.
一、在MVC中开发的时候,避免在Controllers中直接访问数据,为了构建更加适应未来变化以及更加易于测试的MVC应用程序,应使用Repository模式。当你使用Repository模式时,你会创建一个独立的repository类,它包含了...
CMS(MVC+ Entity FramWork + Repository)
EntityFramework.Repository 该项目实现了实体框架的存储库模式。 Nuget包: ://www.nuget.org/packages/EntityFramework.Repository如何使用请查看测试项目,以获取有关如何使用该库的实际可行实现。 以下是简短的...
简单三层Entity Framework Demo
三层架够EntityFramework应用于DAL层 + 抽象工厂模式
DDD领域驱动设计&中台实践资料合集,共20份。 DDD促进传统架构微服务转型 化繁为简--DDD驱动复杂业务软件架构的演进 基于FP的DDD实践 基于DDD的领域建模中的模版和工具实践 架构分层模型适配 金融支付系统的改造之...
Entity Framework 6 Recipes Entity Framework 6 Recipes
最新领域驱动设计(DDD)资料合集,共23份。 金融支付系统的改造之路 化繁为简--DDD驱动复杂业务软件架构的演进 基于DDD的领域建模中的模版和工具实践 基于FP的DDD实践 架构分层模型适配 可视化的遗留系统微服务...
ADO.NET Entity Framework 以 Entity Data Model (EDM) 为主,将数据逻辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有 Entity Client,Object Context 以及 LINQ 可以...
Every Entity as A Microservice - 领域驱动设计DDD 分享我对领域驱动设计(DDD)的学习成果 化繁为简--DDD驱动复杂业务软件架构的演进 基于DDD的领域建模中的模版和工具实践 基于FP的DDD实践分享 架构分层模型适配 ...
Entity Framework主从表使用
本案例是微软EntityFrameworkCore的一个仓储模式实现,这个仓储库不是我写的,而是使用了一个老外写的EntityFrameworkCore.Data.Repository。 IDE环境:VS2022 开发框架:ASP.NET Core6.0 WebApi ORM框架:Entity...
Entity Developer Entity Developer Entity Developer
DDD领域驱动设计&中台实践资料(20份): DDD促进传统架构微服务转型(42页).pdf DDD在旅游电商架构演进中的实践(47页).pdf DDD实践中的那些坑(28页).pdf DDD的为与不为(25页).pdf Every Entity as A ...
简单的EntityFramework4.3+三层+DTO,如果需要简化版的,我的资源里有一个不含DTO的版本。 这个Demo的主要功能是: 1、实体类的创建、复杂类型的嵌套 2、实体类的配置(主键、外键、一对一、1对多,多对多) 3、...
自留demo。springMVC-HttpEntity(ResponseEntity)与jQuery交互的小结demo。
本书是关于Entity framework code first 的详细介绍,在本书中,你可以学到从无到有的创建基于Entity framework code first的项目