Domain driven design 回答问题的复杂方法的好地方

下面是一些示例代码,其中我们有一个方法可以回答“用户X可以查看产品Y吗?” 公共命名空间域 { 公共类用户 { ... 公共bool CanWriteReview(产品) { 返回此文件。我已批准 &&!Kernel.Get().userhasrevied(产品) &&!Kernel.Get(); } } } 我不喜欢在域POCO中使用此方法,因为它有太多无法注入的依赖项,必须直接从内核检索。你会把这种逻辑放在哪里 我发现,将依赖于域状态更改的类服务逻辑带出域是一种有用的方法。上述方法有类似的

Domain driven design CQRS/EventStore-将GUID传递到UI?

我目前正在使用J Oliver的EventStore,据我所知,它使用GUID作为流ID,这是用来构建聚合根的 从CQRS的角度和DDD的角度来看,我应该考虑域而不是GUI 因此,如果我执行GET(Mvc客户机),我说我的URL应该具有我的域对象(聚合根)的标识,并且从中我从读取存储中获取GUID,然后使用该GUID从事件存储中构建聚合根,这对吗 或者我应该将GUID传递给我的表单,并将它们作为隐藏的表单变量传递回去?至少这样我知道聚合根id,并且不必查询读取存储 我认为第一种方法是正确的(不在

Domain driven design 是否应将查找值建模为聚合根?

作为域模型的一部分,假设我有一个WorkItem对象。WorkItem对象与查找值有若干关系,例如: WorkItemType: 用户故事 臭虫 增强 优先级: 高 中等 低 可能还有更多,例如状态,严重性,等等 DDD声明,如果聚合根中存在某些内容,则不应尝试在聚合根之外访问它。所以,如果我希望能够添加新的工作项类型(如Task)或新的优先级(如Critical),那么这些查找值是否需要是具有自己存储库的聚合根?这似乎有点过分,尤其是当它们只是一对键值时。我应该如何允许用户修改这些值并

Domain driven design 有界上下文找到边界了吗?

在我当前的项目(电子商务网站)中,我们有不同的有界上下文,例如:结账过程中的账单、交付或付款 最重要的是,根据客户将购买什么,结账过程将有所不同。因此,根据她的购物车的内容,结帐过程中的步骤可能会有所不同,或者我们不会/将向她询问某些信息 那么,应该为每种不同类型的签出过程创建不同的有界上下文吗 例如,订单聚合根根据签出过程的不同而不同 EticketsOrder(在这种情况下,我们不需要送货地址,因此我们不会向用户索要送货地址) 票务地址 衣物订购(在这种情况下,我们需要一个送货地址,并且在结

Domain driven design 域模型-将子对象添加到父对象的正确方式是什么?

我有一个家长和孩子班。没有父对象,子对象就没有意义,我希望子对象有一个对父对象的引用 这是设置对子对象中的父对象的引用以及要添加到父对象上集合的子对象的引用的好方法吗?还是有更好的方法 public class Order { public Guid Id {get; private set;} public Name Id {get; private set;} IEnumberable<Item> Items {get; private set;}

Domain driven design 在ddd中,所有呼叫是否应通过聚合根路由?

想要对聚合进行操作的“用户/开发人员”应该只面对聚合根吗?那么,我想调用的每个方法是否都应该通过根“路由”到聚合中的一个实体上呢?这将使root拥有一个非常广泛的接口,其中包含大量枯燥的代码 或者允许它遍历和导航聚合,选择要处理的实体并直接在其上调用方法 或者我必须要求根用户给我实体(不允许从外部遍历和导航聚合),然后直接调用此实体上的方法?指定为聚合“根”的实体是网关守护者,因此所有方法调用都需要首先经过他。如果你仔细想想,这是有道理的。如果你分发了一个内部实体,你怎么能确定它是以预期的方式使

Domain driven design 聚合根的子级如何使用另一个聚合根的值 例如,考虑一个有多个菜单的商店。菜单列出项目,一个项目可以在多个菜单中列出

想象菜单聚合根和项目聚合根。菜单将包含一组菜单项,这些菜单项引用一个项目AR以及特定菜单中的订购信息 我的问题是,您如何从菜单项中访问商品的名称、价格和描述。比如说,菜单AR处理一个按价格重新排序的命令(我知道这听起来与UI有关,但我这里严格说的是域模型,idk可能是一个商业规则,菜单必须以特定的方式排序?) 是否在菜单项中获取项目AR的值对象?如果是这样的话,菜单AR是否会保存对域服务的引用以查找该项的值对象,或者菜单项是否会使用域服务 我想,菜单AR应该始终保持一致,这可能意味着当一个项添加

Domain driven design 域对象中的存储库

我看过很多关于这个话题的讨论,但是我没有得到一个令人信服的答案。一般的建议是不要在域对象中包含存储库。聚合根呢?赋予根操作组合对象的责任难道不是正确的吗? 例如,我有一个处理发票的微服务。发票是具有不同产品的聚合根。此服务不要求提供有关单个产品的详细信息。我有两个表,一个用于存储发票详细信息,另一个用于存储这些发票的产品。我有两个对应于表的存储库。我已经在invoice域对象中注入了产品存储库。这样做不对吗 是的,我认为这是错误的 域应该匹配真实的业务模型,而不应该关心数据是如何持久化的。即使内

Domain driven design 保持数据模型同步(MySQL和Neo4j)

昨天我看了Greg Young的一场精彩的多语言数据演讲 虽然我完全同意关键点,但并不是每件事都明确执行。 他在视频的给定部分提出的想法是,客户端必须保持自己的状态,这是合理的,但这是否意味着MySQL中应该有一个“主”记录,然后以事件的形式传播到Neo4j 这意味着我们必须在SQL中维护一个图形结构,不是吗?>。 他在视频的给定部分提出的想法是,客户端必须保持自己的状态,这是合理的,但这是否意味着MySQL中应该有一个“主”记录,然后以事件的形式传播到Neo4j 简短回答:是的——客户端处理器

Domain driven design 在域驱动设计中强制执行跨多个聚合的不变量(集合验证)

为了说明这个问题,我们使用了一个简单的例子:有两个集合-Lamp和Socket。必须始终执行以下业务规则:灯和插座不能同时连接多次。为了提供适当的命令,我们设想了一个连接器-服务,使用连接(灯、插座)-方法将其插入 因为我们希望遵守一个事务应该只涉及一个聚合的规则,所以不建议在Connect-事务中对两个聚合设置关联。因此,我们需要一个中间聚合,它象征着连接本身。因此,Connect-事务只需使用给定组件创建一个新的连接。不幸的是,在这一点上,麻烦开始了;如何确保连接状态的一致性?可能会发生这样

Domain driven design 事件寻源时,事件是否包含对当前对象及其依赖关系的更新?

在事件源中,写入系统的事件是否描述了对多个对象的更改?我试图理解如何记录N个项目的更改,而不会因为其他编写器而导致并发问题 背景 我的系统中有两种设置:全局设置和本地设置 有一个且正好有一个全局设置对象。这是由系统中的一小部分管理员控制的。有N个“本地”设置对象。这些都从全局设置继承其可用选项。版主使用这些控件来控制页面上的选项 为了进一步说明,全局设置对象指定了本地设置的内部内容。e、 g +------------------------+ +---------------------

Domain driven design 如何将验证规则放入存储库

我有一个包含验证规则的实体。它起作用了。但是,实体似乎不是存储此类规则的最佳位置,因为如果我有一个包含100个实体的列表,那么代码会运行100次,这似乎是不必要的 因此,在我看来,保存规则的更好地方是存储库。我为每个实体都有一个存储库,它是一个单例 但问题是如何做到这一点 import { type, Entity, validatedResource, association, resource, repository } from 'aurelia-orm'; import { Valida

Domain driven design 从事件存储中的事件流推断用户意图。这是正确的做法吗?

我们使用的是一个事件存储,它存储单个聚合-用户订单(想象一下,亚马逊订单可以在实际发送之前由客户或电子商务公司的某个人随时更新) 这是我们第一次允许公司员工查看订单的历史记录,因为到目前为止,他们只能看到订单的当前状态 我们现在意识到,组成聚合根的事件并没有真正显示用户的意图或实际操作。当顺序应用于空订单时,它们仅用于构建订单的当前状态。问题是:他们应该这样做吗 想象一个用户最初拥有一本书X,然后将其删除并再次添加2本。我们是否认为这是一个事件“用户添加1本书”或事件“用户删除1本书”+“用户添

Domain driven design 指挥还是不指挥,这是个问题

我对CQRS还不熟悉,但我能看到其中的价值,所以我尝试将其应用到我们正忙于重建的金融系统中 正如我提到的,这是一个基本的fin系统,具有基本的余额、取款、存款等功能 我有取款和存款命令。但我正在努力平衡 根据领域专家的说法,他们希望将余额作为一项交易来处理,而不涉及任何财务问题(目前),代表客户。因此,当客户端通过设备执行余额inq时,它会创建一个事务,但同时也会创建一个余额查询 在CQRS世界中,您可以区分改变状态的命令和以某种方式检索数据的查询 如果我的理解有缺陷,我道歉。有人能给我指出正确

Domain driven design DDD中对象连接的建模

假设我有两个班: 命令 订单项 从DDD的角度来看,正确的连接是什么 OrderItem包含引用订单的字段 具有字段的订单-OrderItems集合 引用另一个对象的字段是否被解释为依赖项 我试图更好地理解DDD。谢谢。 < P>我将在这里假设,并将您的订单类看作是聚合根。 在这种情况下,您将使用选项2,这意味着订单将包含OrderItems的集合。和OrderItems只能通过Order聚合根添加,即通过Order.AddOrderItem()方法添加

Domain driven design 是一个;域对象“;任何表示业务规则的类?

我偶然发现了“域对象”这个术语,并在Google上找到了一些定义,但我只是想验证我的理解是否正确 这仅仅是表示业务规则的任何类吗?因为“域”一词通常意味着特定于某些本地问题集的规则,例如如何计算所得税 因此,用于计算所得税的域对象将是您编写的表示所有税收规则的类。这将是一个域服务。域对象将类似于收入或纳税人。该对象可以有一个Taxes属性,该属性调用域服务以根据规则计算应付税款。域对象是表示业务域中给定实体的任何对象。这有几种口味。然而,一般来说,域对象保存数据和任何正在建模的实体的规则。有些人

Domain driven design 有没有好的实践领域驱动的设计课程?

我一直在自己的时间里深入研究DDD;阅读关于它的所有内容,在这里或那里做一些小项目,但我缺少的一件事是向对它有深刻理解和经验的人学习和合作 有什么好的课程可以让我获得一些这样的经验吗? 查看主页。右边是即将到来的亲身体验“沉浸式”活动的时间表。根据您或您的公司的(金钱)承诺水平,您可以退房。如果您对课堂培训感兴趣,也可以退房(我是培训提供商)。

Domain driven design DDD:在哪里创建实体对象?

我有三个必须交互的实体:User、SupportTicket和PhoneConversation。当有人打电话请求帮助时,应为用户分配一张支持票证,并为该票证分配一个电话对话来描述该呼叫 我的问题是:我应该将方法CreatePhoneSupportTicket()放在哪个实体中,该方法创建一个新的SupportTicket和一个PhoneConversation,将它们相互关联,最后将SupportTicket与用户关联 我猜它不可能在用户身上,因为这会违反SRP(用户会做更多的事情)。但是这个

Domain driven design 什么';这是一个在UML中被称为排他性的弧

这是一个什么是排他性弧的例子(绿色弧);它的意思是飞机可以有螺旋桨或喷气发动机,但不能两者兼有 在巴克记数法中,一种排除 对两个或多个角色的约束是无效的 显示为连接的“专用弧” 给角色加上一个小点或 圈 见(第2页) 顺便问一下,你们能用DDD付款吗?(如果它们是UML的一部分,我假设您可以这样做) 编辑-我关于DDD的问题有点误导,我把它放在事后思考中,但@sfinines的回答提出了另一个有效的问题,我将单独提出(在一些研究之后) 不确定“受DDD支持”是什么意思 DDD本身并不提供建模

Domain driven design DDD-应如何处理查找实体?

我们正在进行一个使用DDD的项目,但却被困在如何处理查找实体上。 例如,我们有一个名为“Customer”的聚合,实体“Customer”也是聚合根。实体“Customer”具有属性“CustomerTypeID” 但是我们还有一个实体“CustomerType”,它代表所有现有的客户类型(ID和描述)。将有一个管理功能,允许用户维护客户类型(即添加新的客户类型等) 请注意,我说的不是更改特定客户的客户类型,而是维护客户类型列表 我为这个冗长的故事道歉,但以下是我的问题: 我认为“Custom

Domain driven design CQRS&;DDD-使用cqrs读取模型验证域模型业务规则

我是DDD和CQRS模式的新手,我想听听您对如何验证域实体的看法。 我将使用常见的示例Order->OrderLine,其中Order是AR 聚合中业务规则的验证是通过AR进行的,以确保一致性。 如何验证需要订单集合之外的数据的业务规则 我也在使用CQRS方法,我认为使用ReadModel获取验证业务规则所需的数据并不是一个坏选择……您认为如何?是的,使用read模型进行命令验证。我称之为“命令上下文”——世界的当前状态,根据它命令可能有效或无效。在CQRS中,世界的当前状态在您的读取模型中表示

Domain driven design 在DDD应用程序中持久化特定于应用程序的数据

我参与了一个项目,为可以描述为规则引擎的东西构建一个webapp,我们使用DDD方法来捕获和建模域和功能 但是与应用程序相关的数据呢,因为它是一个web应用程序,所以在安全/用户管理、日志管理方面会有很大一部分。等等,不属于域的杂项,但需要为其管理数据。通过对DDD范例的初步阅读,我们对域模型和通过存储库的持久性有了一个大致的了解。我的理解是,应用程序服务层中应包含特定于应用程序的问题,如安全性、txn管理等 在这种情况下,特定于应用程序的数据在何处/如何持久化?这也应该被建模为不同的聚合,并以

Domain driven design 聚合中的域驱动设计和本地标识

在域驱动的设计中,有一个引用内部实体的聚合根 聚合根是具有全局标识的实体(每个人都可以使用其id)。聚合根具有指向本地对象(实体)的链接 假设这里的实体是Hibernate@Entities(比方说) 假设我们有聚合根“User”,其中包含“Address”实体作为对象(实际上也是一个实体) 问题是: 如何使本地实体仅具有本地标识。我的意思是,没有任何障碍可以阻止任何人通过其ID使用本地实体(如地址)。(因此,这种身份根本不是本地的,而是全球的)。那么,如何使其成为本地的呢?所有实体,包括根,都

Domain driven design 如何访问另一个聚合中的实体?

我正在尝试使用DDD对场景进行建模,我们有团队、开发人员和团队应该完成的任务 基本上,我假设如下: 团队是一个可以改变的实体,例如通过让新的开发人员加入进来 开发者是一个实体,重要的是哪个开发者做了什么 故事是一个可以更改的实体,例如通过在故事中预订工作项 工作是一个价值对象,因为一旦完成,它就不能改变 很明显,团队是一个集合,包含开发人员实体。此外,故事是一个集合,包含工作值对象 因此,在开始时,我从以下代码开始: var team = Team.FoundTeam(); team.Welco

Domain driven design 在域层中公开IUnitOfWork接口违反持久性忽略规则?

1) 在大多数情况下,每个聚合根都应该定义自己的事务边界,在这种情况下,我们不需要在域层中公开IUnitOfWork接口 a) 我假设在这种情况下,一个好的选择是存储库(由聚合使用以强制不变量应用于其中)包含自己的UoW实例(如果使用EF,那么这个UoW实例可以是DbContext)类型 (二) a) 但是,如果由于任何原因,事务跨越多个聚合(因此一次需要更改多个聚合),那么域层是否也需要包含IUnitOfWork接口 b) 在域层中公开IUnitOfWork接口是否会违反持久性忽略规则 c)

