Domain driven design 学习和查看行为驱动开发(BDD)示例的最佳资源

我正在尝试创建Cucumber/Gerkin BDD特性和场景描述,并且正在寻找领域特定语言的示例。特别是,示例和建议,以确保我可以覆盖拐角条件,清晰的示例,以便我们遵循最佳实践和方法,确保开发人员和BA在根据一组学习材料培养新人时,能够将最有意义且易于理解的规范放在一起(例如书籍或网站) 谢谢。我可以开始吃黄瓜了。我可以开始吃黄瓜了

Domain driven design 有没有处理实体列表的好模式

在DDD中,处理不同版本的实体的最佳模式是什么,例如列表中的实体与完整对象。我希望避免在列表中显示实体时获取不需要的属性的开销 您会在列表中使用单独的实体类型,还是只是部分填充完整的实体类型? 您会使用继承吗?我理解您在域中创建模型视图的冲动,但建议不要这样做。就个人而言,我使用域内的整个实体,而不管情况如何。实体就是实体,任何更少或更多的东西都感觉不干净。但这并不意味着我不能使用对实体的引用来帮助集中使用列表中的项目 在我的实现中,实体不跨越域边界。相反,我返回一种类型的DTO,并拥有可以从中

Domain driven design 在DDD中放置业务逻辑的位置

我试图找出构建易于维护和测试的体系结构的最佳方法。在经历了几个项目之后,我看到了一些非常糟糕的体系结构,我希望在我自己的项目中避免将来犯错误 假设我正在构建一个相当复杂的三层应用程序,我想使用DDD。我的问题是,我应该把我的业务逻辑放在哪里?有人说它应该放在服务(服务层)中,这是有道理的。拥有一系列坚持单一责任原则的服务是有意义的 然而,有人说这是一种反模式,业务逻辑不应该在服务层实现。为什么会这样 假设我们有IAuthenticationService,它有一个带有boolusernameav

Domain driven design 同步是一个域问题还是应该在数据访问层?

我正在开发一个向用户显示当前工单列表的应用程序。此列表是“实时”的,因为它应该在幕后进行更改时自动更新 我现在需要实现同步逻辑以保持列表中的数据同步。我正在抽象出驱动同步的实际机制(例如轮询、事件驱动等),因此我们可以根据需要更改方法,但我无法确定此逻辑属于域层还是数据层 所述的数据同步是否应“隐藏”在数据层中,还是属于域问题并属于该层?在我个人经验中,不是域层。因为它与ui界面高度耦合。如果工单列表不需要是“活动”的,您还需要这种机制吗?域模型应该相对稳定(除非域发生变化),不受ui和应用程序

Domain driven design 在CQRS+中存储和更新读取模型;ES系统

背景 我有一个使用CQRS+ES的系统,在这个系统中有一些聚合,例如博客文章或问题,它们被持久化在事件存储中,并将事件发送到查询端,以通过投影持久化读取模型 对于正在创建的问题或帖子,这是一个相当直截了当的过程 客户端创建命令以创建新问题 命令处理程序创建新的问题聚合并将更改保存在事件存储中 当聚合应用更改时,它会触发IssueCreatedEvent或类似命令 读取端的投影将监听此消息,并创建问题模型和它想要的任何其他非规范化数据(例如用于查询所有问题列表的缩减问题列表) 如果对问题进行了

Domain driven design 如何在CQR中处理外部事件?

假设我有一个基于CQRS的系统,带有一个web UI,我想与一些外部设备集成,比如说Arduino板 基本上,我可以想到三种情况: 当用户单击web UI中的按钮时,Arduino将执行某些操作 当用户按下硬件按钮时,域将作出反应,UI将更新 当用户按下硬件按钮时,UI应更新 如何对这些场景进行建模 这在IMHO中非常简单:UI发出命令,业务逻辑运行,发出事件,Arduino监听事件。基本上,Arduino只是一个事件去规范化器。这是正确的方法吗 IMHO也很容易做到:Arduino发出一个命令

Domain driven design DDD工厂责任

