领域模型可以知道存储库吗?

2024-05-08

可能对于某些域逻辑实现实体需要访问存储库以更新/删除自身或任何相关实体。这听起来对吗?


不,不是,至少对于标有 的问题“领域驱动设计”标签。 当然,Active Record 模式有权在某些系统中生存,并且有些人发现强耦合很有用,但在 DDD 中,建议的方法是显式使用存储库:

埃文斯 DDD,第 152 页:对于需要全局访问的每种类型的对象,创建一个可以提供该类型所有对象的内存集合的幻觉的对象。 «...» 仅为实际需要直接访问的聚合根提供存储库。让客户专注于模型,委托所有对象存储和对存储库的访问。

因此,在 DDD 中,存储库不仅封装了访问数据库所需的基础设施代码,还封装了必须存储和加载对象的整个思想。

如果您正在执行一些涉及从数据库保存和加载的复合操作,那么services引用了存储库是最好的候选人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

领域模型可以知道存储库吗? 的相关文章

  • 用于办公管理应用程序无缝集成(和最终替换)的复杂(多模式)实体框架对象映射

    我是一个相当新手 狂热的程序员 这是我的第一个问题 但几个月来我一直在使用 stackoverflow 来获取有价值的信息 首先 一些背景 我目前在一家极小 我们目前运行一个相当过时 大约 2008 年 的医疗办公室管理系统 负责处理患者业
  • @Id 注解属性的 Kotlin 内联类

    在我的业务逻辑中 我必须处理很多实体 ID 所有这些 ID 都是类型String 这可能会导致混乱 尤其是当您将其中几个作为方法参数传递时 所以我考虑引入一点类型安全内联类 我知道 内联类在 v1 3 中仍然被标记为实验性的 然而 有没有人
  • ASP.NET MVC Web 应用程序中视图逻辑和域逻辑之间的混淆

    我对域 应用程序逻辑和用户界面逻辑感到困惑 为了说明我想要确定的内容 我将在下面描述一个虚构的程序以供说明 1 想象一个带有一组 3 个级联下拉菜单的小型应用程序 当您选择一个下拉列表时 它会触发 jQuery Ajax GET 最终到达
  • 强制聚合之间不变量的最佳方法?

    处理聚合之间一致性的最佳方法是什么 以 Vaughn Vernon 书中的示例为例 您有 BacklogItem 聚合和 SprintAggregate 当 BacklogItemEvent 引发时 事件处理程序会捕获它并尝试更新 Spri
  • CQRS - 如何对场景执行系统进行建模

    我最近开始为我即将启动的一个绿地项目研究 CQRS 和 DDD 我研究了 Udi Dahan Greg Young Mark Nijhof 等人的大量资料 这些确实非常有帮助 我想我对这些概念有了很好的理解 但是 我仍然有一些关于如何将这些
  • BL 服务:异常还是方法结果?

    最好的方法是什么 为什么 V1 try var service IoC Resolve
  • DDD建模,聚合根之间的交互

    Marked my aggregate roots with 1 2 3 Looks quite nice almost like grapes 我不喜欢的是一个标有红色箭头的实体 让我们想象一下 AR 1 是公司 AR 2 是办公室 AR
  • 导入数据和事件溯源

    我目前正在开发一个整体系统 我希望将其引入现代并结合 DDD 和 CQRS 我收到了重新编写解决方案的导入机制的请求 并认为这可能是开始此重新架构过程的好机会 目前流程是 用户上传 CSV 系统解析 CSV 并在屏幕上显示每一行 对每一行以
  • Javascript 域模型对象约定

    如果我必须在 C 中创建域模型对象 我可能会这样做 public class Person Public string Name get set Public string Gender get set Public int Age get
  • 在哪里检查用户电子邮件尚不存在?

    我有一个帐户对象 可以像这样创建用户 public class Account public ICollection
  • 使用 JPA 实体作为域模型是一个好习惯吗?

    或者创建一个由域模型组成的域层并与 JPA 实体对话以进行数据库访问 两种方法的优缺点是什么 谢谢 这确实取决于您对域进行编码的方式 一般来说 在 Java 中 我更喜欢创建一组单独的 JPA 注释的 DTO 来处理持久性 此类 DTO 将
  • 领域驱动设计:处理原子操作和事务

    必须保证每个聚合内部的一致性 在存储库中执行此操作很容易 因为我始终可以使用数据库或框架中的事务 我对存储库之外发生的事情表示怀疑 一项服务可能需要使用多个聚合来处理请求 在服务处理过程中或在保留聚合时可能会出现问题 如果服务处理过程中出现
  • 具有持久性无知对象的持久性和领域事件

    我一直在研究领域驱动设计领域事件 http www udidahan com 2009 06 14 domain events salvation 我真的很喜欢这些事件提供的关注点分离 我遇到了保留域对象和引发域事件的顺序问题 我想在域对象
  • CQRS - 读取端的事件重播

    我读过几篇关于 CQRS 的博客 它们都解释说 在写入端 事件会持久保存在事件存储中 并且根据请求 事件将被检索并聚合重播 我的问题是为什么读取端不需要聚合事件重播 因为您的读取端不使用聚合 读取端实现为投影 它根据聚合发出的事件流计算当前
  • 寻找领域事件的例子

    有谁知道在哪里可以找到域事件实现的示例代码 如乌迪 达汉 http www udidahan com in 领域事件 救赎 http www udidahan com 2009 06 14 domain events salvation 在
  • 领域驱动设计 (Linq to SQL) - 如何删除聚合的某些部分?

    我似乎对整个 DDD LinqToSql 业务感到有点困惑 我正在使用 POCOS 和 linq to sql 构建一个系统 并且我有聚合根的存储库 因此 例如 如果您有 Order gt OrderLine 类 那么您就有了 Order
  • 在下面的模型中,地址不应该是值对象吗?

    From 值对象如何存储在数据库中 https stackoverflow com questions 679005 how are value objects stored in the database 假设公司和个人都有相同的邮件地址
  • 是否可以在不改变作为框架一部分的 DDD 模型的情况下使用 NHibernate

    我挖掘了很多关于DDD方法 无处不在的语言 聚合 存储库等 我认为 与我读到的很多内容相反 实体应该有行为而不是不可知论 我看到的所有例子都倾向于呈现实体虚拟自动属性 and an 空构造函数 受保护或最糟糕的是公开 就是这样 我认为这种对
  • 对聚合根内实体的操作

    如果我设计了如下所示的 AR 您认为我应该如何更新订单行对象之一中的属性 例如 我如何更改订单行之一的标题 示例问题 这是订单聚合根 public class Order private readonly int id private re
  • 是一对一的关系不好的策略

    用户始终拥有一个钱包 一个钱包始终属于一位用户 由于我想分离与钱夹相关的属性 我创建了 Wallet 对象并能够跟踪钱交易 我创建了 public Wallet Entity

随机推荐