领域驱动设计模式 - 从领域访问存储库

2024-03-10

我一直致力于将领域驱动设计模式应用到我们的 Web 应用程序中。我们遇到的问题之一是避免使用实体内的存储库。

例如,我们有一些实体,其方法将触发电子邮件。因此,我们必须有权访问电子邮件模板(存储在数据库中),并在数据库队列表中创建新的电子邮件记录。目前,我们通过访问这些实例中的存储库来违反该模式。

在这些情况下我们应该使用“服务”层还是“应用程序”层(我们有很多)?有没有更好的方法来解决这个问题?


是的,我建议创建一项服务来执行电子邮件的发送。您可以在与域模型相同的项目中创建与服务交互的接口,但在单独的项目中提供服务的实现,以便模型与服务之间不存在硬依赖关系。依赖关系是相反的——从服务到模型。这还为实现单元测试创​​建了更好的设置,以确保您的服务在应该的情况下被调用,因为您现在可以在单元测试中模拟服务。

剩下要做的一件事是确保在创建这些对象类型之一时注入您的服务。因此,您将把对象创建推迟到存储库。或者更好的是,使用依赖项注入框架来为您解决依赖项。

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

领域驱动设计模式 - 从领域访问存储库 的相关文章

  • 工厂模式和策略模式

    我需要创建一个类来负责结果集处理 但可能会发生应该使用不同的算法来处理该结果集的情况 我知道以下选项 1 使用策略模式 伪代码如下 interface Strategy processResultSet ResultSet rs class
  • 策略模式还是命令模式?

    假设我有一个金融交易列表 我需要针对这些交易执行一系列验证规则 一个例子是我有一笔购买产品的交易 但是首先我需要验证交易中的帐户是否有足够的可用资金 产品没有售完等 由于这些规则 交易将是标记为拒绝 并应指定错误代码 当然 我正在考虑用一个
  • 静态库中的单例类

    假设我在静态库中有一个单例类 S 它可以与其他动态库 D1 D2 D3 链接 因此 据我了解 类 S 在每个 D1 D2 和 D3 中都会有一个单独的实例 即使它不是单例 如全局 这也是正确的 有什么办法可以防止S类的多副本吗 我无法将单例
  • IoC 服务的抽象类还是接口?

    我目前正在使用 IoC 在项目中提供存储库的具体实现 我读过的所有示例都使用接口作为服务的定义 但是 在阅读了 Microsoft 的建议后 建议更喜欢抽象类而不是接口 http msdn microsoft com en us libra
  • 如何使用 Spring Crud/Jpa Repository 实现 DDD

    我想通过使用 Spring 实现 DDD 来创建一个应用程序 假设我有一个业务实体 Customer 和一个接口 CustomerRepository 由于春天提供了CrudRepository and JpaRepository默认情况下
  • 将 F# 类型保存到数据库

    A lot http gorodinski com blog 2013 02 17 domain driven design with fsharp and eventstore f 文章数推荐 http fsharpforfunandpr
  • MonoState、Singleton 或派生形式:CRUD 应用程序的最佳方法?

    我有一个相当大的 CRUD WinForm 应用程序 其中有许多对象 人员 注册 计划 案例注释等 该应用程序由 30 多种表单组成 UI 逻辑上被分解 会员 注册 计划 案例说明等 我正在尝试弄清楚如何创建我的人物对象搜索后搜索表格并将对
  • Java 枚举相对于旧的“类型安全枚举”模式的优势?

    在 JDK1 5 之前的 Java 中 Typesafe Enum 模式是实现只能采用有限数量值的类型的常用方法 public class Suit private final String name public static final
  • 构建器模式的真实示例

    我想看看 Builder 模式是如何在现实世界的应用程序 API 中使用的 我找到的例子都是披萨 蛋糕 汽车等等 加上 GoF 书中的解析器示例 您能否告诉我这个模式在现实世界的应用程序 API 中的一些用法 最好是来自 C NET 或 P
  • 是检测异常并抛出它们还是让运行时抛出它们更好?

    假设有这样的设置 public class MyClass public void DoSomething string Data if String IsNullOrWhiteSpace Data throw new NullRefere
  • 如何将 sqldatareader 转换为 dto 列表?

    我刚刚开始将所有 ado net 代码从 asp net 页面移动到存储库 并为每个表创建 dto 手动 但现在我不知道将 sqldatareader 转换为我的列表的有效方法是什么dto 对象 例如 我的 dto 是 Customer 我
  • 当需要不同数量和类型的参数时如何创建操作委托列表

    我们有一组大约两打的类 它们继承自具有抽象 Validate 方法的基类 当然 每个类都有不同的验证需求 但它们之间的不同组合需要规则 因此 正如您可以想象的那样 这导致了大量代码重复 例如 A 类需要规则 1 3 6 和 9B 类需要规则
  • Ruby 中实现的所有设计模式的备忘单?

    我想知道是否有针对 Ruby 中实现的所有设计模式的备忘单 这样您就不必重新发明轮子 设计模式对于组织大量代码非常有用 因为您不需要像在 verbose algol derivitive language 中那样编写那么多代码来在 ruby
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • PHP:我是否将事件驱动编程与信号感知接口(信号和槽/观察者模式)混淆了?

    我看到很多人说 Symfony2 Zend Framework 2 等都是事件驱动的 在桌面世界中 通过事件驱动编程 我了解到应用程序每当其状态发生变化时都会通知其观察者 由于 PHP 应用程序是无状态的 因此无法执行此类操作 IE 让观察
  • 领域驱动设计和工厂类的作用

    我不清楚工厂类的角色和职责是什么 我知道工厂类应该负责创建域对象 聚合根 及其关联的实体和值对象 但我不清楚 DDD 架构的工厂 层 在哪里 工厂应该直接调用存储库来获取其数据还是服务库 工厂在以下框架中的位置 UI gt 应用程序 gt
  • [GoF]-ConcreteSubject 可以覆盖通知方法吗?

    我正在模拟一种情况 其中存在 通知框 观察者 list1 list2 list3 这个科目 现在我会制作一张图表 其中使用观察者模式描述每个列表实现不同类型的notify 这一事实 例如 列表状态的某些变化只需要按照某些标准通知给某些观察者
  • 这个单例能够抵抗序列化和反射攻击吗?

    以下代码是否能够抵抗序列化和反射攻击 public class Example private static Example instance new Example private Example public static Exampl
  • NHibernate IQueryable 集合作为 root 的属性

    我有一个根对象 它有一个集合属性 例如 I have a Shelf object that has Books Now public class Shelf public ICollection
  • DDD(领域驱动设计),如何处理实体状态变化,封装需要处理大量数据的业务规则

    public class Person public IList

