`
iamlotus
  • 浏览: 108096 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

DDD思考之三 谁负责把Entity放入Repository?

 
阅读更多

这个问题在贫血模型里是不存在的,反正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中的需要,这就是比较考验判断的时候了。

 

 

 

 

0
0
分享到:
评论

相关推荐

    Entity Framework Repository(含依赖注入)

    Entity Framework Repository(含依赖注入)

    entity framework 三层实例

    在本实例中,我们将探讨如何在ASP.NET 3.5环境中利用Entity Framework实现一个三层架构的应用。 在三层架构中,通常包括表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data ...

    简单三层架构(EntityFramework实现)

    三层架构是一种常见的软件设计模式,它将应用程序分为三个主要部分:表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种架构有助于提高代码的可维护性、可扩展性和模块化。在本项目中,我们将使用Entity ...

    DDD分层架构参考代码目录结构

    《DDD分层架构及其在微服务中的应用》 DDD(Domain-Driven Design,领域驱动设计)是一种软件开发方法,强调以业务领域为中心进行系统设计。其分层架构模型是DDD的核心设计模式,它将系统分为用户接口层、应用层、...

    MVC中使用Repository模式vs2013

    一、在MVC中开发的时候,避免在Controllers中直接访问数据,为了构建更加适应未来变化以及更加易于测试的MVC应用程序,应使用Repository模式。当你使用Repository模式时,你会创建一个独立的repository类,它包含了...

    三层架够EntityFramework应用于DAL层 + 抽象工厂模式

    三层架构是一种常见的软件设计模式,通常包括表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。在这个场景中,我们看到"EntityFramework应用于DAL层",这意味...

    springMVC-HttpEntity(ResponseEntity)demo

    在Spring MVC框架中,HttpEntity和ResponseEntity是两个非常重要的概念,它们主要用于处理HTTP请求和响应。本项目“springMVC-HttpEntity(ResponseEntity)demo”是一个实战演示,展示了如何在Spring MVC应用中使用...

    10.1-Repository

    在.NET Core开发中,Repository模式是一种常见的设计模式,它为应用程序提供了一种抽象的数据访问层。这个"10.1-Repository"项目很可能是为了演示或教学如何在.NET Core环境中实现这种模式。让我们深入探讨一下...

    System.Data.Entity

    Entity Framework的核心概念之一是实体数据模型(Entity Data Model, EDM)。EDM是一种抽象的数据表示,它将数据库模式转化为对象模型。在System.Data.Entity中,实体类(Entity Class)代表数据库表,属性...

    简单三层Entity Framework Demo

    在这个"简单三层Entity Framework Demo"中,我们将探讨如何构建一个基于EF的三层架构应用,包括表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。 首先,我们...

    EntityFramework.Repository:实体框架的存储库模式

    EntityFramework.Repository 该项目实现了实体框架的存储库模式。 Nuget包: ://www.nuget.org/packages/EntityFramework.Repository如何使用请查看测试项目,以获取有关如何使用该库的实际可行实现。 以下是简短的...

    单纯的DDD代码

    7. **仓储(Repository)**:提供类似于集合的接口,负责领域对象的持久化操作,隔离领域层与数据访问层。 8. **领域服务(Domain Service)**:当业务逻辑无法通过实体和值对象的交互完成时,可以引入领域服务来...

    entity framework 教程下载

    三、Entity Framework的主要组件 1. **DbContext**:这是EF的主要入口点,包含对数据库的连接,以及一组DbSet属性,每个都对应一个数据库表。 2. **DbSet**:表示数据库中的表,可以进行添加、删除、更新和查询操作...

    CMS(MVC+ Entity FramWork)

    **CMS系统基于MVC与Entity Framework的实现** MVC(Model-View-Controller)是一种广泛应用于Web开发的设计模式,它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。在MVC模式下...

    EntityFramework.SqlServer_EntityFramework_

    Entity Framework (EF) 是微软提供的一款强大的对象关系映射(ORM)框架,它允许开发者使用.NET语言(如C#或VB.NET)来操作数据库,而无需编写大量的SQL语句。在.NET开发中,EF极大地提高了开发效率,因为它将数据...

    Programming Entity Framework DbContext

    DbContext类是Entity Framework中的核心类,它代表了一个会话,这个会话负责与数据库交互,管理实体对象的生命周期。在Code First开发模式中,通常会首先定义好POCO(Plain Old CLR Objects,普通的老式CLR对象)类...

    EntityFramework实例

    Repository接口封装了对特定领域对象的数据库操作,而Unit of Work负责协调多个Repository的事务。 8. **异步操作**:EF支持异步API,可以在不影响用户体验的情况下处理长时间运行的数据库操作。在示例中,可能会...

    EntityFramework4.1安装包

    Entity Framework 4.1 是微软开发的一个对象关系映射(ORM)框架,它允许开发者使用.NET语言(如C#或VB.NET)直接操作数据库,而无需编写大量的SQL语句。这个安装包是针对Visual Studio 2010设计的,为开发者提供了...

    DDD单纯数据层的提取

    在软件开发领域,领域驱动设计(Domain-Driven Design,简称DDD)是一种强调以业务领域为中心的设计方法论。本文将深入探讨如何从一个项目中提取出单纯的DDD数据层,并阐述其重要性和实施步骤。 首先,我们需要理解...

Global site tag (gtag.js) - Google Analytics