Domain driven design DDD:应该;评论「;在一个;第条;是聚合根吗?

我开始设计第一个简单的应用程序DDD样式,我开始了解这些概念是如何协同工作的 如果我设计一个经典的博客应用程序,文章类将是我的聚合根之一。我想检索文章,管理和删除所有相关数据(出版日期,作者…)。我在评论方面有困难。首先,Comment似乎是一个实体,它是文章聚合的一部分:一个评论是针对一篇文章创建的,如果我删除一篇文章,我将删除相关的评论 然后,我想在博客上显示一个小框,其中包含任何文章的最新评论。因此,看起来我想从数据存储中检索注释(并且只检索注释)。从我对DDD思想的理解来看,这使它成为一

Domain driven design 有界上下文的大小

我已经开始学习DDD的原理,目前正试图掌握有界上下文的概念。特别是,你如何决定它的大小?是的,我知道,越小越好,越大越好(根据沃恩·弗农的说法) 假设我要做一个博客的模特。然后我可以说有3个限定的上下文:1)首页(展示最近的文章,没有评论显示)2)讨论(一篇文章包括评论)3)文章作者(我在这里撰写文章) 然而,这感觉不太对(普遍存在的语言对所有人来说都是一样的),似乎我是从前端的角度出发,仍然在考虑视图模型或其他方面 有人能给我指出正确的方向吗?博客不是使用多个有界上下文的好例子。这并不是一个真

Domain driven design 事件源中的流版本

在事件源中,存储一个聚合实例(称为事件流)中发生的所有单个域事件。除了事件流,您还存储流版本 版本应该与每个域事件相关,还是应该与事务性更改(aka命令)相关 例如: 事件存储的当前状态为: aggregate_id | version | event -------------|---------|------ 1 | 1 | E1 1 | 2 | E2 在聚合1中执行新命令。此命令生成两个新事件E3和E4 方法1: ag

Domain driven design 贫血领域模型的处理技术

我已经阅读了一些关于贫血领域模型和关注点分离的问题。在贫血的域对象上执行/附加域逻辑的最佳技术是什么?在我的工作中,我们有一个相当贫乏的模型,我们目前正在使用“helper”类在域对象上执行数据库/业务逻辑。例如: public class Customer { public string Name {get;set;} public string Address {get;set;} } public class Product { public string Nam

Domain driven design 简单聚合根和存储库

我是许多试图理解聚合根概念的人之一,我想我已经明白了! 然而,当我开始为这个示例项目建模时,我很快陷入了两难境地 我有两个实体ProcessType和Process。一个进程如果没有进程类型,就不可能存在,而进程类型有许多进程。因此,流程持有对类型的引用,没有它就无法存在 那么ProcessType是否应该是聚合根?通过调用processType.AddProcess(New Process()),可以创建新流程; 但是,我还有其他实体,它们只持有对流程的引用,并通过流程.type访问其类型。在

Domain driven design 触发CQR中其他域更改的域事件

在我看到的所有CQR示例中,域事件触发对读取模型的更新,而不是其他。但是,如果希望域事件导致域中的其他更改,该怎么办 例如,假设您有以下要求: 单击“关闭帐户”按钮后,关闭帐户 当账户被支付后,关闭账户 关闭帐户时,将帐户所有者标记为“特殊” 最好的处理方法是什么 Make Account.Close()创建AccountClosed事件,并将所有者标记为“特殊” 创建一个AccountClosed处理程序,将所有者标记为“特殊” 生成提交MarkOwnerAsSpecial命令的Accou

Domain driven design 单个有界上下文的结构

有界上下文是跨所有应用程序层(域、应用程序、表示和基础架构)还是仅跨域模型?例如,我应该使用以下结构: <bc 1> |_ domain |_ application |_ presentation |_ infrastructure <bc 2> |_ domain |_ application |_ presentation |_ infrastructure |_领域 |_应用 |_介绍 |_基础设施 |_领域 |_应用 |_介绍 |_基础设施

Domain driven design 领域驱动设计挑战-实体属于哪个领域?

我正在分析一个相当不错的企业资源规划软件,因为ERP涵盖了从会计到销售和CRM的许多领域,所以我选择使用领域驱动设计。现在我有两个问题: 启动DDD的主要应用(非理论)资源是什么 例如,如何确定“发票”指向哪个域或模块 属于?它属于“会计”还是“销售” 可能有很多这样的例子,在分离实体和域时我会感到困惑 我怎样才能克服这个问题呢?我不是DDD的权威,但这是我的2美分 1) 你读过《蓝色圣经》吗?这里的示例取自Eric Evans构建真实航运平台的经验。我还没有看到任何其他出版的例子像书中的那样大