随机推荐

  • 除非定义 aws-s3 gem? @@{:instance_writer=>true}

    我正在尝试整合aws s3 https github com marcel aws s3gem 使用最新版本的 Rails 4 1 0 启动服务器时我收到此错误 aws s3 0 6 3 lib aws s3 extensions rb 2
  • 获得苹果批准后我们可以拒绝应用程序吗?

    我已经上传了新的二进制文件作为我的应用程序的新版本 在上传二进制文件时 我选择 我将发布此版本 选项 意味着我只是将其放入 保留以供开发人员发布 假设我的应用程序获得了 Apple 的批准 并且我不想发布该版本 那么我必须做什么 是否可以拒
  • Yii:将 JavaScript 添加到标头

    I need
  • 在Prolog中,可以按随机顺序选择解决方案吗?

    如果我有以下情况 a X X 1 X 2 X 3 X 4 我可以按确定性顺序生成解决方案 a X X 1 X 2 X 3 X 4 是否有任何方法可以要求系统以非确定性 随机顺序产生解决方案 例如 a X X 4 X 1 X 3 X 2 我知
  • 如何从控制台应用程序打开WPF窗口[重复]

    这个问题在这里已经有答案了 我刚刚制作了一个简单的控制台应用程序 现在我想打开 WPF 窗口 我将 WPF 项目添加到我的应用程序中 P 但我不知道如何从我的 Main 打开这个窗口 我希望 some1 可以帮助我 Application
  • 如何从 Perl 中的外部命令中丢弃 STDERR?

    我想捕获外部命令的退出代码 同时用自定义错误消息替换其标准错误输出 my ret system which mysql if ret 0 say Error If mysql可执行文件不存在 它显示which命令错误消息 这是我不想要的 如
  • 值对象应该保存对实体的引用吗?

    值对象是否应该引用 DDD 方法中的实体 EDIT Dmitry 这大概就是我的情况 这里我附上类图 其中Account保留对集合的引用IInvoiceable项目 我治疗与Tenant作为实体 但它只拥有 1 个帐户 我不认为Accoun
  • 如何在不手动运行 dbt deps 的情况下配置 DBT 依赖项?

    我是 DBT 新手 目前正在尝试构建一个 Docker 容器 我可以在其中直接运行 DBT 命令 我有一个导出环境变量的文件 envs sh 看起来像 export DB HOST secret export DB PWD evenabig
  • 黄瓜、水豚和硒 - 提交不带按钮的表单

    我使用 Cucumber capybara 和 selenium 驱动程序进行了测试 该测试应填写表格并提交 正常的文本是 Scenario Fill form Given I am on the Form page When I fill
  • 为什么 ASP.NET MVC 控制器类需要公开?

    当我更改控制器类的访问修饰符时 会导致错误 如果我将操作方法 的可访问性设置为非公开 那么它也会导致错误 特别是找不到网页错误 为什么会这样呢 默认情况下 如果您没有为类指定任何访问修饰符 那么它将默认为internal在 C 中 只有同一
  • ( ... ) 和 { ... } 如何与 bash 中的管道创建子 shell 交互?

    我试图了解使用圆括号和大括号的 shell 子进程调用之间的区别 我认为大括号不会启动子进程 但它们似乎确实启动了子进程 bin sh a 1 b 1 a 2 a 3 b 2 b 3 echo a a echo b b 该脚本打印 a 1
  • 在任意时区之间转换

    我正在尝试找到一种简单而强大的方法来在任意时区之间转换时间 This http www cpearson com excel TimeZoneAndDaylightTime aspx http www cpearson com excel
  • 有没有一种方法可以在没有用户的情况下访问 LinkedIn API

    我正在构建一个使用 REST API 从 LinkedIn 获取数据的应用程序 当我的用户拥有 LinkedIn 帐户时 我使用 OAuth 代表用户进行身份验证和访问数据 我的问题是当用户没有 LinkedIn 帐户时 在这种情况下 我想
  • C# 和 Word - 用格式替换

    我试图做的最简单的形式是在预先存在的 Word 文档上填写一些信息 我的代码做得很好 它没有做的是按照需要修复格式 替换的文本需要设为黑色并加粗 表格上的总计字段需要右对齐 如果有人能指出我如何在我的代码中做到这一点 我将不胜感激 这是我当
  • UIScrollView 可滚动内容大小不明确

    各位开发者 我在 Interface Builder Xcode 5 iOS 7 中使用 AutoLayout 时遇到问题 这是非常基本和重要的 所以我认为每个人都应该知道它是如何正常工作的 如果这是 Xcode 中的一个错误 那么它是一个
  • TitleView 未覆盖整个工具栏

    我正在开发通知计数Toolbar using TitleView 里面TitleView我用过RelativeLayout这是从顶部裁剪未显示完整计数圆Label 这是我的代码
  • Playstore 展示 Beta 标签床边制作应用

    前几天 我推广了我的测试版 open beta test 应用于生产 一切顺利 我可以在 Playstore 中搜索我的应用程序 但有一个问题 playstore没有删除 beta 我的应用程序名称旁边的标签 我想删除那个标签 我该怎么做或
  • ASP.NET MVC 单点登录和角色

    我使用类似于以下方法的内容跨 2 个 MVC 站点 称为 SiteA 和 SiteB 进行基本的单点登录 http forums asp net p 1023838 2614630 aspx http forums asp net p 10
  • Firefox 单选按钮怪异

    我有一个包含很多无线电组的表格 每个无线电都有一个唯一的 ID 并且与其组中的其他无线电具有相同的名称 该页面验证为 XHTML 过渡页面 在 IE6 和 7 Opera Safari 和 Chrome 中进行了测试 它的工作方式与您想象的
  • 领域驱动设计模式 - 从领域访问存储库

    我一直致力于将领域驱动设计模式应用到我们的 Web 应用程序中 我们遇到的问题之一是避免使用实体内的存储库 例如 我们有一些实体 其方法将触发电子邮件 因此 我们必须有权访问电子邮件模板 存储在数据库中 并在数据库队列表中创建新的电子邮件记