Domain driven design 通过多个聚合从域事件重建查询

我使用的是DDD/CQRS/ES方法,我对我的聚合和查询建模有一些疑问。作为一个例子,考虑下面的场景: 用户可以创建工作项、更改其标题并将其他用户与之关联。工作项有参与者(关联用户),参与者可以向工作项添加操作。参与者可以执行操作 假设已经创建了用户,我只需要用户ID 我有以下工作项命令: 创建工作项 易名 添加参与者 附加动作 执行 这些命令必须是幂等的,所以我不能添加两次相同的用户或操作 以及以下查询: WorkItemDetails(工作项的所有信息) 查询由处理WorkItem聚

Domain driven design 在域驱动设计(DDD)中跨有界上下文共享元数据?

我有一个奇怪的DDD问题要解决。我有两个有界上下文(BC),一个用于订阅,一个用于警报 订阅BC具有警报类型元数据,以业务规则的形式表示订阅者可以订阅的警报类型。订阅者订阅警报类型后,另一个系统开始将这些警报发布到警报BC并保持。发布警报时,BC知道警报类型id,但不知道其元数据,如警报名称和说明。这没关系,因为发布时需要存储的只是带有警报类型Id的警报 然而,这就是我开始崩溃的地方。需要获取用户发布的警报,作为查询的一部分,它将包括来自订阅服务器BC的警报类型元数据。由于BC通常应该是原子的,

Domain driven design 作为行动者的DDD聚合

