Domain driven design 在DDD中如何处理聚合根的删除?

我有两个集合根,一个集合根引用另一个集合根(第一个通过第二个集合根的标识引用第二个集合根) 现在,来自我的应用层(通过MVC asp.net)的命令删除了我的第二个聚合根 在删除根目录时,我是否发送一个域事件,告诉第一个聚合根目录“NULL”对现在不存在的第二个聚合目录的引用 JD你走错了路。从您面临的技术问题后退一步。首先,我怀疑在你无处不在的语言中是否存在“删除”这样的东西。最有可能的人会称之为“归档”、“无序”、“删除”、“缺货”。。。表示特定骨料处于其生命周期末尾的术语。当领域专家谈到这

Domain driven design 如何使用领域驱动设计对需求进行建模

我有一个需求,我需要根据特定的标准将两个事件分组为一个事务。下面是关于该要求的一些想法 事件:: 我们将不断地向我们的系统接收事件 每个事件将有一些缓冲时间与其他事件分组 如果缓冲时间已过,则需要丢弃该事件 我们需要根据两个事件的信息将两个事件分为一组 如果事件信息不足,我们将向其他组件发送事件信息,该组件将使用更正的数据进行响应 每当我们对事件进行分组时,如果相关事件转到数据更正组件,我们希望保留另一个事件,即使我们不能100%确定匹配条件。我们之所以要执行此步骤,是因为我们希望尽可能多地匹配

Domain driven design 具有副作用的事件来源

我正在使用熟悉的事件源模式构建服务: 收到请求 将加载聚合的历史记录 将(根据其历史)重新生成聚合 准备新事件并更新聚合以响应来自步骤1的传入请求 这些事件将写入日志,并可供任何订阅者使用(发布) 在我的例子中,步骤5分两部分完成。事件将写入事件日志。后台进程从事件日志中读取并发布从偏移开始的所有事件 在某些情况下,除了与聚合相关的事件之外,我还需要发布副作用。就系统而言,这些也是事件,因为它们被其他服务消耗并影响其他服务的状态。但是,它们不会影响此服务中聚合的历史记录,并且不需要重建它 我应该

Domain driven design 有界上下文中有多少侦听器可以订阅特定域事件?

对于一个特定的域事件可以订阅多少侦听器的最佳策略,我有一个疑问 假设我们有一个名为UserWasCreated的域事件,当在有界上下文a中创建新用户时,该事件将被发布。假设我们有另一个有界上下文B订阅该事件,在该事件中,我们必须执行许多任务,例如:发送电子邮件,保存用户的某些信息并将用户信息推送到外部服务(即CRM) 我的问题是,在同一个有界上下文中,我应该为该事件拥有多少侦听器 我看过Vernon的IDDD书,每个事件只有一个监听器,像这样UserWasCreatedListener。但那个听

Domain driven design 如何区分实体和ValueObject?

如何区分实体和ValueObject 对于我最近使用DDD的项目,我经常被这两个问题弄糊涂 实体和VO是什么 责任 实体和VO是否应该包含任何逻辑,如日期解析、按字段返回bool 我还希望这是一种简单的经验法则,可以确定您的新模型是实体还是值对象 就我个人而言,我使用以下问题: 我的模型中是否有任何属性,它的变化历史很重要 如果是,则我的模型更可能是一个实体 如果否,则我的模型更有可能是ValueObject 因此,在示例中使用它,Person模型取决于我们的域(逻辑/业务),它的Fir

Domain driven design “大家都在哪里?”;散装;业务属于DDD?

在DDD中,关键概念之一是Repository,它允许您检索实体(或聚合根),然后在更新后将其保存回去 假设我们需要对实体执行一些“批量”操作,而实体的数量使得将它们检索到内存中是绝对不可能的。即只能在数据库中执行操作 这种“批量”操作的地点在哪里?它应该是存储库上的方法吗?它不会用特定于数据库的操作“泄漏”存储库抽象吗?它不会将业务操作从实体移动到存储库吗 void DoLongInvolvedTask(); 我认为将批量任务作为方法放在存储库中没有任何错误。他们不会泄露任何东西。拥有批量操