如果有以下代码 public class CountryFactory : IEntityFactory { private readonly IRepository<Country> countryRepository; public CountryFactory(IRepository<Country> countryRepository) { this.countryRepository = countryRepositor

Domain driven design DomainEventPublisher一致性

刚刚读过沃恩·弗农的书,我想知道与事件发布相关的失败 在第9页(PDF第3页)的给定示例中,我们调用DomainEventPublisher.publish()。正在发布的事件允许其他聚合执行其行为 我想知道的是:如果DomainEventPublisher.publish()失败会发生什么?如果DomainEventPublisher.publish()成功,但事务失败,会发生什么情况 实现如何处理这两种情况 如果DomainEventPublisher.publish()成功,但 交易失败

Domain driven design 如何加载聚合?

在有关ddd的文章/书籍中,在处理聚合的章节中,我感觉从未讨论过一个主题: 如何重新加载聚合 要么是太明显了,说也没用 或者这不是正确的做法 要么我不明白 如果我拿这些项目的订单为例,创建或更新我的不变量是一样的。 假设我必须更新一个已经存在订单的项目的价格,所以我将从重新加载聚合开始 但是我该怎么做呢 使用诸如automapper之类的工具来设置私有属性 是否使用一个构造函数,该构造函数接受根聚合、子存储库的id,并在此构造函数中分配私有属性 从头开始一项一项地重建一切,就像我正在创建

Domain driven design 如何在DDD中建立递归关系模型

如何在DDD域模型中建模层次关系?在我的应用程序中,我有一个组织实体,组织可以有部门,部门也可以有子部门。嵌套深度是任意的。我应该如何设计实体和存储库?一个简单的模型可能看起来像: public class Organization : Division { public Organization(string name) : base(name) { } } public class Division { public Division(string name, D

Domain driven design 在域驱动设计中,哪些对象应该包含数据库访问方法

我认为域驱动设计是说Get方法在存储库中,Add/Del/Update在业务对象中 你能澄清一下吗 当我查看MVCMusicStore示例时,数据库的所有CRUD方法都在实体中 我刚刚回答了一个类似的问题,而且似乎许多DDD问题都是关于活动记录与存储库的选择 我会听从埃里克·埃文斯的建议 一般来说,不要与框架抗争。寻找保持平衡的方法 DDD的基本原理,并在框架完成时放弃细节 敌对的。寻找DDD和 框架的概念。这是假设你别无选择 但是要使用这个框架 因此,即使DDD的创建者意识到一些可能的不便,对

Domain driven design 使用域驱动设计的系统架构,域对象是否应可用于所有层? 视图可以调用控制器 控制器仅与视图和服务层(事务所在的位置)对话 服务层对封装在事务中的域对象有一系列调用 域对象包含对dao层的调用 dao层填充域对象并持久化数据

但是我可以在不同的层上传递域对象,通过getter访问数据,或者我必须使用dto——一个包含特定于视图/用例的数据的精简域对象。在层周围传递域对象似乎鼓励打破层只能与指定的其他层对话的规则。但另一方面,这就是DDD的意义所在?如果最好从域对象获取数据并将其放入dto中,则应在何处执行此操作,控制器 就我个人而言,我总是使用查看模型(DTO供您查看)。这有助于减少传递给视图的数据量,避免意外泄露安全数据 理论上,UI(或多个UI或web服务)应该插在系统的顶部。例如,如果您通过Web服务公开系统,

Domain driven design DDD&;工厂-密集型积垢作业

我们最近决定在我的团队中为我们的新项目采用DDD,因为有很多明显的好处(来自活动记录模式学校),还有一些事情尚不清楚 假设我有一个实体事务,它依赖于以下实体(每个实体又依赖于其他这么多实体): 1.顾客 2.账户 3.通货 当我使用工厂来实例化一个事务实体以传递给域服务以获取一些奇特的业务规则时,我是否会进行这么多查询来设置所有这些依赖实例 如果我的工厂中存在跳过此类依赖项的重载,那么在某些情况下,这些依赖项将为空,并且它将变得太复杂,无法区分何时可以访问这些属性以及何时无法访问这些属性。对于活

Domain driven design 聚合和单一责任原则示例

我正在对DDD、CQRS和ES进行一些研究。从这个总根来看,我只是好奇这是否违反了单一责任原则?或者这是聚合根/DDD的预期结果?如有任何反馈,将不胜感激。非常感谢。另一种看待SRP的方式是“必须有一个单一的原因来改变此代码”。如果有不止一个原因,那么我们可以说这是违反SRP的行为 因此,通过查看代码,我可以看到它可能会更改的几个原因: 需要存储更多的帐户信息,而不仅仅是帐户名。客户服务需要联系账户持有人的信息、地址、电子邮件、电话号码 memento对象反序列化需要变得更加复杂。目前只有一条管

Domain driven design 从值对象访问AR

我有一个相当难的问题要解决。 在我的模型中,我有AR单元、AR阶段和VO GoToPositionOrder,它们实现了Order接口 它的工作原理如下: 我创建订单:订单=GoToPositionOrderPositionPoint3,4 我可以给单位下各种各样的订单 订单存储在Unit中,然后我可以存储Unit:unitRepository.storeunit 存储在unit中的订单在每个步骤后面都跟着unit,直到订单完成,所以每次发送event TimeStep时,我都会调用域服务uni

Domain driven design DDD表示实体之间的关系

我有以下结构 资源可以有多个端点 例如: 可以在以下端点上访问资源票证: /空气污染指数/门票 /api/代理/门票 /api/团体/5/门票 /api/门票/已关闭等 首先,这看起来像聚合,其中Resource是AR,endpoints是子实体 我还有用户类型。 我需要的是在用户类型和端点之间建立一种关系,这样每个用户类型都可以对端点进行不同的访问。 例如,UserTypeadmin可以访问票证resource的所有endpoints,而用户类型代理只能访问同一资源的endpoints的一

Domain driven design 如何在域驱动设计中添加计划作业

我应该在域驱动设计体系结构中添加哪个层调度程序项目 我正在考虑在分布式服务层中添加调度器,并在应用程序服务层中添加业务登录 以下是我想到的解决方案设计: 表示层 用户界面项目 分布式服务层 应用程序接口 调度程序 应用层 应用程序API和调度程序逻辑的应用程序服务 DTO 域实体模型 特定于项目的项目域实体 调度程序域特定于调度程序的域实体 数据持久性 数据访问项目存储库 数据访问计划程序域存储库 横切的基础设施 批准 登录中 非常感谢您的帮助。从现在起,我已经在表示层实现了这种组件,与UI处于

Domain driven design CQRS/DDD:检查引用完整性

命令处理程序是否也应该检查引用完整性?此常见问题解答建议您不应在聚合()中检查此问题。验证的一部分不是检查某些东西是否存在吗 例如,您可以有一个应用程序,可以在其中向文章添加注释 该命令将包含以下字段: 身份证 文章ID 用户ID 正文 对于本例,注释和文章是不同的聚合对象 您是否应该检查该文章是否已经存在,用户是否存在?你可以在一篇不存在的文章中添加评论,这感觉有点奇怪 您是否应该检查该文章是否已经存在,用户是否存在 通常不会 你可以在一篇不存在的文章中添加评论,这感觉有点奇怪 职责分离:

Domain driven design CQRS:基于多个聚合事件的更高级别状态

考虑以下场景: 我们有几个聚合,它们共享一个共同特征(例如:它们属于同一个用户) 每个聚合的事件用于具体化其自身的状态 如果需要更高级别的状态,该怎么办。该状态应表示所有用户聚合的总体状态。 考虑到有一种特殊的业务逻辑定义了高级状态的具体化(例如:如果X聚合多于错误状态,则在客户聚集状态下需要更高级别的错误状态) 此需求涉及多个聚合事件的物化。此外,较高级别的状态被视为一个事实,因为它完全由较低级别的事件决定。因此,在这里使用传奇似乎是不合适的 另一方面,当在更高级别的状态上发生转换时,需要发出

Domain driven design 用户和密码重置-不同的聚合?

这是DDD中最基本的东西 这是许多基于用户的系统的基本情况。存在一个用户对象/实体。用户可以创建密码重置(或电子邮件验证),这将触发发送电子邮件,然后在正确的用户操作后,将重置密码数据(或在验证的情况下验证用户电子邮件) 在决定用户聚合是否包括密码重置和验证,或者这些聚合应该是不同的聚合时,应该考虑什么 通常,当不考虑聚合时,我会创建不同的用户、重置和验证配置(io noSQL db) 不是,我正在构建基于EventSourcing的系统,并思考如何更好地根据聚合进行设计 我认为这种情况对于许多

Domain driven design CQRS-基于多个投影的决策应用命令

这个问题和CQRS有关——我有一个用户想从网上订购一些东西,并显示GUI,显示他的余额=100美元,库存=1件物品。假设我们有两个服务,分别是AccountService和StockService。为了为客户端生成GUI,第三方服务聚合服务侦听AccountService和StockService中的域事件,投影视图并为客户端创建GUI 当用户决定订购此项目时,他单击一个按钮,订购命令将发送到AccountService。在这里,我们加载AccountAggregate以减少需要订购的项目价格的

Domain driven design 聚合和值对象:是否删除?

我目前正在确定系统中的实体、值对象和聚合。假设已确定以下实体: 客户,客户邮件,电子邮件,客户地址,地址,地址类型 其中客户->电子邮件是一种多对多关系,客户->地址(具有地址类型)也是如此。这些关系由CustomerAddress和CustomerMail关系对象表示 起初我认为这是直截了当的: 实体:客户、客户邮件、客户地址 值对象:电子邮件、地址、地址类型 客户是包含上述所有实体和VO的聚合的聚合根 我遇到的问题(这可能是因为我在继续学习聚合的概念)是说,您有一个供应商实体,它使用相同的地

Domain driven design 域模型和存储库可以在单独的DLL中吗?

域模型和存储库可以在单独的DLL中吗 在3层体系结构中,我想我应该将域模型放在业务层 以及数据访问层中的存储库 我感到困惑,因为我的理解是,域模型使用存储库,而存储库应该从域模型返回对象,这将导致循环依赖 我一定是误解了上面的一个或多个概念 非常感谢您的澄清,因为这已经困扰了我一段时间,谢谢。我认为您根本不应该让您的域程序集引用您自己应用程序中的任何内容。它应该是最里面的组件,它完全不知道外部的任何东西。它只是坐在那里,知道域逻辑 您的域模型不应该使用存储库,而应该使用应用程序服务。 (如果域实

Domain driven design 从域实体调用域服务

可以通过服务接口从域实体调用域服务 例如-: employee.Fire()调用IEEmployee解雇服务。我是通过接口而不是通过具体的接口调用的 这可能吗?虽然您可以在没有任何编译错误的情况下执行此操作,但我认为在域实体中调用域服务不是一个好主意 通常,如果操作影响多个实体,我们将把逻辑放在服务方法中。因此,如果fire操作只影响当前雇员,则应该封装在employee.fire()中。否则,如果影响多个员工,则应将其放入服务中,应用程序应调用service.Fire()而不是employee

Domain driven design DDD:帮助我进一步了解价值对象和实体

在这方面有几个问题,阅读它们对我没有帮助。在Eric Evans DDD中,他使用了地址在某些情况下作为值类型的示例。对于邮购公司来说,地址是一种值类型,因为如果该地址是共享的,谁住在该地址并不重要,只要包裹到达该地址即可 这对我来说很有意义,直到我开始思考如何设计它。根据第99页的图表,他是这样写的: +------------+ |Customer | +------------+ |customerId | |name | |street | |city

Domain driven design 不应该';在下面的模型中,地址是值对象吗?

发件人: 假设公司和个人都有相同的邮件地址。 这些陈述中哪一个认为有效? 1.“如果我修改Company.Address,我希望Person.Address自动获得这些更改” 2.“如果修改公司地址,则不得影响个人地址” 如果1为true,则地址应为实体 如果2为true,则地址应为值对象 在上面的模型中,邮件地址不应该是一个值对象,因为即使公司和个人有相同的邮件,该邮件仍然没有概念标识 换句话说,如果最初是公司和个人共享初始值。address@gmail.com,但之后会收到新邮件。addre

Domain driven design 我们是否应该将呼叫和协调工作分配给域服务?

应用程序服务通过调用和协调对工作流、基础设施服务、域服务和域实体的调用来实现客户端(即表示层)发出的命令 很少有域服务执行与应用程序服务类似的工作,这是否是一种常见做法,这意味着它们也进行和协调调用,唯一的区别是它们在更细粒度的级别上进行调用(即它们只进行和协调对其他域服务和域对象的调用) 如果是的话,有什么想法这些域服务应该是多细粒度的吗 谢谢域服务包含的域逻辑不适合任何实体,或者跨多个实体 一个经常被引用的例子是FundsTransferService。转移资金似乎不是BankAccount

Domain driven design OSGi应用程序设计与DDD

在阅读了和之后,我现在陷入了一个紧迫的问题:如何应用“不要编写OSGi”的咒语 假设有界上下文是整个应用程序,而不是单个捆绑包,我应该可以自由地在API捆绑包中声明一些聚合根实体,并以DDD样式声明用于处理所述实体的存储库。现在,问题的关键是:显式存储库似乎与OSGi风格相反,因为存储库本身就是(域对象的)注册表,而这种设计避开了OSGi服务注册表。但要取消存储库,消费者需要编写OSGi以执行实体的查找 据说存储库只是一个外表——这是否意味着我应该创建一个存储库实现,它将委托给服务注册中心?这似

Domain driven design DDD:聚合建模

我面临一个设计问题,我想在两个不同的有界上下文中对同一个物理对象建模 为了尽可能精确地描述我的问题,即使我知道这只是一个实现细节,我将从我的事件源机制开始 我的事件存储机制 下面是Greg Young的CQRS文档(请注意PDF“构建事件存储”部分)的广泛启发 我有两个表,一个称为聚合,另一个称为事件(注意复数形式,因为它们是表,不是对象!),如下所示: namespace DomainModel/WriteSide/Sales; use DomainModel/WriteSide/Aggreg

Domain driven design 实现领域驱动的设计成本

我在我的项目中使用DDD,喜欢它的强大思想,并且独立于我的后端DB设计。 我还在前端使用MVP模式。 但最近,我遇到了将模型转换为模型>>1000个对象的性能问题,比如: 从EF存储库模型到域模型 从域模型到视图模型 同样的旅程,我应该在DB上持久化一个对象。 这是实施此模型的缺点,还是我应该遵循任何降低成本的方法 将域聚合映射到实体框架数据模型和实体框架数据模型之间,会对性能造成微不足道的影响 但为什么要一次映射1000个对象?我不了解您的需求或领域,但听起来您的设计中可能存在问题。为什么在内

Domain driven design 发送命令时,CQRS事件源检查用户名是否唯一,是否来自EventStore

当我们有特定的唯一EntityID时,EventSourcing工作得非常完美,但当我试图从eventStore而不是特定EntityID获取信息时,我遇到了困难 我将CQR与EventSourcing一起使用。作为事件源的一部分,我们将事件作为列(EntityID(uniqueKey)、EventType、EventObject(例如UserAdded))存储在SQL表中 因此,在存储EventObject时,我们只是序列化DotNet对象并将其存储在SQL中,因此,与UserAdded事件相

Domain driven design DDD。我可以将我的值对象迁移到实体吗?

所以我尝试用DDD的方式重构重写我的应用程序。这是一个包含3个类的简单应用程序: 配置(名称) 环境(名称) 属性(键) 我使用它来查看和编辑每个环境的配置文件。一个配置可以被视为一个表,其中属性作为行,环境作为列 此时,配置是一个实体,环境和属性是值对象。但是现在我想要实现us ecase,为给定的环境将值设置为属性。我的第一个想法是: class Configuration(name) { environments = SetOf[Environment] propertie

Domain driven design 将引用的聚合根转换为另一个聚合根

我的系统有一种“联系人”的语言,这是一种我们有一些信息的“幽灵用户”——它的验证规则很小,它的状态主要是联系人信息。我们还有一个“用户”的概念,即经过充分审查和注册的用户。把“用户”想象成一个充实的“联系人” 我们试图捕获的生命周期是,一旦有人使用“联系人”的信息注册,“联系人”将被“用户”取代 我们在系统中还有其他聚合根,它们引用指向“联系人”UUID的“联系人ID”。当“联系人”注册时,我们希望使用“用户”的新概念在域中表示他们,“用户”现在有自己的“UserID”UUID 我们如何保持仍然

Domain driven design DDD:选择聚合根

在我的例子中,我有两个主要概念:用户(系统的主要公民)和组。 组有两个子集合:等级和角色。没有团队,等级和角色就没有意义。 当用户被分配到组时,我们还必须选择1个角色和1个等级,并将它们分配给用户和组之间的关系 问题: 我这里有多少聚合根?从用户方面看,它显然是一个用户(系统的主要概念),但它与组的关系如何?DDD规则禁止AFAIK引用聚合根以外的实体 DDD规则禁止AFAIK引用聚合根以外的实体 嗯,我不会说这是“DDD规则所禁止的”。。。有时你别无选择。我必须考虑与根的集合相关联的“实体集

Domain driven design 学习DDD和CQRS

我是DDD和CQRS的新手,我正计划构建一个简单的应用程序来提高我的技能。 我计划做的是一个简单的出租车公司应用程序 要求: 客户点了一辆出租车 客户一次只能有一个订单 司机点菜 驱动程序一次只能有一个订单 驱动程序转到客户端 客户进入驾驶室 课程开始了 课程结束 客户购买,司机付款 等等 我可以看到可以有三个聚合:客户机、订单和驱动程序。我想把它们分成不同的微服务。你认为这是个好主意还是我应该从一个微服务开始 我现在专注于叫出租车。首先,我需要检查客户是否还没有指定课程,然后我可以创建订单。创

Domain driven design 在域驱动设计下考虑应用程序是子域的一部分是否有意义?

我们正在创建一个系统,负责贷款发放。 我们从一开始就采用领域驱动的设计方法。 我们正处于识别子域和上下文映射的阶段 有趣的是,我们的一个业务用例本身就是通过360度监控全天候维护系统的正常运行时间 将应用程序监视添加为子域的一部分有意义吗?当然有意义。一旦领域专家请求一个功能并为其付费,它应该作为核心/支持/通用领域出现在上下文映射中 通常,如果某个功能由业务用户(不是开发人员或DevOps)使用,那么它应该位于上下文映射中。未来该领域很可能会有更多功能,如报告、订阅计划等

Domain driven design 聚合根目录中包含的实体如何保存在DDD中?

在阅读了大量文章后,我意识到如果一个概念/上下文存在聚合根,那么我们需要为整个概念/上下文建立一个存储库 如果是这样,我看到内部实体将不会有任何存储库。如果是,这些内部实体是如何保存到数据库的 我在聚合根下有许多内部实体。因此,如果我想知道是否需要将所有内部实体保存在聚合根存储库下,它将变得臃肿。请建议在这种情况下可以做什么 此外,我的内部实体将在持久性级别访问它们自己的每个表。如果不允许我以这种方式存储内部实体,请更正 示例 我想我有一个餐厅作为一个聚合根。它可以对名为Review的实体进行分

Domain driven design DDD聚合存储库和缓存存储库

我有产品存储库。我想使用redis作为缓存。我创建了缓存repo 当我想要得到产品的时候。首先,我去缓存repo,如果不存在,我查询主数据库。如果里面有产品。我写入缓存并返回 选项1)我通过DI在产品存储库中获取缓存存储库并在其中使用 选项2)我在command handler with product repository中的应用层中获得缓存存储库,并分别使用这两种存储库。在我看来,您是受技术需求(即Redis的使用)而不是业务需求(即为什么需要缓存?性能问题、延迟?)驱动的 但是,要总结SO

Domain driven design 规范模式对象应位于哪一层;新';ed up";?

所以,我在这里查看了一些关于规范模式的帖子,但还没有找到这个问题的答案 我的问题是,在n层体系结构中,me规范究竟应该在哪里“更新” 我可以把它们放在我的服务层(也称为应用层,它有时被称为…基本上,一个.aspx代码背后的东西会与之对话),但我觉得这样做,我让业务规则泄漏出了域。如果以其他方式访问域对象(除服务层外),则域对象无法强制执行其自己的业务规则 我可以通过构造函数注入将规范注入到我的模型类中。但同样,这感觉“不对”。我觉得唯一应该注入模型类的是“服务”,比如缓存、日志记录、脏标志跟踪等

Domain driven design ddd-创建和重构实体的标识字段

我们正在学习DDD并评估其在由遗留系统和数据存储支持的系统中的使用 我们一直在使用反腐败层、泡沫上下文和有界上下文,但并不了解它们,这种方法对我们来说似乎非常实用 但我们对识别方法和身份相关性不确定也不自信。 旧式数据存储没有主键,而是使用复合唯一索引来标识信息 我们目前正在将模型创建为应该是实体的值对象(希望为每个实体添加“Long id”字段),或者我们很少将唯一索引中使用的属性组合用作id字段。我们似乎很清楚,实体模型应该有id字段 以下是我的具体问题: 理论上,我们希望我们闪亮的新实体

Domain driven design 领域驱动设计类图

我想知道当使用领域驱动设计时,是否有人有一个关于如何组织UML类图的好例子 我真的不知道如何使实体与存储库和服务相匹配。我最终为DDD绘制的UML图通常是手工绘制的,非正式的,并且没有严格遵守所有的指导原则。从UML的角度来看,实体、存储库和服务都是简单的类;为了清晰起见,类可以用a标记 此外,我不太强调单独的类图。从行为的角度考虑这个模型通常是更富有成效的,这是序列图可以帮助的,尽管它们可以很快变得过于技术化。类图可以帮助您识别聚合和实体,但它们也会让您误入歧途,因为它们过于强调名词而不是动词

Domain driven design 避免领域驱动设计中的工作单元模式

我读过这篇文章,它让我三思……: “避免工作单元模式。聚合根应定义事务边界。” 为什么有人应该避免应用领域驱动设计的UOW模式?基本上,根据,UOW“只是”一个智能持久化工具(不管这个任务多么复杂)。因此,与DDD方法没有内在的不兼容性,DDD方法提供了更多关于doman建模的“精神”而非技术工具的指导 没有上下文,很难说出引文作者的想法;但他这样写可能是因为在使用UoW时,通常很难让您的实体管理自己的生命周期(以及其他生命周期),通常是持久性和事务性行为 事实上,可以在DDD样式的应用程序中使

Domain driven design DDD聚合验证

我正在构建一个应用程序,它将通过RESTful服务公开部分功能,我的应用程序包组织如下 应用程序-->此包包含RESTfull服务 模型-->包含聚合、值对象等域模型 Infrastructure-->包含访问数据库所需的一组类 Mongo DB-->我的数据库 应用程序包公开端点 CastReview(UUID reviewedEntityId, string review) 审查从请求主体中检索,它是强制性的 现在我的问题是应该在哪里进行验证 我应该在聚合和应用程序中保留验证逻辑吗?我只需

Domain driven design 领域建模:正确操作

看过Jimmy Bogard的优秀作品后,我尝试将同样的原则应用到我现有的一个项目中,以评估我对这个概念的掌握程度。下面列出了我的疑问和疑问 域背景:管理员可以查看公司列表。然后他批准了一家公司。数据库应该将布尔字段更新为true,并存储批准该公司的用户的id 最初,我在服务层编写了以下代码。它将请求传递给存储库,存储库更新数据库中的相应字段,然后发送邮件通知 public void ApproveCompany(int companyId, int userId) { _company

Domain driven design 在CQRS http应用程序中实现Saga/Process Manager

以下示例:(图3) 它如何适应http应用程序 用户应向PlaceOrderController执行http请求,后者将发送PlaceOrderCommand,但订单流程管理器如何向用户回答“9.订单已确认”?为了将此信息返回给用户,控制器如何意识到这一点 谢谢您不必立即回答“订单已确认”。看看亚马逊和其他购物网站是如何做到这一点的:在提交订单时,您只会收到一个“订单接受确认”(例如,HTTP代码202已接受)。当订单流程管理器处理了实际订单时,在单独的消息/通道(例如,电子邮件)上会收到一个“

Domain driven design DDD:如何处理多个可能的聚合根链接

我正在使用DDD开发一个帮助台应用程序。我的问题是如何最好地处理可以引用两个可能的AR的实体 我有一个RequestSubscriber,是一个订阅请求更新的人 此订户是代理或联系人 问题是,我应该有一个对代理或联系人的可选引用,并且只填写一个,还是应该有一个带有关联类型的泛型person引用,以确保链接到达正确的位置 型号选项: // This public class RequestSubscriber : DomainEntity, IPerson { // Constuctors

Domain driven design DDD-值对象积垢

我在一个任务管理应用程序中工作,用户可以在其中打开票据。每张票据都有一个可从列表中选择的简短描述字段。后台团队最终可以添加、删除或更新简短描述列表。简短描述列表中的更改必须不影响已创建的票据 我认为简短描述从票据的角度来看是一个VO,但从CRUD的角度来看也是一个实体 我应该用两个分开的存储库对两个分开的对象建模吗?一个用于VO(只读),另一个用于CRUD?那么代码复制呢 我认为简短的描述从票证的角度来看是一个VO,但从CRUD的角度来看也是一个实体 这有点可疑;我猜简短描述是值对象,但当前批准

上一页   1   2   3    4   5   6  ... 下一页 最后一页 共 41 页