Domain driven design 以数据为中心的流程中的CQR

我有一个关于以数据为中心的流程中CQR的问题。让我解释清楚。 考虑到我们有一个SOAP/JSON/任何服务,它在集成过程中将一些数据传送给我们的系统。据说,在CQR中,如果使用事件源,则必须通过命令或事件实现每个状态更改 当涉及到我们的集成过程时,我们得到了大量结构化数据,而不是一组命令/事件,我想知道如何实际处理这些数据 // Some Façade service class SomeService { $_someService; public function __co

Domain driven design 两个应用程序之间共享的DDD实体

假设我有一个对象,对于两个不同的应用程序,该对象大部分都有必要的属性等,因为两个应用程序都需要使用它们。10%的属性可能不会在一个应用程序中使用。作为共享内核共享该对象和聚合/绑定上下文是否更好?或者复制存储的属性和数据?一个应用程序用于最终用户/活动,另一个应用程序用于管理用户/活动 实体通常不在BC之间共享。你可能有另一个BC在游戏中。您应该有一个BC,它是实体的记录系统。所有其他BC应位于其下游,且仅包含标识和相关数据位。通常情况下,可以使用事件驱动的体系结构来通知相关系统有关实体状态的任

Domain driven design 在实际项目中实施DDD的步骤