Domain driven design DDD:不可变对象也可以是实体吗? 我读过无数篇关于实体和价值对象之间差异的文章,虽然我认为至少在概念上我理解这两个概念是如何不同的,但是在一些文章中,作者认为一个特定的领域概念仅仅是VO,因为它是不可变的。(因此,它的状态永远不会改变,至少在特定的域模型中是如此)

您是否同意如果一个对象的状态在特定的域模型中永远不会改变,那么这个对象就永远不应该是一个实体?为什么 谢谢如果需要标识,对象可以是实体。 根据DDD书,如果一个对象具有身份和生命周期,但不会随着时间的推移而改变,你也可以把这个对象看作一个事件。 你是否同意如果一个物体的状态永远不会改变 特定的域模型,那么这个对象永远不应该是一个实体? 为什么? 我想说,90%以上的实体在其生命周期中的某个时刻会发生变化。但有些实体可能是不可改变的,因为它们在该领域的性质——例如银行系统中的prepaid电话卡、

Domain driven design DDD:骨料设计-骨料之间的参考

我有一个关于如何设计聚合的问题 我有公司、市、省和国家实体。其中每一个都需要是其自身聚合的聚合根。城市、省和国家实体在整个系统中使用,并被许多其他实体引用,因此它们不是价值对象,也需要在许多不同的场景中访问。所以他们应该有存储库。CityRepository将具有FindByIdint、GetAll、GetByProvinceProvinceProvince、GetByCountryCountry、GetByNamestring等方法 以下面的例子为例。公司实体与属于某个国家的某个省的某个城市有

Domain driven design 我应该将存储库传递给引发事件的域方法吗