Domain driven design DDD-构建存储库

如果我有一个用于获取聚合根(由Eric Evans DDD定义)的存储库,例如一个订单实体(根聚合),它将OrderLine对象作为子对象 在某些情况下,我只想检索顶级对象,即没有订单行的订单,在其他情况下,我想返回更多,可能是向下两级,等等,即订单和相关订单行 订单/订单行场景是一个简单的例子,但如果我的聚合根比这个更深,可能会下降3或4个级别,该怎么办 将其构建到存储库中(使用即时加载)的最佳/公认方法是什么?不太清楚聚合根是什么意思。据我所知,存储库模式通常适用于作为域模型一部分的对象集群

Domain driven design 与应用程序行为相关的组件在哪里适合DDD?

如果我正在使用DDD开发一个应用程序,那么基础结构和行为组件去了哪里?例如,用户管理、用户特定配置、权限、应用程序菜单等 这些组件实际上与我的域所满足的业务需求无关,但它们仍然是我的应用程序所必需的元素。它们中的许多还需要持久性。在项目中有非域组件和域是很正常的,毕竟不是所有东西都是面向业务域的。它们的归属实际上取决于您如何构建解决方案。在大多数情况下,我倾向于遵循,因此我所有的逻辑都是由应用程序服务提供的,不管它是面向域的还是面向非域的。如果您发现您的用例很少需要来自与特定应用程序相结合的核心

Domain driven design 具有标识的值对象