在介绍域驱动设计之后,我意识到DDD关注的是业务模型,而不是任何特定的框架/语言/或技术。作为一个数据驱动的思维定势持有者,我正在努力确定在实际项目中实施DDD的步骤。我想知道现实世界中DDD实现的实际步骤是什么。例如: class CreateNewPost { protected $userId; protected $postTitle; protected $postBody; public function __construct(UserId $id

Domain driven design 如何在DDD中建立瞬态模型?

我的第一个领域驱动设计项目刚刚起步。该项目的域模型涉及一个有界上下文,该上下文处理三维场景中移动几何体的碰撞检测 业务逻辑的核心部分是冲突检测算法,也称为CollisionDetector。算法必须配置一些影响其行为和性能的参数。所以它有一些附加的状态,让我首先把它看作一个实体,或者更确切地说是一个集合。请注意,不需要将该实体持久化到DB—它的所有参数值都是瞬态的。还要注意,域中只存在一个CollisionDetector实例,因此实现一个内存中的存储库来访问单个聚合对我来说似乎有点过头了 总的

Domain driven design DDD、微服务和数据方向

让我们假设我有身份管理有界上下文和讨论有界上下文。每一项都是独立的微服务 身份有用户,讨论有主持人 如果我在身份绑定上下文中更新名字和姓氏,我的计划是向Amazon SQS发布一条消息,让讨论绑定上下文侦听队列中的任何更改,并通过反腐败层更新讨论上下文中的名字和姓氏 我的问题是,如果我决定在讨论中改变名字和姓氏,会怎么样?我的身份证B是否也应该注意这种变化,或者双向沟通被认为不是一种好的做法,我应该始终更新身份证B中的信息?人们如何更改自己的姓名 我会尝试在一个地方允许这样做,并让该上下文拥有数

Domain driven design 外部数据映射到域

我觉得我指的是上下文映射和反腐败层的DDD主题,但我不确定如何解决它 如何从外部数据源构造/映射域对象 例如,可能有多个数据源、数据库、文件和外部服务。由于我试图构建尽可能类似于洋葱的体系结构,这意味着我的域没有依赖性。基础设施具体取决于域,基础设施实现域接口 如果基础架构必须依赖于域而不是域,那么这是否意味着外部数据映射应该在存储库中完成 若通过构造函数创建对象被视为业务逻辑,不应该泄漏到域之外的任何地方,那个么如何将外部数据映射到域对象?反射其他方式?也许我误解了整个概念 如果域对象创建需要

Domain driven design 我是否正确地设计和构建我的价值对象?

如果这个问题不清楚,请提前道歉。请告诉我如何改变,使之成为一个更好的问题 我目前正在维护一个C WinForm系统,我正在尝试学习和使用DDD和CQRS原理。Vaughn Vernon的实现领域驱动设计是我的主要DDD参考文献。 该系统目前使用传统代码,该代码使用数据感知控件。 在资产库存上下文中,我设计了我的聚合根资产,它由多个ValueObject组成,这些ValueObject是系统中的标准条目: 在此上下文中,我尝试实现一个用例,用户可以手动向系统注册资产 我目前的执行情况如下: 从表示

Domain driven design 聚合根中的子实体的用途是什么?

[此问题和评论的后续行动:] 正如标题所说:我不清楚作为一个孩子,实体的实际/确切目的是什么 根据我在许多地方读到的内容,这些是聚合子实体的属性: 它具有要聚合的本地标识 它不能直接访问,只能通过聚合根进行访问 它应该有方法 它不应暴露在骨料中 在我看来,这意味着几个问题: 实体应该是聚合的私有实体 我们需要一个只读复制值对象来公开实体中的信息(例如,至少对于存储库来说,为了保存到数据库,它能够读取信息) 我们在实体上拥有的方法在聚合上是重复的(反之亦然,我们必须在聚合上拥有的处理实体的方法在实

Domain driven design 如何命名一个事件,描述对事件源系统中实体存在的确认?

我是活动采购新手,我正在考虑将其用于工业应用程序,以跟踪生产设施中发生的事件 由于记录簿是生产设施本身,而不是系统,也因为并非所有东西都是自动化的,工人需要在给定的时间点报告记录的时间,他们在另一个时间点(有效时间)所做的事情。因此,我将使用事件,例如:TankFilled记录、TankOutputConnectedToPipeInputRecorded、ContainerMovedTofIlityAreaRecorded等。这些事件指的是实体,例如储罐、管道或设施区域。这些事件将同时具有记录时

Domain driven design 用户聊天信息应该是聚合的吗?

在对典型的聊天应用程序(具有无限聊天)建模时,是否应将每条消息视为聚合实例 聚合应该保持小,并且不能想到其他合适的小候选来包含用户消息。但同时,我只是想知道,我应该为系统中这样一个小对象使用聚合概念 是否应将每条消息视为聚合实例 这是一个好问题,但问错了人,因为我们不了解您的业务:) 聚合是事务对象边界的同义词 一致性。[…]正确设计的骨料是可以 以业务需要的方式进行修改,同时提供 业务规则作为单个事务的一部分保持一致。[...] 聚合主要涉及一致性边界及其设计 不应受创建对象图的需要的控制。[

Domain driven design 在域驱动设计应用程序中拉入刷新

我需要在iOS应用程序中实现pull-to-refresh,我遇到了这个问题,我不知道如何用DDD的最佳实践来解决这个问题 表示层有一个事件来刷新列表,这需要更新结果,丢弃缓存并从后端获取元素 在域层,我的用例与存储库对话,但是,由于缓存是一个实现细节,存储库接口不公开“cleanCache”方法,因此没有从用例刷新缓存的干净方法。 这或多或少是我的文件结构 领域 GetAllTodosUseCase TodosRepository(接口) 基础设施 InMemoryTodosReposi

Domain driven design DDD、存储库和;封装

如果有人认为这是被打死的,我提前道歉。我刚刚花了几个小时在这里搜索和阅读了很多优秀的帖子,但我仍然感到困惑 我的困惑源于DTO与DDD和存储库。我希望我的POCO域对象具有smarts,并希望从存储库中获取它们。但似乎我必须违反一些封装规则才能使其正常工作,而且似乎这会将DTO的头转到他们的头上 这里有一个简单的例子:在我们的目录应用程序中,一个部件可以是包含许多其他部件的包。因此,Part POCO有一个返回IEnumerable的“GetChildren()”方法是有意义的。它甚至可能会做一

Domain driven design 如何从DDD中的根目录创建此组件?

我有一个关于如何使用DDD解决以下场景的问题 我有两个具有一对多关系的实体Person和Email。一个人可以有零个或多个电子邮件地址 Person是作为组件的电子邮件的聚合根 class Person{ Set<Email> emails = new HashSet<Email> } Class Email { String value; Email(String value){ } } 我个人认为,一个名为setEmail()的方法

Domain driven design 为什么允许在以后的某个时间强制执行跨聚合的一致性规则?

发件人: 不变量,是必须维护的一致性规则 当数据更改时,将涉及 总量。任何跨越聚合的规则都不应 始终保持最新。通过事件处理、批处理 处理或其他更新机制时,可以使用其他依赖项 在指定的时间内解决。但不变量应用于 每次交易完成后将强制执行聚合 a) 我将其解释为,设计用于维护多个聚合之间一致性的规则不必在其中一个聚合将其更改保存到某个持久性存储时强制执行,而是可以在该聚合已完成其持久性存储事务的某个稍后时间强制执行 b) 但是,既然这样会导致数据不一致/损坏,为什么还要容忍这种行为呢 谢谢你。对的聚

Domain driven design 关于表示与引用和存储库的关系,很少有令人困惑的事情

•我们可以通过对象引用表达两个实体之间的关联(尽管聚合根与其内部实体之间的关系也可以通过根-->SomeRootEnt.BorrowMeIntEnt(…))上定义的方法或通过存储库表达,它将从数据库中检索相关实体 •当关系通过存储库表示时,客户将直接调用存储库以获取相关实体 •关于如何表达关系的决定取决于是否需要这种关系来保持完整性(也许还取决于行为是否需要关联才能表达自己) 1) 如果关系(例如1:)是通过存储库表示的,那么子实体是否需要包含父实体的ID(注意:这个问题假设至少有一个父实体是根

Domain driven design 聚合不变量是否可以包含基于其他地方信息的规则?

在DDD中,聚合不变量是否可以包含基于另一个聚合中的信息的规则?现在我不这么认为,但是这给我带来了一个问题,我不知道如何解决它 我有一个名为资产(设备)的实体,我将其建模为聚合的根。它有一个标签(属性)列表,描述制造商、型号等。它存储称为AssetType的第二个聚合的标识,AssetType有一个标签类型列表,其中一些可以标记为必需的 现在,我觉得Asset的一个不变条件应该引用关联的AssetType,以强制强制强制标记列表中的非空值。但我的内心充满了如何加强一致性的想法 这是否意味着总量真

Domain driven design 如何在RavenDB中存储对任意实体的引用?

我需要在Raven数据库中存储对实体的任意引用。有时该实体是聚合根(请参见下面的事件),有时则是值实体(请参见下面的会话)。我目前正计划将引用存储为Lucene查询(或类似Lucene的语法)。有人这样做过吗?我是否在走一条艰难的道路 我关注的一些问题是: 值实体不太可能提供标识符,我可以期望可靠地引用值实体吗 单个实体应该不知道(与之分离)任意关系基础设施,从复杂对象图推断查询的最佳方法是什么 将关系限制为仅聚合根(并防止引用值实体)可以简化问题,但这需要我重新构造事件/会话文档。我希望这两

Domain driven design 领域模型-设计模型

关于领域驱动设计: 我有域模型、存储库和服务。我的问题是关于域的建模 例如,我有一个包含Employee、CountryId、State Id的数据库表 我将如何建模我的域对象,我将使用id还是文字值来建模它 在什么情况下,我会将Id值解析为文本值 我应该使用这些服务来指向存储库的CRUD操作,还是这是一种反模式 非常感谢您的帮助。我将如何建模我的域对象,是用id还是用文字值建模 id是域的一部分还是仅由关系数据库使用?在后一种情况下,您不会使用id进行建模。严格来说,您也不允许在实体中存储id

Domain driven design 通过复合标识到聚合根目录内实体的DDD导航

我有一个聚合根Products,其中包含一个实体列表选择,而该列表又包含一个名为功能的实体列表 聚合根Product的标识仅为name 实体选择具有名称标识(及其相应的产品标识) 实体功能具有名称标识(以及相应的选择标识) 其中实体的标识构建如下: var productId = new ProductId("dedisvr"); var selectionId = new SelectionId("os",productId); var featureId = new FeatureId(

Domain driven design NoSql(Mongo DB)中的CQRS读取模型

嗨,这是我第一次使用DDD/CQRS。我读过很多知识来源,但我还是有点困惑,也许有人能帮我:) 让我们假设一个简单的情况,即我们有产品和客户机(可能有不同的有界上下文)。 客户可以购买产品,他希望看到他购买的所有产品 在这种情况下,我意识到我需要一个UserPurchasesView视图模型,其中包含: purchaseId(是mongo主键) 用户ID 产品:{id、名称、图像、简短描述,[可能还有其他]} 奖品 时间戳 现在。。。问题是我的域正在生成一个类似于UserPurchasedP

Domain driven design 使用事件源的多个写方?

当使用带有聚合的事件源作为事务范围时,您显然更喜欢将该聚合放在一台机器上。但是,如果您还想构建一个高可用性和水平可伸缩的系统,那么您还需要在不同数据库的许多机器上复制这种状态 如果在任何给定时刻只允许网络中的一台机器上有一个写端,那么其他机器最终可以是一致的读端。但是为了最大限度地提高写性能,我想最好同时允许多个写端。但在这样一个系统中,如何处理一致性和共识 当两台或多台计算机希望同时更新公共但已复制的状态时,如何确保所有写入方以相同的顺序处理命令,以便生成的事件相同且顺序相同?兰波特时钟是解决

Domain driven design 将更新的数据从一个聚合根填充到另一个聚合根的最佳方法是什么?

我试图理解从一个Aggregare根到另一个Aggregare根填充属性的最佳方法是什么 我有模型聚合根,类别聚合根,过滤器聚合根 每个模型都可以有一些过滤器列表,并且可以属于类别之一类别可以有一个过滤器,用于继承到模型。更新模型的类别属性时,过滤器必须从类别继承到模型,更新类别中的过滤器属性时,该类别中的所有模型必须继承新值。无法更新所有继承的过滤器,但可以编辑手动添加的过滤器 我“发明”的一种方法是使用流程管理器,其状态包含类别过滤器和模型列表 所以我会有这样的行为: 类别ARUpdateC

Domain driven design DDD:本地实体标识是否应包括母公司';s

在DDD中,实体具有唯一标识每个实例的标识概念,而不考虑所有其他属性。通常,该身份在实体所在的BC中必须是唯一的,但有一个例外 有时我们需要创建聚合,这些聚合不仅由根实体和一些值对象组成,而且还具有一个或多个子/嵌套实体(我理解为称为局部实体)。对于此类实体,标识只需在局部唯一,即在聚合边界中唯一 考虑到这一点,让我们考虑一个事实,即根据实际业务需求,在DDD中建立HAS-A关系的两种方式:单独的聚合或聚合根+子实体。 在第一种情况下,关系的“子”聚合引用父对象的标识,而父对象的标识通常有一个工

Domain driven design 我应该如何处理多个聚合根交互

我读过这篇文章,在这篇文章中,Udi Dahan谈到了多对多的关系。 在这个例子中,他解释说,在多对多关系的情况下,比如一个作业与作业板之间的关系,并且考虑到向作业板添加作业的有界上下文,聚合根将是作业板,您只需将作业添加到其中。 在评论部分,他还解释了在不同的有界上下文中,作业将是聚合根,这是有意义的,因为作业可以在没有作业板的情况下存在,并且可以对作业执行许多操作,这些操作不会影响作业板。 我有一个类似的问题,但我似乎不知道这将如何解决。我有两个问题: 如果我们需要删除一个作业,看起来取决于

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