domain-driven-design相关内容
域事件在DDD中是众所周知的,可以在Aggregate Roots或Domain Services中发布.我的问题是,可以在应用程序服务/用例中发布域事件吗? 例如,简化.我有一个名为 UseCaseA 的应用程序服务,该服务执行调用某些聚合根的各种操作.如果要在此用例结束时引发事件,是否可以在此应用程序服务中发布 UseCaseAFinished 事件?这是一个域事件还是我们应该将其称为应
..
我已经分配了一个非常简单的项目作为考试,并且我有使用域驱动设计进行开发的想法. 许多人可能会说应用程序是如此简单,以至于使用存储库和UoW只是浪费时间,您也许是正确的,但我认为这是学习更多内容的机会. 该应用程序是一个“机票"系统,从下图可以很容易地猜到它的功能. 问题是我不确定我是否正确地分离了聚集体及其根. 为进一步解释,我想到了管理员只想插入一个新公司,或先加载公司然
..
我对此并不陌生,所以我的理解仍然很薄弱. 我的项目中有一个Person模型和一个AccountType模型.每个人都引用一个帐户类型. 现在,如果我的理解是正确的,那么Person绝对是一个聚合根,而AccountType可能不是,因为Account type表中的条目将几乎是静态的,并且在Person之外毫无意义. 但是,当我创建一个新用户时,我需要设置帐户类型,因此似乎我需要
..
以这个简单的,人为的例子为例: UserRepository.GetAllUsers();UserRepository.GetUserById(); 不可避免地,我会遇到更复杂的“查询",例如: //返回用户,其中active = true,deleted = false和Confirmed = trueGetActiveUsers(); 我无法确定存储库的责任在哪里结束.Get
..
假设经典的Order/OrderLine业务情景. 公共类Order {...公共无效AddOrderLine(OrderLine ol){this.OrderLines.Add(ol);UpdateTaxes();}私人无效UpdateTaxes(){//遍历订单行//收集增值税金额等//更新总计var newTaxes = Orderlines.SelectMany(ol => ol.Get
..
如何在DDD域模型中对层次关系进行建模?在我的应用中,我有一个Organization实体,组织可以有部门,部门又可以有子部门.嵌套深度是任意的.我应该如何设计我的实体和存储库? 解决方案 一个简单的模型可能类似于: 公共班级组织:部门{公共组织(字符串名称):基地(名字){}}公共课课{公共部门(字符串名称,部门父级= null){this.Name =名称;this.Parent =
..
到目前为止,我所看到的大多数F#消息传递示例都在处理2-4种消息类型,并且能够利用模式匹配将每条消息定向到其适当的处理函数. 对于我的应用程序,由于它们处理和所需参数的不同性质,我需要数百种独特的消息类型.到目前为止,每种消息类型都是其自己的记录类型,并附加了一个标记接口,因为在一个单独的联合中包含数百种类型并不是一件很漂亮的事,而这些类型的模式匹配也不会很漂亮.结果,我目前正在使用反射来查
..
首先,据我所知,DDD中的Entity与Value Object几乎相同,只是Entity具有身份.我读过的每一篇文章都说实体ID与任何ORM工具都具有ORM映射.但是我不想在实体中使用ORM映射.相反,我想使用存储库接口进行数据库操作而不进行映射.而且,在这种情况下,我被困在应该如何做的事情上. 我将在下面用一个例子来解释我的想法 假设我有一个TODO应用程序,并且TODO中有一些问
..
让我们假设情况: 我们有系统的用户 每个 User 都有其 Clients ( Client 始终分配给一个,并且只有一个 User ) 用户上传不同的 Documents ,并且始终将一个 Document 分配给一个,并且只有一个 Client 业务规则之一是, User 最多可以总共上传X个 Documents ,而与 Clients 的数量无关. 在这本书中,我将使
..
我了解DDD中的概念,但在实践中会有些混乱. 我正在使用C#,SQL Server和EF.我看到基于我的数据库模式,持久性模型看起来与聚合不同.为了定义整洁,美观的聚合,实体和值对象,我的域模型看起来与数据库模型有所不同. 此外,如果我尝试合并这2个对象,那么我将以某种方式尝试根据技术而非领域来设计领域模型. 也许是一个更具体的例子,例如: 如果该ID仅用于数据库,我是否需
..
我正在尝试找到一篇不错的文章/示例,介绍DDD实体如何处理错误(以及什么被认为是异常错误,哪些不会被视为错误)以及它们如何将它们传递给调用应用程序层(通常将操作包装)在需要回滚的交易中). 目前,我正在考虑将可能破坏聚合交易(例如验证)的所有错误视为例外.这样,我可以在"catch"块中回滚事务.例如: SomeApplicationService: //从此处开始交易//...尝试
..
我正在认真考虑使用Greg Young的 EvenStore 来实现基于事件的系统.但是,我不确定Greg Young的EventStore是否支持快照.快照是我的应用程序的关键要求,因为我们不想每次都重放所有事件以构造对象状态. 有人可以向我提供有关如何在EventStore(Greg Young版本)中创建快照的示例吗? 解决方案 是的,只需将它们放在流中并读取该流的第一个值(向
..
我有一个真实的场景,那就是完美的域模型设计.它是一个具有多个象限的字段,每个象限的状态不同.因此,我的总根是该字段.现在我有一个重要的问题:我想拥有一个敏锐的ignorat域模型,我认为这是有道理的.所以我应该在哪里调用存储库方法的更新?不是在域模型中,对吧?因此,当没有更改跟踪根代理的对象并且不应在实体中调用存储库时,汇总的根子实体应如何在数据库中更新?还是我误解了领域模型模式? 我的问题
..
我正在努力理解使用Doctrine 2在来自不同有界上下文的两个实体之间实现关联映射的正确方法.假设有两个"User"和"Post"实体属于"User"和"Content"绑定上下文.在“内容"上下文中还有一个“用户"概念,该概念通过多对一关联来确定“帖子"的作者.因此,“内容"上下文中的“用户"只是一个包含用户ID的值对象. 我的问题是我应该如何使用教义2实现这种关联?我有两个都有各自问题
..
在我的大多数项目中,我都使用nHibernate + Fluent映射,最近我开始与Dapper一起玩,看看是否可以将读取操作移至它. 我遵循DDD方法,因此我的域实体没有任何公共设置者.例如: 公共类用户{private int _id;私人字串_name;私有IList_carList;protected User(){}//流利的映射公共用户(字符串ID,字符串名称){/
..
在域模型中为实体身份建模的一种建议方法是创建值对象,而不是使用原始类型(例如,在C#中): 公共类CustomerId{公开长号{放;}} 在我看来,此类应在整个应用程序中使用,而不仅应在域模型中使用.它们与命令和事件一起可以为有限的上下文定义服务协定.现在,在消息/事件驱动的体系结构中,具有多个有界上下文且每个上下文具有单独的服务协定,很容易遇到圈子依赖关系. 在有界上下文之间的通信
..
我们有具有复杂业务逻辑的旧版旧版应用程序,需要对其进行重写.我们考虑使用cqrs和事件源.但是尚不清楚如何从旧数据库迁移数据.可能我们只需要将其迁移到读取数据库中,因为我们无法复制所有事件来填充事件存储.但是我们至少需要在事件存储中为每个聚合创建一些初始记录,例如 AggregateCreated 吗?还是我们需要编写脚本并使用所有命令一个接一个地使用所有命令来以通常与事件源相同的方式重新创建聚合
..
我正在使用DDD/CQRS/ES方法,并且对建模聚合和查询存在一些疑问.作为示例,请考虑以下情形: 用户可以创建工作项,更改其标题并将其他用户关联到该工作项.WorkItem具有参与者(关联的用户),并且参与者可以将操作添加到WorkItem.参与者可以执行动作. 让我们假设已经创建了Users,而我只需要userIds. 我有以下WorkItem命令: CreateWor
..
在我正在构建的应用程序中,有很多方案需要选择一组聚合来对其执行特定操作.例如,如果一堆 Reminder 聚合符合过期策略(只有一个),则可能不得不将它们标记为已过期. 我有一个 ReminderExpirationPolicy 域服务,该域服务始终在传递提醒之前应用.该政策的作用类似于: reminderRepository.findRemindersToExpire().forEac
..
我正在使用CQRS和DDD原理的分布式系统上工作.基于此,我决定实体的主键应该是Guid,它是由我的域(而不是数据库)生成的. 我一直在阅读有关Guid作为主键的信息.但是,如果将某些最佳实践应用于Azure SQL数据库,则似乎不再有效. 如果您使用本地SQL Server计算机,则顺序引导很不错-生成的顺序引导将始终是唯一的.但是,在Azure上,情况不再如此.如此内容中所述线程,
..