在一个应用程序中,我们将公司建模为一个实体,将地址建模为一个值对象: public class Company : Entity { public Address PrimaryAddress { get; set; } public Address SecondaryAddress { get; set; } } public class Address : ValueObject { public string ZipCode { get; private set

Domain driven design 如何正确实施反腐败层

我从DDD哲学开始,我想实现与我们这里的遗留系统的集成。在我在互联网上的研究中,我发现了一些文章和样本,但我必须承认:很难理解如何正确地进行集成 在提出这个问题之前,我在这里进行了搜索,但是搜索结果对我来说没有用处,所以我想知道是否可以发送或向我展示ACL的实现示例 我这里有以下项目: 遗留系统 遗留数据库(我需要访问) 将使用DDD方法创建的新应用程序 最初的想法是通过NHibernate访问该数据库,只创建一些所需的映射类、域实体并实现业务规则。根据埃里克·埃文斯(Eric Evans)

Domain driven design 在处理非幂等调用时是否应该使用事件设计?

我在做一个机票预订项目 下图显示了我们目前开发的领域模型 我们定义了一个域服务(AirBookService),它封装了预订、票务和其他操作。我们的供应商提供远程过程调用api来处理这些请求,因此我们通过添加反腐败层(我们有多个供应商)来实现域服务 此解决方案在处理无效rpc调用(如获取价格)时效果良好。但是,在处理非imdenpower rpc调用时存在风险 比如说 public class TransactionalReservationHandlingServiceImpl .... {

Domain driven design CommonDomain和NEventStore

我目前正在使用CommonDomain,目前效果很好,但我有几个问题: CommonDomain是否仍在积极维护?我在GitHub上看到最后一项工作是在大约2年前完成的: 如果正在维护,是否有计划升级CommonDomain以与NEventStore 5合作 将“NEventStore 4.0.0.15”更新为“NEventStore 5.0.1.2”失败。找不到与“NEventStore 5.0.1.2”兼容的“CommonDomain”版本 非常感谢CommonDomain现在正作为NEve

Domain driven design DDD/CQRS查询事件

我在看一篇关于使用事件源/DDD/CQRS方法设计的应用程序中的查询的帖子 据我所知,事件是对域对象状态的更改。对状态的更改将作为历史记录/事件保存在数据库中(任何sql/无sql) 若用户希望查询以获取特定聚合根的当前状态,则需要获取事件的历史记录 当用户查询特定于业务的查询时,他/她将感兴趣的是当前状态,而不是事件的历史 CQRS中的查询或“Q”部分如何与事件源一起工作 假设我有一个域对象“Account”作为聚合根。账户应收账款将经历许多变化,即贷记和借记。事件存储将具有贷记和借记事件 考

Domain driven design 以事务方式持久化聚合和分派事件

有谁能推荐2阶段提交的替代方案,使聚合的持久性与非事件源DDD应用程序中相关域事件的调度发生在同一事务中 我尝试过的一种方法是在同一ACID RDBMS实例中持久化聚合和异步事件,然后让流程轮询事件进行处理。只要您不需要几个RDBMS实例或非ACID数据库作为写存储,这种方法就可以很好地工作。您参考的文章的可能副本确实回答了我的问题。非常感谢。

Domain driven design 面向新手的领域驱动设计实体建议

我正在努力学习领域驱动设计。目前,我正在为一个虚拟的个人项目构建一个上下文映射,该项目旨在存储有关客户和潜在客户的信息(还有一个电子邮件模板引擎和一些其他信息) 我遇到了一个小小的障碍;我遇到的问题是,我创建了一个有限的上下文来存储有关客户和公司的信息。有两种类型的客户,分包的代理客户和最终客户 我不确定是否应该将其建模为具有客户机类型值类型的客户机,还是作为客户机和代理客户机的独立域实体?如有任何建议,将不胜感激 请注意 上面的图表不完整,因此缺少一些链接。如果我在这里做了一些明显的错误,

Domain driven design “的含义;“实体”;领域内驱动设计

今天我参加了一个网络研讨会,与会者是一位非常著名和受人尊敬的作家、讲师,也是软件工程、架构和设计方面的专家。网络研讨会的主题是“增量架构”。这位知名人士指出,DDD中的实体概念与数据库中的实体概念无关。埃里克·埃文斯在其2003年的原著中不幸地选择了这个词。我对他的解释不满意,我发现他的陈述可能会让任何试图在设计中使用DDD的人感到非常困惑 我的问题:DDD中实体一词的确切含义是什么如果它不是数据库、ORM框架、JPA、开发框架(Spring)等中非常好理解和定义的实体概念 广泛研究软件架构 这

Domain driven design DDD-一个非常简单的博客模型中的聚合根

作为练习,我正在尝试使用DDD在.NET中创建一个简单的博客应用程序。到目前为止,我有用户、主题和评论类。但问题是如何将评论与用户和主题联系起来?如果我说用户和主题是聚合根,那么评论属于哪里?聚合可能与其他聚合根有关联 e、 评论可能与主题和用户都有关联。 不管怎样,这就是我建模的方式,聚合根是一致性的边界。 一个主题不需要与它的评论在任何方面保持一致,因此评论不需要成为该聚合的一部分。 用户不需要与他或她的所有评论保持一致,因此用户也不需要了解评论 我将通过评论库获取特定主题的评论。 e、 g

Domain driven design 我们真的需要一个具有事件源和CQRS模式的独立事件存储吗?

假设我们需要实现一些需要检查对象历史(事件存储)的域规则。例如,我们有一个具有CurrentStatus属性的Order对象,我们需要检查Order.CurrentStatus更改历史记录 您很可能会回答,我需要将此知识转移到域中,并引入Order.StatusHistory属性,该属性包含状态记录的集合,并且我不应该查询事件存储。我同意你的看法 我想问的是事件存储的需求 我们在事件存储中写入具有业务意义的事件(域值),我们不记录UserMovedMouse事件(在大多数情况下)。与OrderS

Domain driven design 对于DDD中的域模型中使用的这些类型的对象,我们应该调用什么?

我试图找到一个解决这个命名问题的方法,但是我在网上找不到类似的用法。它可能是我们在域模型中有一个设计流,或者我们只是没有为所谓的“ValueObjects”使用合适的名称 请阅读下面的内容 我们使用领域驱动设计和CQRS模式。下面是如何设计域模型的 另外,我们的应用程序使用ASP.NET MVC和控制器与服务层进行通信,仅供参考。DTO(数据传输对象)被传入/传出到MVC控制器,这不在上图中 问题是我们没有正确使用“ValueObject”。根据Martin Fowler的定义,我们的Valu

Domain driven design 这对一个班级来说是不是太多的责任?

我得到一个命令:MovePlayerCommand 此命令的验证程序之一执行3项操作: 计算玩家移动的成本(可用于验证,也可用于显示) 验证此成本 收听“PlayerMoved”活动,以便我们可以应用成本(例如-10个行动点) 这对一个班级来说是不是太多的责任?如果是这样的话,你会如何区分这一点 编辑:我知道删除成本和检查成本是两件事,但我不能将它们与成本计算分开,我不希望每个操作有3个类如果没有更多信息,就不可能明确回答 也就是说,你所描述的听起来不像一个验证器;它听起来像是某种“计算器”

Domain driven design 多版本并发控制与CQRS和DDD

为了支持脱机客户机,我想评估如何使用CQRS-DDD系统来适应多版本并发控制 从CouchDB学习时,我很想为每个实体提供一个版本字段。但是,还有其他版本的并发算法,如。这让我想到,也许,我不应该为每个实体和/或事件公开这个版本概念 不幸的是,我所看到的大多数实现都是基于软件在单个服务器上运行的假设,其中事件的时间戳来自一个可靠的源。但是,如果某些事件是远程和脱机生成的,则本地客户端时钟偏移存在问题。在这种情况下,正常的时间戳似乎不是排序事件的可靠来源 这是否迫使我评估某种形式的解决方案,而不是

Domain driven design 具有事件源的层次结构

在使用事件源时,是否有人能就如何在分层域模型中组织实体、聚合根等提供建议 项目有资产。资产是一个层次结构。每个资产都有一组数据(级别包含一组类别,类别包含一组项目等)。可能有10万个资产,而这些资产又可能有10万个子项 项目(id) 资产(id、parentId) 水平仪 类别 项目 案例 收入 其他 根据我对DDD的理解,将有一个聚合,其中项目是聚合根,因为没有资产,级别就不可能存在,没有项目,资产也不可能存在,等等 这将导致项目中存在大量对象。这还意味着要添加一个案例

Domain driven design DTO是否为贫血模型/贫血值对象?

贫血模型是一个没有 “贫血域模型是使用软件域模型,其中域对象包含很少或没有业务逻辑(验证、计算、业务规则等)。” DTO是一个没有业务逻辑的贫血模型吗?同样,一个没有业务逻辑的balie对象?首先,让我们将行为分为两部分:读行为和写行为,以便我们使用相同的语言 DTO是一个没有业务逻辑的贫血模型吗 你不能说DTO是贫血还是不贫血,因为DTO是不可变的,贫血只有在架构的突变/写入端(例如CQRS中的命令端)才有意义,但如果我们稍微强制一点“是”,DTO是贫血的,并且根据定义没有行为(既不读也不写)

Domain driven design 谁以及如何处理重播事件?

我正在学习DDD、CQR和事件来源,但有些事情我想不出来。命令触发聚合中的更改,一旦执行更改,就会触发一个事件。事件随后由系统的其他部分处理并保存在事件存储中。但是,如果命令触发了更改,我不理解重播事件将如何重新创建聚合 例如:如果我们有一家网上商店。 AddItemToCardCommand->Card Aggregate将项目添加到其卡->ItemAddedToCardEvent->事件由任何人处理。 但是,如果事件被重播,聚合将不会将该项添加到其卡中 总之,我的问题是如何基于事件存储中的事

Domain driven design DDD-将项目添加到订单/收据时的价格计算

我正在尝试将DDD应用到我的最新项目中。尽管我在确定将一些业务逻辑/计算放在何处时遇到了问题 首先我将描述业务流程,然后我将如何考虑实现它 业务流程: 它只是简单地将收据项目添加到收据中。但是,商品的价格取决于客户类型和商品数量 i、 e:“A”类客户想要购买两顿饭。在他的安排下,他可以吃一顿打折的午餐,但因为他很饿,他吃了两顿。第一顿饭的价格为4欧元(折扣),第二顿饭的价格为6欧元(全价) 我想的是: 产品-实体(具有不同的有界上下文,将仅用作输入参数)-字段:代码、名称、不同客户类型的价格集

上一页 1 2 ...  29   30   31   32    33   34   35  ... 下一页 最后一页 共 42 页