Vaughn Vernon在这里描述了使用参与者作为DDD聚合: 考虑发票合计: 是要使用的Azure Service Fabric Actor的生命周期,因此1个Actor只能用于保存1张发票的状态(比如标识为“ABC”),而可靠存储表示该发票的状态。或者需要某种Flyweight实现来选择一个可用的Actor实例,并在调用期间加载Invoice“ABC”的状态 第一个选项似乎符合参与者的概念,但这意味着结构基础结构的设计需要考虑到这一点,系统中的每个发票都有一个参与者(一个无界且无疑非常大

Domain driven design 什么是领域驱动设计?

所以我从团队中的一位开发人员那里得到了这个问题:什么是域驱动设计?我当然可以指着埃文斯的书,但这真的是一个答案吗 您如何用几句话向团队中的初级软件工程师解释DDD?我想说,这种做法促进您将精力集中在“问题空间”而不是“解决方案空间”。通过学习并真正了解和理解领域,推动紧急解决方案(设计)。其中一个实践(取自XP)是编写问题域中发生的故事。通过这些,您可以确定设计的用例和对象。它们“出现”并告诉您解决方案中需要什么,以及它们将如何相互交互。DDD的一个重要部分是所谓的泛在语言;i、 e.使用与商务

Domain driven design DDD存储库和工厂

我读过一本书 根据这里的说法,我们为每个实体创建了一个存储库(接口),然后我们创建了一个RepositoryFactory,它将提供存储库的实例(声明为接口) 这就是使用DDD完成项目的方式吗 我的意思是,我看到一些项目,我认为他们使用DDD,但他们直接调用每个存储库,没有涉及工厂 而且 为什么我们需要创建这么多存储库类,为什么不使用 public interface IRepository : IDisposable { T[] GetAll(); T[] GetAll(Expression&

Domain driven design 相等实体对象但具有非相等属性-它们是否存在于单线程/单数据库应用程序中?

相等实体对象但具有非相等属性-它们是否存在于单线程/单数据库应用程序中 什么时候像上面这样的一个类似的例子会让卡拉变成红色而碳水化合物变成蓝色 对于具有一个DB的单线程web应用程序,是否有过这样的情况:您需要carA和carB具有相同的身份,但具有不相等的属性 卡拉现在是什么颜色 它是蓝色的。 逐行 carA = carRepository.load(1); carB = carRepository.load(1); carA == carB; // true carA.changeColor

Domain driven design CQRS-读取端的事件重播

我读过几篇关于CQR的博客,所有这些博客都解释说,在写端,事件被持久保存在事件存储上,在请求时,事件被检索并在聚合上重播 我的问题是,为什么在读取端不需要对聚合进行事件重播?,因为您的读取端不使用聚合 读取端实现为投影,该投影根据聚合发出的事件流计算当前状态,并将当前状态保存在某个现有存储或内存中。读取端的while点是使当前状态随时可供客户端使用 我想给Jakub Konecki的解释添加一个例子 让我们假设您使用事件源为银行帐户建模。该帐户上的每个操作都会导致事件被持久化。几年后,你有数百个

Domain driven design DDD-建模用户,其联系信息在整个系统中必须是唯一的

我需要一些关于为身份和访问域建模用户的澄清。用户域模型有一个联系信息实体(因为它是可变的实体),客户可以注册电话号码,但可以在需要时选择更改 客户曾经使用过的电话号码永远不会被任何其他用户使用。因此,我认为该模型必须允许查询电话号码表(因为它与客户是多对一的,因为旧号码被停用并存档) 如果创建domainservice是可以的,那么存储库应该是什么,因为没有标识聚合。 在这些情况下,我有一个customer(user)聚合,但为了允许查询所有用户以查看客户提供的电话号码是否已被其他人使用,聚合应

Domain driven design 基于领域驱动设计方法的业务逻辑推理/建模

我试图实现的是开发一个实现DDD方法的应用程序 这个故事听起来可能很傻,但却是一个现实生活中的问题。相信我 业务情况如下: 比如说,一家公司专门生产糖果,这些糖果被分发到自己的商店出售 这名工匠根据公司一家商店目前陈列的是什么和不是什么,制作不同类型的糖果 当一种口味的篮子“消失”时,卖家会用一种不同于商店储藏柜的甜品来替换这种类型的甜品 显示器上不应存在重复的味道,显示器上应填充尽可能多的容量,或制造商能够处理的生产量 根据需求,糖果从制造商实验室的仓库分配到商店的仓库 假设每个工作人员都

Domain driven design DDD值对象

引用埃文斯蓝皮书 您可能会惊讶地发现,我们应该努力使用 尽可能使用值对象而不是实体。即使在 域概念必须建模为实体,即实体的设计 应该倾向于作为一个值容器而不是一个 子实体容器。这一建议并非基于武断的观点 偏爱。度量、量化或描述事物的值类型是 易于创建、测试、使用、优化和维护 在我的上下文中,我有 发票实体为应收账款的发票汇总 发行人实体为应收账款的发行人合计 每张发票都有其发行人。我应该通过ID将其视为发票->发卡行关系,还是更好的做法是将其视为带有对发卡行的引用的值对象,或者仅将此发卡行视

Domain driven design 使用领域驱动设计建模一对多关系

这个问题更像是一个关于如何使用集合对简单的一对多关系建模的一般性问题:列表项中的更改是否应该反映在包含它的聚合版本中 该域与会议计划有关(与Outlook中类似)。 我有一个会议实体,可以有多个参与者。 参与者可以接受/拒绝会议请求。 重新安排会议将取消所有参与者的确认 我想到了两种建模方法 选项1 会议汇总将包含参与者列表,其中每个参与者都有一个参与者ID和一个状态(接受/拒绝)。 这里的问题是,对于特定的参与者,每个接受或拒绝命令都会增加会议的版本,这意味着如果两个参与者试图基于相同的原始版

Domain driven design DDD系统中的查询

这里是DDD noob。假设我们有订单的域聚合(例如)。使用此示例,我们希望查询包含特定项目的所有订单。此外,我们对订单或项目中的所有内容都不感兴趣。只有orderId、日期和项目名称就足以显示回用户/响应API。与以下问题作斗争: 存储库(返回域对象)是否返回完整的(即所有属性)匹配订单及其所有项目,然后域对象/服务必须过滤不感兴趣的项目?似乎效率很低,而且没有利用我们的持久性(SQL)引擎功能来缩小搜索范围。此外,此后续筛选将更改域对象的行为(例如,订单的状态及其总数),如果调用者使用此订

Domain driven design 域驱动设计-从UI增量保存

我是DDD的新手,阅读有关DDD的文献,但在应用某些概念时遇到困难。 我正在演示我正在构建的应用程序的简化视图。这是一个住房贷款申请系统。用户界面有类似向导的步骤来收集信息,如步骤1是收集申请人信息,步骤2是收集财产信息,步骤3是捕获批准或拒绝的决定。在步骤1,每个应用程序都会被分配一个唯一的ID。我的挑战是如何对每个步骤的增量存储进行建模。 贷款申请是我的总根。从我所读到的内容来看,每个根目录只有一个存储库,整个根目录必须保存在一起才能有效。然而,UI以增量方式收集信息,并且在每个步骤中,应用

Domain driven design 聚合为服务

假设服务需要一些全局配置来处理某些请求 例如,当用户想做某件事时,它需要一些全局配置来检查用户是否被允许这样做 我意识到,在axon中,我可以使用命令处理程序来处理没有指定目标聚合的命令,因此处理部分没有问题 问题是,在试图更改配置时,我希望在上面有持久性存储和一些不变量。配置的整体思想是,它应该像轴突中的聚合一样一致 ConfigService { @Inject configRepository; @Inject eventGateway; @CommandHandler handle(c

Domain driven design CQRS和x2B中的聚合间通信;DDD+;活动来源

在基于DDD原则构建的环境中,使用事件源聚合后端,分离(AR)应该如何相互通信 例如,我有一个设施聚合根(AR),它有一个工厂方法负责创建预订AR。预订是人员AR和设施AR的时间敏感组合。人员只能在单个设施中预订 在DDD中,我会在Person中保存对预订的引用,并在设施中保存对Person的引用。但是,当生成事件以用于事件源时,我认为尝试从后端处理事件反序列化将变得令人望而却步。因此,我已经习惯于只保存对基于对象的唯一id的值的引用。然而,这带来了一个新问题,当AR上的一个方法需要调用另一个A

Domain driven design 您如何处理DDD和EF4

我在尝试将DDD应用于EF4(在ASP MVC2上下文中)时遇到了几个问题。如蒙告知,不胜感激 首先,我开始使用POCO,因为在很多情况下对ObjectContext的依赖不是很舒服 去POCO解决了一些问题,但我对NHibernate的体验并不习惯 我想知道是否可以使用designer,不仅生成实体,还生成值对象(ComplexType?)。如果我的意思是值对象是一个类,它有一个没有任何设置属性的向量(需要T4修改吗?) 我发现向贫血实体添加行为的唯一方法是创建扩展edmx生成的部分类。我对这

Domain driven design DDD存储库中的过滤器

有一个活动实体,为此,我有一个具有此功能的活动存储库 公共IList FindAll() 公共活动FindByCampaignNumber(字符串编号) 但现在我想要这个标准-: 查找今天创建的活动 查找本月创建的活动 查找最新的前5个活动 查找今年创建的活动 所以对于所有这些活动过滤器 我是否在存储库中为它们中的每一个创建单独的函数? 并以这种方式实施 获取所有活动,然后筛选所需的活动,但我不想要所有活动。在谷歌搜索时,我发现这个解决方案 1: 有什么方法可以避免使用多个函数,还是继续为每个过

Domain driven design DDD:如何保持复杂值对象不变?

我想将地址建模为值对象。由于使其不可变是一个很好的实践,所以我选择不提供任何setter,这可能允许以后修改它 一种常见的方法是将数据传递给构造函数;但是,当值对象相当大时,可能会变得非常臃肿: class Address { public function __construct( Point $location, $houseNumber, $streetName, $postcode, $poBox,

Domain driven design 如果使用域事件,我应该使用存储库模式添加项还是创建事件?

我试图理解在特定情况下添加新域实体的方法 现在,我通常会创建实体,然后通过存储库添加它们。我想我还是会这么做 我的例子是我们通常向系统添加资产。像这样: var asset= new Asset(); /*bunch of prop setting*/ _assetRepository.Add(asset); 然而,资产创建是我们希望遵循特定流程的一个事件。因此,开发人员建议我们不再需要这样做,因为它可以由域事件处理: var asset= new Asset(); /*bunch

Domain driven design 域模型应该调用基础设施接口吗?

洋葱架构和领域驱动设计中是否允许以下良好的设计 假设您有这样一个“订单”域类 class Order { INotificationService _notificationService; ICartRepository _cartRepository; void Checkout(Cart cart, bool notifyCustomer) { _cartRepository.Save(cart); if (notifyCustom

Domain driven design 持久性模型和域模型之间的映射

我已经阅读了大量关于领域驱动设计的书籍,并用该设计完成了一些相当复杂的项目。所有这些都有自己的缺陷和反模式,这些缺陷和反模式都是在这一过程中认识到的。可以理解,因为这是一个学习过程。一、 然而,我被困在一个主要的概念上,我似乎无法通过谷歌(也许我只是没有想出正确的搜索词)或我自己的尝试和错误来解决 我读过几篇文章,它们强调要将域模型和持久性模型分开。不要让ID之类的东西泄漏到域模型中,除非该ID有域用途。有了该策略,如何在实践中持久化域模型?我读过的所有文章都是抽象地谈论这一点,但我找不到一个不

Domain driven design 远程“内部”有界上下文集成

在我的公司里,我们有两个应用程序——一个基本上是一个大型CMS,用于产品部门管理产品、促销、客户等。第二个是或多或少的电子商务解决方案,它是CMS环境的直接消费者。问题是,我们共享基础设施——主要是数据库。这是电子商务BC中产品的来源-它是从CMS维护的表中加载的。在中,作者提到了几种集成此类远程BCs REST/RPC/消息传递的方法,但我在任何地方都没有遇到过这种情况。从性能角度来看,如果我错了,最好在电子商务BC中使用这些CMS表 现在: 我是否应该在电子商务中创建一个库存上下文,作为CM

Domain driven design 决定何时需要显式建模域角色的准则

我正在寻找一些关于何时必须在域模型中显式建模角色的指导原则 我将用一个例子来解释我目前的立场 假设我们正在建立一个医疗保健系统,业务需求表明 “只有具备3年以上经验和一定经验的医生 “有资格做手术” 在这种情况下,很明显,做手术的动作只能由扮演医生角色的人来执行,医生需要满足某些先决条件才能执行该动作 docter.performSurgery() 所以基本上所有的医生都不一样 此方法可能会检查是否满足前提条件 因此,在上述情况下,我将明确地为角色建模 现在让我们考虑另一种情况。 只有管理员

Domain driven design 在命令处理程序/域服务中使用查询模型

我是否应该使用查询模型来组合/检查某些聚合信息,如在域服务中?我已经在很多例子中看到了这一点。但是,如果查询数据作为域事件的结果异步传播,该怎么办 示例:具有用户聚合和消息聚合的消息板(对于较小的trx边界解耦)。 当用户被标记为已删除时,其所有邮件也需要被标记为已删除。这将通过在MessageEventHandler类型的服务中处理UserMarkedDeletedEvent来完成。现在,该服务需要为特定用户的每条消息触发DeleteMessage命令。为了找到消息,需要进行查询。我想这必须在

Domain driven design 我应该如何建模';知道';何时完成聚合更新以触发事件?

聚合B的计算结果最终需要与聚合A一致。聚合A可以使用八种方法进行变异,每种方法都会导致B需要更新。这似乎是一个最终一致的任务,但实际的更新时间框架应该在几秒钟之内 我不想依赖应用层来“记住”触发更新。(还有)建立模型的最佳方法是什么 使用具有双重分派的域服务是一件痛苦的事情: 服务必须是a 通常会在一行中调用多个变异方法,我不希望每次调用方法时都触发B中的更新 构造函数注入也是一个难题: 在某些情况下,A不会发生变异,因此被迫实例化并注入域服务以监视肯定不会发生的变异是错误的 再说一次,通

Domain driven design 基于时间的不变量

我目前正在尝试将DDD实现到现有的系统中,对于我的一个模型的一些不变量,我有点头疼 在工资系统中,一些不变量在纳税年度开始时会发生变化,但系统仍需要支持当前纳税年度。比如说,如果现在的最低全职工作年龄是16岁,但下一个纳税年度则改为15岁,那么DDD是否可以解决这个问题 目前有一个参考数据存储库,它具有开始日期/到期日期,可以通过使用当前日期来读取,以确定在给定日期使用的正确记录,但据我所知,在模型中使用存储库有点不正确 我是否遗漏了DDD的一个明显的要点(例如,因为它需要一个存储库,而不是实体

Domain driven design 从有界上下文返回HTML

我最近读了一本关于领域驱动设计的书。但是,当我读到将HTML从有界上下文发送回表示层时,我感到惊讶。是从有界上下文返回数据的两种方法之一(另一种是通过各种数据类型,如JSON和XML,…每个人都使用它) 这是本书的确切内容: HTML API与数据API 通过使用从 对于每个有界上下文,您将为 页面特定区域的外观和行为 现在,我有两个问题: 这真的是返回HTML的好方法吗 应该在哪里生成HTML?在应用程序服务中作为有界上下文的最后一层或其他层还是什么 参考:领域驱动设计的模式、原则和实践 作

Domain driven design DDD-具有基础架构实现的域服务

我正在使用六边形架构在DDD中实现一个项目。 我试图遵循所有避免贫血领域模型的最佳实践,但我遇到了这个问题。 我有一个具有属性优先级的实体客户机,为了计算这个优先级,我使用一个对外部API的rest调用 我想避免在实体上使用setPriority方法,所以我提出了这个解决方案,但我不确定它是否真的“符合DDD”。 此处为伪代码: //DOMAIN interface PriorityService { public int exec(Client client); } class Clie

Domain driven design 在域对象中使用DAO正确吗?

我在一个实例中发现了以下内容:“不应该直接从客户机(服务和其他使用者类)调用DAO类。客户机应该始终调用域对象,而域对象反过来应该调用DAO以将数据持久化到数据存储。” 这不是我以前在做DDD时看到的情况。有什么想法吗 谢谢你从文章中引用的最后一句话本可以写得更清楚。我怀疑作者的意思是(重点是我添加的文本): 客户机应始终调用域对象,域对象应调用存储库,存储库应调用DAO,以将数据持久化到数据存储 “不应该调用DAO类 直接来自客户(服务和 其他消费者类别)。客户 应该始终调用域对象 这反过来又

Domain driven design stackoverflow标记问题Vo或实体或单独的根agg

在域驱动设计的上下文中,stackoverflow中的标记是值类型,请参见下面的链接讨论 但若它是值类型,那个么将来若有人想要创建新的标记,他将如何执行呢 在我的项目中也有标签>,它与一个广告实体相关,1到多个,但是如果我把标签看作是一个值类型,并且如果将来我想在数据库中添加新的标签。我该怎么做,因为标签是VO。创建广告时,我只能将现有标签分配给新广告,但如何创建新标签?在可能标签列表的上下文中,标签是一个实体 应用于问题的标记是值类型。事实上,从订单的角度来看,它甚至不是一个类——它实际上只

Domain driven design 领域驱动设计中的高可扩展性

我将DDD用于面向服务的应用程序,目的是在大量web客户端(即浏览器)之间传输大量消息 因为在所需功能的上下文中,传输的需求大于存储的需求,所以我喜欢主要依赖RAM并最小化数据库使用的想法 然而,我不清楚如何从可伸缩性的角度来构建它。web场创建服务端点和域逻辑处理的高可用性。但无论我有多少台服务器,它们似乎都必须共享一个公共存储库,以便数据保持一致 如何构建此存储库,使其尽可能具有可伸缩性?它如何能够以一种所有机器都是一致的并且每个机器都不关心另一台机器是否倒下的方式在一系列物理机器上传播 此

Domain driven design CQRS/EventStore-如果命令不应失败,如何管理大型树?

我读到CQR中的命令设计为不会失败,并且本质上应该是异步的 在我的例子中,我有一个树(想想windows资源管理器),其中用户有表示视频内容位置的文件夹,每个子项都是一个视频/媒体文件。多个用户都可以在树的同一分支上工作,移动文件夹和文件(上传新文件、创建新文件夹以及删除文件/文件夹) 如果我忽略了命令的异步性质,我可以让第一个用户进行更改,并在第二个用户上引发异常,如果用户将视频移动到的文件夹不再存在。现在,第二个用户负责刷新其树的一部分,然后重新应用其更改 如果我的更改不被允许(即,我尝试将

Domain driven design 域驱动设计中规范类的正确使用

我正在使用DDD构建一个应用程序,但是我很难理解应该在哪里实例化规范类或使用它们 我的应用大量使用预订窗口,因此我有一个规范,确保即将添加到聚合中的预订窗口不会与当前聚合中的另一个窗口重叠。像下面这样 /// <summary> /// A specification that determines if the window passed in collides with other windows. /// </summary> public class Bo

Domain driven design 不带CQR的EventStore

我已经看过很多关于EventStores的文章,但是所有的文章都是关于CQR的 我们希望使用EventStores来集成有界上下文,但希望使用传统的ORM来读取/写入聚合,以避免命令/查询和单独的读取模型,在我们的例子中,这会增加太多的复杂性 鉴于将这两个概念放在一起讨论非常流行,人们会认为它们应该生活在一起——与为聚合/CQR/读取模型实现EventStore相比,在没有CQR的情况下实现EventStore“lite”是否存在陷阱 我们希望使用EventStores来集成有界上下文 可以将事

Domain driven design DDD域服务:服务类应该包含什么?

在域驱动设计中,域服务应该包含自然不属于实体内部的操作 我习惯于为每个实体创建一个服务并在其中分组一些方法(组织实体和组织服务服务) 但是我想得越多:OrganizationService没有任何意义,“Organization”不是一种服务,而是一种东西 所以现在我必须添加一个组织深度复制功能,它将复制整个组织聚合,所以我想把它放在一个服务中 我应该做什么:OrganizationService::copyOrganization(o) 或者我应该这样做:OrganizationCopySer

Domain driven design 聚合和聚合根混淆

我被分配了一个相当简单的项目作为考试,我有了使用领域驱动设计开发它的想法 很多人可能会说,应用程序非常简单,使用存储库和UoW只是浪费时间,你可能是对的,但我认为这是一个学习更多东西的机会 该应用程序是一个“机票”系统,从下图中,您可能会猜到它的功能 问题是,我不确定我是否正确地分离了骨料和它们的根 编辑: 我介绍了数据模型,因此任何人都可以轻松发现整个功能 问题是,从雇员的角度来看,“Rad”所说的航班封装了整个功能,是聚合根 然而,从管理的角度来看,航班与他无关。 他只是想更新或增加新的飞

Domain driven design 如何在域驱动器设计中设计自引用聚合

我在一个任务系统上工作,任务可以有收集子任务,子任务可以有收集子任务,等等(递归) 域 任务基于组织结构图 组织结构图示例: Mahdi ---Saeed ------Jaime ------Ahmed ---Tarawneh ------Mae ---Rasheed 组织结构图上的上级将任务分配给下级 假设Mahdi将分配任务给Saeed,任务名为《准备雅思课程材料》 然后Saeed可以将任务划分为子任务 prepare course materials for IELTS ---issue

Domain driven design 如何在DTOs DDD中应用业务规则

我需要在DTO中应用业务规则,但此DTO具有N个实体的属性 我想知道验证此DTO的正确方法。非常常见的方法是将DTO包装到实体中,并在实体内实现业务规则 var state = new DTO(); var entity = new Entity(state); //this will change the state in a consistent way according to business rules entity.DoSomething1(); entity.DoSomethin

Domain driven design ddd-覆盖每个属性的值对象

实现与第三方系统的集成,该系统从网站导出产品和导入订单 有一些ddd的工作已经在设计中完成,并继续它,我想 订单和产品上的每一处财产都应该包含价值对象吗 这意味着大约100个类别涵盖了所有可能的属性,这些属性似乎过多: 产品SKU 产品名称 产品描述 产品价格 等等 订单和产品上的每一处财产都应该包含价值对象吗 他们已经是了。真正的问题是,你是要让覆盖内容隐式化,还是显式化 这意味着大约100个类别涵盖了所有可能的属性,这些属性似乎过多: 哦,它有可能变得比这更纠结ProductPrice包

Domain driven design 在DDD中,什么是域?

我已经完成了3门领域驱动设计课程,并阅读了不少文章 这些文章定义了子域、有界上下文、泛在语言等。。。但大多数人认为域名的定义是理所当然的 到目前为止,我看到的唯一一个定义是域:数据+行为。域有更好的定义吗 每个软件程序都与用户的某些活动或兴趣有关。用户应用程序的主题区域是软件的领域。有些领域涉及现实世界:航空公司预订计划的领域涉及到真正的人乘坐真正的飞机。有些领域是无形的:会计程序的领域是货币和金融。软件领域通常与计算机无关,但也有例外:源代码控制系统的领域是软件开发本身Eric Evans,领

Domain driven design 有';技术';对事件源域模型建模时发生的事件?

目前,我正在为我的一个项目建模基于事件源的域逻辑 它基于CQRS,具有非规范化的sql读取端和写入端的事件流 我有一个要求,域的一个实体应该有某种状态属性(它基本上是一个枚举)状态可以通过两种方式进行更改:由系统用户直接更改或由于系统中的其他更改而更改。从域的角度来看,只有用户的更改才是真正的更改,因此对于其自身的事件,可以根据当前状态(其他属性)计算其他状态转换 但是状态属性在读取模型中至关重要。此外,系统应提供当前实体状态和所有历史状态。但为了做到这一点,看起来我需要所有状态转换的技术事件,

Domain driven design 如何发布none AggregateRoot对象的事件?

因此,我在一个microservices环境中使用NestJs和CQRS以及DDD,并将Eventstore和MySql作为数据库。在NestJS中,要发布事件,对象的类型必须是AggregateRoot。因此,我将在将其保存到数据库后返回的对象发布为AggregateRoot类型 我现在需要做的就是发布一个传入的请求,就像在事件中一样,其他服务将侦听该事件,而不需要它的类型为AggregateRoot 示例:我收到了一份订单到订单微服务,其中包含其他微服务所需的对象(如交付微服务和组装微服务)

Domain driven design 存储库应该进入哪一层?

存储库类应该放在哪一层?域还是基础设施?我想这取决于您将如何依赖它们 问题是-您是否允许自己从域内部使用存储库? 如果是这样,那么你就不得不把它们放进去 我自己喜欢把它们放在领域之外。所以-某些东西的典型生命周期如下=> UI=>Controller=>retrieve aggregate root from repo=>call logic through aggregate root=>如果创建了新的聚合根,则将其添加到repo 有时,控制器调用应用程序服务,该服务除了检索根目录和调用根目录

Domain driven design 通过域封装的持久性,还是通过存储库封装的持久性?

如果我的域模型不应该知道/关心存储库,那么封装CRUD更新的.UpdateOrder(…)等行为如何与存储库交互?通过域服务 好的,那么我的存储库有一个有效的CRUD更新,它与我的.UpdateOrder(…)一起使用。那很好。但是我不希望有人在存储库上使用Update方法,我希望他们在实体上进行操作(改为使用UpdateOrder()。我希望,与我的域模型满足不变量的方式类似——通过它的设计(私有集属性等)——我的存储库不公开另一种方法来“更新/持久化实体” 这仅仅是一个访问修饰符问题,我没有

Domain driven design 何时使用域事件与双重分派

我对何时使用域事件以及何时使用双重分派感到困惑。Udi鼓励我们使用域事件来保持模型的封装性,远离贫血设计,但我认为域事件只能在手术完成或突然结束后使用,而不能在手术进行时使用 例如:在解决一些业务逻辑时,我需要访问存储库,然后根据值,我可以引发域事件。但问题是模型如何在解决业务逻辑时访问存储库,在我看来,我们可以使用双重分派 请告诉我,以上陈述是否有效?已经有很多了 我个人对: 我自己的经验法则是,当交互可以单向进行时,使用域事件(由Udi指定)作为IoC的首选方式。如果不行,我就用双重调度

Domain driven design 使用EF 4.1,复杂类型能否引用实体(例如,在DDD中,值对象引用实体)?

我读到的似乎表明,在域驱动设计中,值对象引用实体是可以的,并且解释了如何在NHibernate中实现这一点 我想使用EntityFramework4.1做同样的事情:具体来说,让一个复杂类型引用另一个实体。作为一个例子,考虑一下:我有一个实体,例如,强>发票,它具有 >强> >类型货币< /强>的属性。strong>Currency是一种复杂类型,包含名为Value的decimal类型属性和CurrencyUnit类型的Unit属性CurrencyUnit是一个“参考数据实体”。也就是说,在这个

Domain driven design 获取域驱动设计中的关联聚合

我最近开始探索领域驱动设计,有一个问题。假设我的应用程序中有一个产品、类别、制造商域模型。产品如下所示: public class Product { int ProductId; string Title; string Description; double Price; int CategoryId; Category Category; Manufacturer Manufacturer; } 通常,在显示产品的详细视图上,会显示类别名称和制造商名称(而不是其ID)。

Domain driven design 使用什么软件进行事件风暴?

关于事件来源和领域驱动设计,我正在寻找一个好的软件解决方案,以帮助我的团队在事件风暴会议期间以电子方式对聚合进行建模 我曾考虑过简单的便笺应用程序,但它们还有很多需要改进的地方,比如保存和共享的能力 那么,您推荐什么样的事件风暴软件呢?一个“白板”怎么样?我发现创建一个背景为深灰色的非常大的图像并简单地在上面画画其实非常容易。其他开发人员能够将他们的想法添加到其中,并将其另存为。。。这样原始文件就不会被覆盖 这有意义吗?我想你只能得到自以为是的答案。你需要正确考虑的工具: 纸卷,最好是绘图仪卷,

Domain driven design 基于事件源的EDA微服务通信

我一直在读有关微服务和事件源的书,以及它如何将服务彼此分离。有两个概念我不清楚。首先,如果在微服务体系结构中,每个服务都可以独立开发,那么我们如何解释服务间的通信依赖性 例如,如果服务A和服务B需要通信,A需要向中央总线发送一个事件,B需要监听该事件并对其采取行动,但这似乎会产生很多依赖关系。现在,如果我正在开发服务B,我需要知道服务A可以生成的所有事件。此外,如果服务A添加任何新事件,服务B也需要更改以处理该新事件。所有这些似乎都在制造一个依赖性噩梦,并且似乎您无法真正“独立”开发每个服务 其

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