稍微相关:我是否应该将存储库传递给需要在方法操作发生并被持久化后触发事件的域对象方法 在这种情况下,系统需要在域对象的状态更改后发送的电子邮件。虽然不太可能,但状态更改可能不会持续,在这种情况下,不应发送电子邮件 我可以使用域服务来完成这项工作,但所有状态更改的逻辑都属于域对象,并且包含在域对象中,因此我的服务最终看起来像 StatusService(Irepo repo) { void ChangeStatus(domainObject myObject, status n

Domain driven design 微服务是否打破了有界上下文?

我有点困惑。我在一家年轻的银行公司工作,我们决定实施DDD体系结构以打破复杂性 所以,这里是我的问题(它遵循团队中某个人提出的设计建议)。假设我们有3个不同的域。D1、D2、D3,它们公开域(web)服务。每个域操作依赖于相同表的强类型业务实体。在这些域之前,我们需要一个微服务来保证表中持久化的数据以集中的方式保持一致。D1、D2和D3要求微服务保存符合特定规则的数据。我们希望微服务充当表的CRUD代理。微服务向D1、D2和D3域提供特定的DTO,将表混淆到D1、D2和D3 这个方法听起来好吗?

Domain driven design 如何用DDD建模StackOverflow网站

我举StackOverflow的例子,因为很明显你知道那个网站,我真正的用例非常接近 让我们想象一个简化的So域描述: 有用户 用户可以创建新问题 用户可以创建这些问题的答案 用户可以编辑自己的问题和答案 如果其他用户的声誉超过1000,则用户可以编辑其他用户的问题(随机选取该阈值) 最后一条大胆的规则对我来说很重要 我对AggregateRoot的理解是,它应该包含决定接受或拒绝命令的状态,而不应该查询数据库来执行此操作。它保证了应用程序的一致性。它应该只监听它发出的事件来更新它的状态 现

Domain driven design 聚合根数据重复和Demeter定律

得墨忒尔定律是一条规则,规定一个物体只应意识到“密切相关”的其他物体(我的解释)。看 以下示例不遵循LoD: // This class has to be aware of too many other classes, increasing complexity. class Thing { void foo(Customer c, Employee e, System s, Company c, SupportTicket st) { // Th } }

Domain driven design DDD NoSQL存储和域模型与视图模型

我正在尝试使用DDD模式,作为一种持久存储,我正在考虑使用NoSQL数据库,如LiteDB、RavenDB或DocumentDB 与关系数据库相比,我的优势之一是我的域模型(整个聚合)可以序列化为JSON文档并存储在数据库中,避免了域模型到数据模型的映射 但是,为了在屏幕上显示数据,如何读取数据呢。我的UI显示基于视图模型的视图,但是如何构造它们呢?我是否通过数据库查询文档。我的域模型,然后将其映射到视图模型 我问这个问题,因为通常会提到“不要使用域模型进行查询(读取模型)” 与关系数据库相比,

Domain driven design DDD-如何在单个请求中修改多个AR(来自不同的有界上下文)?

我想公开一个仍处于纸面状态的小场景,关于DDD原理,它看起来有点乏味 比如说,我有一个托管帐户管理的应用程序。基本上,该应用程序由几个有限的上下文组成,如Web帐户管理、Ftp帐户管理、邮件帐户管理。。。他们每个人都有自己的AR(他们可以独立生活) 现在,让我们假设我想提供一个带有HTML表单的UI,该表单为每个有界上下文组成一个字段集,例如更新限制和/或特性。我应该如何准确地处理以更新所有AR,而不破坏每个请求的单个事务原则?我是否可以创建一种“外部”AR,比如说一个ClientHosting

Domain driven design 哪些型号名称应加前缀

我的类型命名有问题,通常它适用于我的所有项目 我正在使用CQR,很多时候我的应用程序的不同层引用了类似的数据“上下文”。 例如,我有一个播放机上下文,它分布在查询模型、写模型、域模型等等 基本上,我的问题是,如果某个类/结构/数据类型引用的是特定的“查询”类型,我应该将其命名为PlayerQuery还是QueryPlayer 根据我的理解,“PlayerQuery”意味着它是对玩家数据的查询,而“QueryPlayer”则意味着某种“查询”行为 我开始编写代码已经有相当一段时间了,但我仍然难以正

Domain driven design DDD:加载整个骨料将导致性能问题

大多数DDD书籍(例如DDD的模式和原则)强烈建议在从数据库获取数据时加载整个聚合。原因是聚合是一致的边界。 但在一些常见情况下,这会导致严重的性能问题。 下面是我面临的一个真实例子: 我有一个聚合根,它是一个带有属性的workobject实体。此集合中还有其他实体: 工作对象的附加文件列表。每个文档都是一个实体。(类文档包含真实文档的元数据) 注释列表。每个注释都是一个实体` 活动列表。每个活动都是一个实体,表示在此工作对象上完成的活动 归档文件的列表。每个ArchivedFile都是一个实体

Domain driven design 从事领域驱动设计的公司

我刚刚读完领域驱动设计,我对其中的一些想法非常着迷。你知道有哪些公司在他们的项目中使用通用语言吗?也许是一个更好的地方来回答你的问题。挪威国家石油天然气公司使用它。这是一个间接的答案。您可以通过查看应用领域驱动设计实践的软件开发公司并了解他们的客户是谁来找到此类项目 三家这样的公司是: -在Eric Evans工作的地方,他写了一本领域驱动的设计书 -在Jimmy Nilsson的作品中,他写了“应用领域驱动的设计和模式” -员工Dan Bergh Johnson就DDD进行了多次演讲 我工作的

Domain driven design 数据传输对象、域对象和存储库

我想弄清楚这些是怎么一起工作的。我知道DTO基本上只是一个数据容器,用于域对象来回传递到表单等。域对象是否包含DTO,或者DTO和域对象是否恰好具有将手动映射的所有相同属性 如果我在服务中公开我的DTO类型,我如何使用getter和setter而不为客户机上的每个get/set操作创建往返?我知道你可以有一个长的构造函数,但是如果你有7个以上的属性,那就很难看了 在实现存储库模式时,我是传入DTO还是传入域对象?我认为最好让DTO包含对域对象的引用,以便DTO的消费者可以开始使用域对象。也就是说

Domain driven design ddd中的多对多关系

我有两个聚合根、发布者和活动: 1活动可以注册多个发布者 1个发布者可以分配给多个活动 这意味着MToM关系 所以在Publisher类中,我创建了 List<Campaign> _campaigns; List\u活动; 在竞选课上 List<Publisher> _publishers; 列出出版商; 我已经创建了包含列(id、publisherID、CampaignID)的表 但我听说应该避免使用MtoM,我该怎么做?上述描述是否正确?确实,你应该避免许

Domain driven design 如何更新聚合内的实体

我有一个名为Campaigns的聚合,每个聚合都有一个名为campaign的根实体,这个根实体有一个尝试列表(实体) 公共类尝试:IEntity { 私有int-id; 公共AttempNumber AttempNumber{get;} //其他领域 } 公共类活动:IEntity//root { 私有int-id; 公共IList{get;} //其他领域 } Im使用方法添加活动尝试 公共虚拟空分配尝试(尝试att) { Validate.NotNull(附件,“分配需要计划”); 本.尝

Domain driven design 富域模型的Bads

我在读关于贫血领域模型是一种反模式的文章,我对它有一些疑问。 我有一个数据库,其中有三个客户端使用,每个客户端都有不同的业务规则来将产品插入数据库。 因此,如果我使用富域模型,我的代码将如下所示: public class Product: IValidatableObject { public int Id; public Client Client; public int ClientId; public IEnumerable<Validat

Domain driven design 跨边界上下文事件-存储消息契约的模块/项目

我们的每个有界上下文都有一个事件消息处理器,它从上下文间总线中提取消息,并通过内存总线(反应式扩展,or)在本地分派消息 在DDD书籍中,我读到它谈到将消息放入项目中的模块中,例如mycompany.accounts.infrastructure.messages和mycompany.ordering.infrastructure.messages 对于我来说,在多个上下文中引用这些消息会导致循环引用 如何最好地组织不同的有界上下文消息传递契约: 每个有界上下文是否都有一个单独的项目,其中包含该

Domain driven design 领域驱动设计在建模和编码之间的实现问题

我现在正在努力学习DDD。经过几个月的研究,我发现建模和编码之间存在矛盾。如你所知,DDD的原则是“领域第一,技术第二”。但是,在将实际模型移动到实现中时存在“确定”约束,例如: 原始型号: 在域概念中,帖子与多个评论相关联,而评论是依赖于帖子的普通模型。将此转换为代码 class Post{ Integer postId; String title; String content; String writer; Collection<Commen

Domain driven design 域模型是否应该进入无效状态?[例外与强制验证]

我已经读了很多书,但我仍然无法决定在DDD中哪种方法是更好的域验证方法 我们有两大抱负: 雄心壮志1 模型永远不应该以无效状态结束。它的状态应该通过它的方法进行严格的更改,如果传递的参数无效,这些方法将抛出异常 我喜欢这种方法的地方在于,最终得到的是干净、有保证的状态 我不喜欢的是,所有的模型调用代码最终都会导致异常处理的激增,这听起来不太正确 雄心壮志2 1,让模型以无效状态结束,但在使用模型调用model.IsValid()的代码中,如果为false,则执行model.GetErrors()

Domain driven design 域事件是如何成为DDD的一部分的?

著名的蓝色DDD书籍中没有描述域事件。它们是何时以及如何成为领域驱动设计的一部分的?埃里克·埃文斯:从这本书开始,我对DDD了解到了什么 埃里克·埃文斯:从这本书开始,我对DDD了解到了什么 域事件表示域中发生的事实,因此是域的一等公民,因此从DDD的角度来看,有非常重要的事件 更重要的是,当与另一个有界上下文交互时,它们可以表示两个有界上下文之间的契约 另外,他们在第8章中的“”中进行了介绍。领域事件表达了发生在该领域的事实,因此是该领域的一等公民,因此从DDD的角度来看,这些事件

Domain driven design 处理聚合根

我是DDD的新手,所以我正在做一些练习来了解更多一点。我有以下规则的课程BC: 必须先创建课程,然后他们才能创建一门课程的模块 每个模块将由用户在上传作业时完成 当用户完成所有模块时,课程将由用户完成 定义: 课程涵盖特定主题,由模块组成。例如,sap课程有10个模块,如:模块1:it是什么?模块2:如何使用it 在此之后,我意识到课程是模块的聚合根,因为模块已完成,我必须关闭课程的用户状态 该模式将是: public class Course : AggregateRoot { pri

Domain driven design 在微服务中,事务边界是有界上下文还是聚合?

第一个问题可能是:什么可以帮助我决定我的微服务是否应该包含一个可能包含多个聚合的整个有界上下文,还是应该只包含一个聚合 如果微服务包含多个聚合,那么我会想到另一个问题:微服务应该有多个事务边界(每个聚合一个)还是只有一个事务边界(有界上下文) 也许,这些问题的答案是:视情况而定。但我想有一些理由来做出正确的决定 我尝试实现一个实验性的微服务,它实现了一个由3个聚合和每个聚合一个事务边界组成的有界上下文,我遇到了一些难点: 微服务本身的最终一致性 以弹性的方式对微服务中的聚合和域事件发布进行原子

Domain driven design 跨多个实例的事件源并发问题

我不熟悉活动采购的概念,所以有几个时刻我不明白。其中之一是如何处理以下场景: 我有两个服务实例。它们都侦听事件队列。有两条消息:CreateUser和UpdateUser。第一个实例选择CreateUser,第二个实例选择UpdateUser。由于某些原因,第二个实例将更快地处理其命令,但由于未创建该实例,因此不会有用户进行更新 我这里出了什么问题?您没有可以解决的并发问题。这完全可以归结为使用错误的工具或不阅读文档 它们都侦听事件队列 这个队列应该支持这一点。例如azure队列,我可以在其中侦

Domain driven design 基于依赖关系查找聚合id

我有一个相当混乱的问题,因为我不确定这是否是一个全球性的设计问题 我有一个定义一些聚合的服务,这些聚合发布事件。让我们从服务中选择一个聚合并将其称为A。 现在,我定义了另一个服务,它有一些应该和A一起工作的聚合,让我们调用第二个聚合B 当A发布某个事件时,我想向B发送命令(最好是通过saga),但我很难计算B的适当id(A不知道B存在,因此它发布的事件没有关于如何计算id的任何提示) 我能想到几个可能的情况: 第一个是基于A的ID静态计算B的ID,例如在axon中,我可以执行类似于some-ID

Domain driven design 如何检查将子DDD实体添加到父(树状结构)实体是否不';不要在另一棵树上骑自行车

我正在对一个领域进行建模,其中实体是业务服务的包,可以由其他包组成——树结构。我在为避免周期设计域逻辑时遇到一些问题 假设我们有实体(类“Package”的对象)PackageA,它有子项(PackageB和PackageC)。我们还有儿童套餐B。 现在,我们希望将PackageA作为其子项添加到PackageB中——我们通过从PackagePostory获取PackageB并使用PackageB::addChildPackage()方法来实现这一点。但在此之前,我们需要确保添加此包不会在其他树

Domain driven design 考虑存储库和存储库的DDD;为实体提供的服务

我一直在熟悉DDD,并试图了解实体和聚合根的交互方式 下面是这种情况的例子: 假设有一个用户,他/她有多个电子邮件地址(例如,最多可以有200个)。每个电子邮件地址都有自己的身份,用户也有自己的身份。用户和他们的电子邮件之间存在着一对多的关系 从上面的例子中,我考虑了代码>用户< /COD>和电子邮件两个实体,而用户是聚合根< /代码> 我遇到的DDD规则: 规则:只有聚合根目录可以访问存储库 问题1:这是否意味着我不能使用单独的数据库表/集合来单独存储电子邮件?这意味着电子邮件必须嵌入

Domain driven design 代码或查找表的最佳实践

[更新]选择的方法如下,作为对该问题的回答 嗨 我一直在寻找这个主题,但我真的找不到我要找的 对于代码表,我的意思是:“婚姻状况”、性别、特定的法律或社会状态。。。更具体地说,这些类型仅具有设置属性,并且项目不会很快更改(但可能会更改)。属性是Id、名称和描述 我想知道如何在以下技术中最好地处理这些问题: 在数据库中(多个表,一个表具有不同的代码键…?) 创建类(可能类似于使用ICode.Name和ICode.Description继承ICode) 为此创建视图/演示者:应该有一个包含所有视图

Domain driven design IEnumerable<;T>;。ConvertAll&;DDD

我对IEumerable接口上的扩展方法有一个有趣的需求——与List.ConvertAll一样。这在以前已经讨论过了,我找到了一个解决方案。我不喜欢这个解决方案的地方是他构建了一个列表来保存转换后的对象,然后返回它。我怀疑LINQ写文章时不在,所以我的实现是: public static class IEnumerableExtension { public static IEnumerable<TOutput> ConvertAll<T, TOutput>(t

Domain driven design 域模型应该如何耦合?所有聚合根都应该是接口吗?

我们终于建立了一个领域模型。域模型包括用于将域对象松散耦合到持久性的接口。然而,我想知道域模型对象应该如何相互耦合 订单是指向客户还是指向ICustomer 提到了主动去耦合对象的问题,似乎不鼓励“过分使用[接口]”。然而,我不知道如何真正地单元测试我的域实体,除非我可以模拟它们所依赖的其他实体,这需要松耦合 我还不确定,想要一个可以替换出各个部分的域模型有多现实 域模型包括用于将域对象松散耦合到持久性的接口 持久性将持久化您的对象。它知道你的目标是为了保持它们。将持久性与模型分离不会给您带来任

Domain driven design 在考虑DDD时,只将一些数据传输到UI有意义吗?

假设我有一个模型考试。将有一个包含问题和答案的问题对象集合,以及每个学生回答的内容集合 我认为应用层只给表示层创建UI所需的信息是可以的。换句话说,当学生回答问题时,应用层不会将其他学生呈现给表示层 当数据返回到应用层时,也是这样。问题无法更改,因此我们只发送学生的答案以附加到域模型 这是根据E.Evans对应用层的描述:定义软件应该做的工作,并指导表达域对象解决问题。是的,这是有意义的。不仅如此,在我看来,在大多数情况下,这应该是走向架构的方向。事实上,DDD在管理复杂性方面非常出色,同时在聚

Domain driven design 域模型可以知道存储库吗?

可能是因为某些域逻辑实现实体需要访问repo以更新/删除自身或任何相关实体。这听起来正确吗?不,不正确,至少对于标有“域驱动设计”标签的问题来说是这样。 当然,活动记录模式有权在某些系统中使用,有些人认为强耦合很有用,但在DDD中,建议的方法是明确使用存储库: Evans DDD,第152页:对于需要全局访问的每种类型的对象,创建一个对象,该对象可以提供该类型所有对象的内存集合的错觉。«…»仅为实际需要直接访问的聚合根提供存储库。让客户机专注于模型,授权所有对象存储和对存储库的访问 因此,在DD

Domain driven design CQR/事件来源,如何获得一致的数据以应用业务规则?

有时,我正在使用CQRS模式和事件源开发一个小项目。 我有一个结构性问题,我不知道该采取哪种解决方案来解决它 想象一下下面的例子: 发送一个命令,其中包含银行客户已存入一定金额资金的信息(存款命令)。 在命令处理程序/实体/聚合(对于讨论来说并不重要)中,必须应用业务规则; 如果客户是账户中存款最多的10%客户之一,则可以赢得一些奖金 问题是,我如何获得最新、一致的数据,以了解客户在存款后是否处于前10%的水平 我无法使用事件存储,因为无法进行此类查询 我不确定是否可以使用read模型,因为它

Domain driven design 如何跨两个聚合根为多对一排序顺序建模

以具有多个版本的产品的中建议的域为例。在本文中,沃恩得出结论,产品和发布都应该是它们各自的聚合根 现在假设我们添加了一个特性 作为发布经理我希望能够对发布进行排序,以便我能够为向我们的用户推出更大的史诗创建时间表 我不是一个有特定需求的PM,但他们希望能够在UI中对发布进行排序,这似乎是合理的 我不确定该怎么做。每个版本都有一个order属性是很自然的,但是重新排序将涉及到在同一事务上更改多个聚合。另一方面,如果该信息存储在产品聚合中,则必须有一个类似Product.setRelaseOrd

Domain driven design DDD存储库:使用DAO进行分离?

关于它们在stackoverflow和整个web上的使用和布局存在争议。我对如何在存储库后面高效地实现数据访问抽象(例如数据库)感到困惑 我不是在使用ORM工具/框架,因为我想自己看看细节。目前,我正在使用DAO对象访问(mysql)数据库并提供业务对象(域对象)。数据库表中外键给出的关联将在相应对象的DAO中解析和加载(当前没有延迟加载)。因为我不想在业务逻辑中直接使用我的数据库DAO,所以我认为存储库是一个很好的进一步抽象。在存储库中实现诸如GetEmployeesByShopAndPosi

Domain driven design 价值对象会有行为吗?

我有一个很有价值的东西——货币和外汇。我想用外汇兑换成另一种货币。因此,在值对象ExchangeRatio上构建转换行为是否很好,如下所示: 兑换(货币)返回货币 或者我应该把它委托给某个域服务吗?换言之,我能否在价值对象上建立一种行为,这种行为不会改变其状态,但其中包含一些逻辑、数学或其他不同的对象创建(基于其状态)?你所做的对我来说完全合理。Eric Evans在他的书中使用了一个绘画对象的例子,它做了同样的事情。mixIn方法将另一个Paint对象作为输入,并返回一个新的Paint对象 通

Domain driven design 集合的存储库和根

我正在读埃里克·埃文斯的书。 我发现了一个矛盾 关于集合的章节书籍: 选择一个实体作为每个聚合的根,并控制所有 通过根访问边界内的对象 关于存储库的章节书籍: 持久对象的子集必须通过 基于对象属性进行搜索。根需要这样的通道 不便于通过横向运输到达的骨料。他们是 通常是实体,有时是具有复杂内部结构的值对象 结构,有时是枚举值。提供访问其他 物体混淆了重要的区别 仅为实际需要的聚合根提供存储库 直接访问 可以得出结论,骨料的根可以是: 实体 价值对象 枚举值 没错,我什么都懂 或者可能是对的:

Domain driven design DDD、外部数据和存储库

我想在下一个应用程序中使用DDD。我已经找到了很多有趣的论文和答案,但无法找到解决问题的方法: 我们有一个SOA。体系结构,其中一些服务被称为其数据的主服务。这很好,但我不知道如何在DDD中很好地使用它们 如果服务“employees”是employees数据的主人,那么它是对几个简单值(名字和姓氏、出生日期、地址)的crud。 我的新应用程序应该跟踪为这些员工提供的培训。因此我有了参与者的概念,参与者与员工具有相同的价值观,再加上一系列培训和一项技能 我们可以假设“trainings”应用程序

Domain driven design 在DDD应用层中,聚合的服务名称应该是复数还是单数?

在DDD中,我为应用层中的每个聚合创建一个服务,聚合名称添加在服务之前。服务的目的是提供CRUD操作,并在域层聚合上调用任何与域相关的功能 此类应用程序服务名称是否应包括复数或单数形式的聚合名称,例如ProductService或ProductsService?当创建向其他对象提供某些服务的服务提供商时,请使用单数名称并在命名上更具体,您的ProductService名称不表示对象的用途。例如,将服务命名为ProductPriceCalculator或ProductShippingInfoVal

Domain driven design 领域驱动的设计实现聚合

我已经阅读了有关创建聚合和职责的内容,我怀疑如何正确地实施它们。假设我们有上下文,其中有2个实体。一个是公司,另一个是用户。业务规则位于公司实体中,这意味着它应该成为聚合根。对于该公司,我们只能分配3个用户,当Comapny的状态为“已阻止”时,我们不能分配用户。用户还可以使用emial和密码登录。考虑到这一点,用户实体上的每个操作都应该通过聚合根调用,并且用户不应该拥有自己的存储库。当我们没有公司根目录无法直接登录时,如何对用户进行登录操作?我们不能从聚合中调用用户。如何找到提供电子邮件和密码

Domain driven design 为膳食计划应用程序识别有界上下文

我正在设计餐饮计划应用程序。我希望它有: 带有食谱的典型烹饪书(用户可以将食谱添加到烹饪书中,其中包含根据配料计算的配料量、份量、卡路里量的列表,配料可以添加到购物清单中,食谱本身可以添加到用餐计划中)。食谱可以通过一些过滤器来搜索,如烹饪类型等 膳食计划-每个工作日可修改的食谱列表 成分目录-可以通过过滤器搜索成分,每个成分都有一些值,例如卡路里。也许它会有计算器来测量(比如一勺面粉有多少克) 购物清单-从配方中添加或由用户手动添加的成分清单,可以删除这些成分并修改其数量 至于架构,我希望

Domain driven design 领域驱动的设计——一个实例问题

我想深入研究“DDD”,并且在如何明确实现一种“DDD”方式方面面临一些问题。这是我的域模型的一部分。 我想做到的是:假设我有一位技术人员开车去拜访一些客户。他一天分多次参观。例如,有一天,他上午有一次三次参观,下午有一次两次参观。在每次访问中,他都会参加一些活动,一个或多个,也可以有子活动 技术人员通过付款协议获得付款,该协议规定了每项活动的职位。该协议可能会随着时间的推移而改变,因此它有一些日期来确定它何时处于活动状态。要将活动映射到活动位置,它有一个抽象ID,该ID将根据PaymentA

上一页 1 2 ...  4   5   6   7    8   9   10  ... 下一页 最后一页 共 42 页