我有两个集合根,一个集合根引用另一个集合根(第一个通过第二个集合根的标识引用第二个集合根)
现在,来自我的应用层(通过MVC asp.net)的命令删除了我的第二个聚合根
在删除根目录时,我是否发送一个域事件,告诉第一个聚合根目录“NULL”对现在不存在的第二个聚合目录的引用
JD你走错了路。从您面临的技术问题后退一步。首先,我怀疑在你无处不在的语言中是否存在“删除”这样的东西。最有可能的人会称之为“归档”、“无序”、“删除”、“缺货”。。。表示特定骨料处于其生命周期末尾的术语。当领域专家谈到这
我有一个需求,我需要根据特定的标准将两个事件分组为一个事务。下面是关于该要求的一些想法
事件::
我们将不断地向我们的系统接收事件
每个事件将有一些缓冲时间与其他事件分组
如果缓冲时间已过,则需要丢弃该事件
我们需要根据两个事件的信息将两个事件分为一组
如果事件信息不足,我们将向其他组件发送事件信息,该组件将使用更正的数据进行响应
每当我们对事件进行分组时,如果相关事件转到数据更正组件,我们希望保留另一个事件,即使我们不能100%确定匹配条件。我们之所以要执行此步骤,是因为我们希望尽可能多地匹配
我正在使用熟悉的事件源模式构建服务:
收到请求
将加载聚合的历史记录
将(根据其历史)重新生成聚合
准备新事件并更新聚合以响应来自步骤1的传入请求
这些事件将写入日志,并可供任何订阅者使用(发布)
在我的例子中,步骤5分两部分完成。事件将写入事件日志。后台进程从事件日志中读取并发布从偏移开始的所有事件
在某些情况下,除了与聚合相关的事件之外,我还需要发布副作用。就系统而言,这些也是事件,因为它们被其他服务消耗并影响其他服务的状态。但是,它们不会影响此服务中聚合的历史记录,并且不需要重建它
我应该
对于一个特定的域事件可以订阅多少侦听器的最佳策略,我有一个疑问
假设我们有一个名为UserWasCreated的域事件,当在有界上下文a中创建新用户时,该事件将被发布。假设我们有另一个有界上下文B订阅该事件,在该事件中,我们必须执行许多任务,例如:发送电子邮件,保存用户的某些信息并将用户信息推送到外部服务(即CRM)
我的问题是,在同一个有界上下文中,我应该为该事件拥有多少侦听器
我看过Vernon的IDDD书,每个事件只有一个监听器,像这样UserWasCreatedListener。但那个听
如何区分实体和ValueObject
对于我最近使用DDD的项目,我经常被这两个问题弄糊涂
实体和VO是什么
责任
实体和VO是否应该包含任何逻辑,如日期解析、按字段返回bool
我还希望这是一种简单的经验法则,可以确定您的新模型是实体还是值对象
就我个人而言,我使用以下问题:
我的模型中是否有任何属性,它的变化历史很重要
如果是,则我的模型更可能是一个实体
如果否,则我的模型更有可能是ValueObject
因此,在示例中使用它,Person模型取决于我们的域(逻辑/业务),它的Fir
在DDD中,关键概念之一是Repository,它允许您检索实体(或聚合根),然后在更新后将其保存回去
假设我们需要对实体执行一些“批量”操作,而实体的数量使得将它们检索到内存中是绝对不可能的。即只能在数据库中执行操作
这种“批量”操作的地点在哪里?它应该是存储库上的方法吗?它不会用特定于数据库的操作“泄漏”存储库抽象吗?它不会将业务操作从实体移动到存储库吗
void DoLongInvolvedTask();
我认为将批量任务作为方法放在存储库中没有任何错误。他们不会泄露任何东西。拥有批量操
如果我有一个用于获取聚合根(由Eric Evans DDD定义)的存储库,例如一个订单实体(根聚合),它将OrderLine对象作为子对象
在某些情况下,我只想检索顶级对象,即没有订单行的订单,在其他情况下,我想返回更多,可能是向下两级,等等,即订单和相关订单行
订单/订单行场景是一个简单的例子,但如果我的聚合根比这个更深,可能会下降3或4个级别,该怎么办
将其构建到存储库中(使用即时加载)的最佳/公认方法是什么?不太清楚聚合根是什么意思。据我所知,存储库模式通常适用于作为域模型一部分的对象集群
我想在PaypalPaymentProcessor.cs和AuthorizeNet.cs中实现这个接口
This is my interface
public partial interface IPaymentMethod
{
void ProcessPayment(PaymentInfo paymentInfo, Customer customer,
Guid orderGuid, ref ProcessPaymentResult proce
如果我正在使用DDD开发一个应用程序,那么基础结构和行为组件去了哪里?例如,用户管理、用户特定配置、权限、应用程序菜单等
这些组件实际上与我的域所满足的业务需求无关,但它们仍然是我的应用程序所必需的元素。它们中的许多还需要持久性。在项目中有非域组件和域是很正常的,毕竟不是所有东西都是面向业务域的。它们的归属实际上取决于您如何构建解决方案。在大多数情况下,我倾向于遵循,因此我所有的逻辑都是由应用程序服务提供的,不管它是面向域的还是面向非域的。如果您发现您的用例很少需要来自与特定应用程序相结合的核心
在一个应用程序中,我们将公司建模为一个实体,将地址建模为一个值对象:
public class Company : Entity {
public Address PrimaryAddress { get; set; }
public Address SecondaryAddress { get; set; }
}
public class Address : ValueObject {
public string ZipCode { get; private set
我从DDD哲学开始,我想实现与我们这里的遗留系统的集成。在我在互联网上的研究中,我发现了一些文章和样本,但我必须承认:很难理解如何正确地进行集成
在提出这个问题之前,我在这里进行了搜索,但是搜索结果对我来说没有用处,所以我想知道是否可以发送或向我展示ACL的实现示例
我这里有以下项目:
遗留系统
遗留数据库(我需要访问)
将使用DDD方法创建的新应用程序
最初的想法是通过NHibernate访问该数据库,只创建一些所需的映射类、域实体并实现业务规则。根据埃里克·埃文斯(Eric Evans)
我在做一个机票预订项目
下图显示了我们目前开发的领域模型
我们定义了一个域服务(AirBookService),它封装了预订、票务和其他操作。我们的供应商提供远程过程调用api来处理这些请求,因此我们通过添加反腐败层(我们有多个供应商)来实现域服务
此解决方案在处理无效rpc调用(如获取价格)时效果良好。但是,在处理非imdenpower rpc调用时存在风险
比如说
public class TransactionalReservationHandlingServiceImpl .... {
我目前正在使用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
我在看一篇关于使用事件源/DDD/CQRS方法设计的应用程序中的查询的帖子
据我所知,事件是对域对象状态的更改。对状态的更改将作为历史记录/事件保存在数据库中(任何sql/无sql)
若用户希望查询以获取特定聚合根的当前状态,则需要获取事件的历史记录
当用户查询特定于业务的查询时,他/她将感兴趣的是当前状态,而不是事件的历史
CQRS中的查询或“Q”部分如何与事件源一起工作
假设我有一个域对象“Account”作为聚合根。账户应收账款将经历许多变化,即贷记和借记。事件存储将具有贷记和借记事件
考
有谁能推荐2阶段提交的替代方案,使聚合的持久性与非事件源DDD应用程序中相关域事件的调度发生在同一事务中
我尝试过的一种方法是在同一ACID RDBMS实例中持久化聚合和异步事件,然后让流程轮询事件进行处理。只要您不需要几个RDBMS实例或非ACID数据库作为写存储,这种方法就可以很好地工作。您参考的文章的可能副本确实回答了我的问题。非常感谢。
我正在努力学习领域驱动设计。目前,我正在为一个虚拟的个人项目构建一个上下文映射,该项目旨在存储有关客户和潜在客户的信息(还有一个电子邮件模板引擎和一些其他信息)
我遇到了一个小小的障碍;我遇到的问题是,我创建了一个有限的上下文来存储有关客户和公司的信息。有两种类型的客户,分包的代理客户和最终客户
我不确定是否应该将其建模为具有客户机类型值类型的客户机,还是作为客户机和代理客户机的独立域实体?如有任何建议,将不胜感激
请注意
上面的图表不完整,因此缺少一些链接。如果我在这里做了一些明显的错误,
今天我参加了一个网络研讨会,与会者是一位非常著名和受人尊敬的作家、讲师,也是软件工程、架构和设计方面的专家。网络研讨会的主题是“增量架构”。这位知名人士指出,DDD中的实体概念与数据库中的实体概念无关。埃里克·埃文斯在其2003年的原著中不幸地选择了这个词。我对他的解释不满意,我发现他的陈述可能会让任何试图在设计中使用DDD的人感到非常困惑
我的问题:DDD中实体一词的确切含义是什么如果它不是数据库、ORM框架、JPA、开发框架(Spring)等中非常好理解和定义的实体概念
广泛研究软件架构
这
作为练习,我正在尝试使用DDD在.NET中创建一个简单的博客应用程序。到目前为止,我有用户、主题和评论类。但问题是如何将评论与用户和主题联系起来?如果我说用户和主题是聚合根,那么评论属于哪里?聚合可能与其他聚合根有关联
e、 评论可能与主题和用户都有关联。
不管怎样,这就是我建模的方式,聚合根是一致性的边界。
一个主题不需要与它的评论在任何方面保持一致,因此评论不需要成为该聚合的一部分。
用户不需要与他或她的所有评论保持一致,因此用户也不需要了解评论
我将通过评论库获取特定主题的评论。
e、 g
假设我们需要实现一些需要检查对象历史(事件存储)的域规则。例如,我们有一个具有CurrentStatus属性的Order对象,我们需要检查Order.CurrentStatus更改历史记录
您很可能会回答,我需要将此知识转移到域中,并引入Order.StatusHistory属性,该属性包含状态记录的集合,并且我不应该查询事件存储。我同意你的看法
我想问的是事件存储的需求
我们在事件存储中写入具有业务意义的事件(域值),我们不记录UserMovedMouse事件(在大多数情况下)。与OrderS
我试图找到一个解决这个命名问题的方法,但是我在网上找不到类似的用法。它可能是我们在域模型中有一个设计流,或者我们只是没有为所谓的“ValueObjects”使用合适的名称
请阅读下面的内容
我们使用领域驱动设计和CQRS模式。下面是如何设计域模型的
另外,我们的应用程序使用ASP.NET MVC和控制器与服务层进行通信,仅供参考。DTO(数据传输对象)被传入/传出到MVC控制器,这不在上图中
问题是我们没有正确使用“ValueObject”。根据Martin Fowler的定义,我们的Valu
我得到一个命令:MovePlayerCommand
此命令的验证程序之一执行3项操作:
计算玩家移动的成本(可用于验证,也可用于显示)
验证此成本
收听“PlayerMoved”活动,以便我们可以应用成本(例如-10个行动点)
这对一个班级来说是不是太多的责任?如果是这样的话,你会如何区分这一点
编辑:我知道删除成本和检查成本是两件事,但我不能将它们与成本计算分开,我不希望每个操作有3个类如果没有更多信息,就不可能明确回答
也就是说,你所描述的听起来不像一个验证器;它听起来像是某种“计算器”
为了支持脱机客户机,我想评估如何使用CQRS-DDD系统来适应多版本并发控制
从CouchDB学习时,我很想为每个实体提供一个版本字段。但是,还有其他版本的并发算法,如。这让我想到,也许,我不应该为每个实体和/或事件公开这个版本概念
不幸的是,我所看到的大多数实现都是基于软件在单个服务器上运行的假设,其中事件的时间戳来自一个可靠的源。但是,如果某些事件是远程和脱机生成的,则本地客户端时钟偏移存在问题。在这种情况下,正常的时间戳似乎不是排序事件的可靠来源
这是否迫使我评估某种形式的解决方案,而不是
在使用事件源时,是否有人能就如何在分层域模型中组织实体、聚合根等提供建议
项目有资产。资产是一个层次结构。每个资产都有一组数据(级别包含一组类别,类别包含一组项目等)。可能有10万个资产,而这些资产又可能有10万个子项
项目(id)
资产(id、parentId)
水平仪
类别
项目
案例
收入
其他
根据我对DDD的理解,将有一个聚合,其中项目是聚合根,因为没有资产,级别就不可能存在,没有项目,资产也不可能存在,等等
这将导致项目中存在大量对象。这还意味着要添加一个案例
贫血模型是一个没有
“贫血域模型是使用软件域模型,其中域对象包含很少或没有业务逻辑(验证、计算、业务规则等)。”
DTO是一个没有业务逻辑的贫血模型吗?同样,一个没有业务逻辑的balie对象?首先,让我们将行为分为两部分:读行为和写行为,以便我们使用相同的语言
DTO是一个没有业务逻辑的贫血模型吗
你不能说DTO是贫血还是不贫血,因为DTO是不可变的,贫血只有在架构的突变/写入端(例如CQRS中的命令端)才有意义,但如果我们稍微强制一点“是”,DTO是贫血的,并且根据定义没有行为(既不读也不写)
我正在学习DDD、CQR和事件来源,但有些事情我想不出来。命令触发聚合中的更改,一旦执行更改,就会触发一个事件。事件随后由系统的其他部分处理并保存在事件存储中。但是,如果命令触发了更改,我不理解重播事件将如何重新创建聚合
例如:如果我们有一家网上商店。
AddItemToCardCommand->Card Aggregate将项目添加到其卡->ItemAddedToCardEvent->事件由任何人处理。
但是,如果事件被重播,聚合将不会将该项添加到其卡中
总之,我的问题是如何基于事件存储中的事
我正在尝试将DDD应用到我的最新项目中。尽管我在确定将一些业务逻辑/计算放在何处时遇到了问题
首先我将描述业务流程,然后我将如何考虑实现它
业务流程:
它只是简单地将收据项目添加到收据中。但是,商品的价格取决于客户类型和商品数量
i、 e:“A”类客户想要购买两顿饭。在他的安排下,他可以吃一顿打折的午餐,但因为他很饿,他吃了两顿。第一顿饭的价格为4欧元(折扣),第二顿饭的价格为6欧元(全价)
我想的是:
产品-实体(具有不同的有界上下文,将仅用作输入参数)-字段:代码、名称、不同客户类型的价格集
上一页 1 2 ...
29 30 31 32 33 34 35 ...
下一页 最后一页 共 42 页