Questions tagged «domain-model»

域模型由对象,行为,关系和属性组成,这些对象,行为,关系和属性构成了作为开发重点的行业。

3
带有ORM的DDD业务逻辑应该去哪里?
我过去使用过MDA(模型驱动的体系结构)工具,我们通过UML进行建模,这会生成业务实体(我们的域模型)和ORM(映射等)。 该域上的许多业务代码和服务都是该模型的一部分,并且我们的存储库正在返回业务实体(因此,不可能切换到另一个ORM(不是我们想要的))。 但是,现在我正在开始一个项目,我想从DDD角度进行思考。 到目前为止,感觉好像我将业务逻辑放入域模型中,并通过存储库与ORM(无论选择哪种)一起使用。但是,如果我想继续在应用程序的ORM部分中使用MDA工具,则此处创建的模型将非常贫乏(即不包含任何业务逻辑)。同样,如果我将实体框架(.net)或NHibernate用于我的ORM,它也将是贫血模型。我不确定如果我刚刚使用NHibernate,您会将业务逻辑放在哪里。 我是否以这种方式正确思考,换句话说,使用DDD使用域中的所有业务逻辑,而仅使用ORM通过存储库进行持久化?

4
域驱动设计和跨域交互
我是DDD的相对新手,但是我正在阅读任何东西,只要我能动手实践并提炼出我的知识即可。 我遇到了这个DDD问题,答案之一吸引了我。 DDD有界的上下文和域? 在一个答案中,张贴者给出了一个电子商务系统的示例,其中产品至少在两个域中: 1)产品目录2)库存管理 好的,这一切都有道理,即在您的电子商务前端中,您对显示产品信息感兴趣,而对库存管理不感兴趣。 但。您可能要在网页上显示库存水平,或者要显示库存的版本号(假设库存是书籍,杂志等)。此信息来自库存域。 那么,您将如何处理呢?你会 a)加载产品域和库存域聚合?b)您是否会在“产品”域实体上保留一些属性,以用于库存数量和库存版本,然后在“库存”实体更新时使用“域事件”来更新这些属性? 最后一个问题。我知道我们注定要忘记/忽略域的持久性,而只需考虑域。但是,请仔细考虑一下,在上面的示例中,我们最终可能会有2个DB表用于产品目录和产品库存。现在,我们在这些产品中使用相同的标识符吗?或者,我们可以对数据使用1个表行还是1个表行,并简单地将相关数据映射到聚合属性上?

1
ORM POCO是否取代域实体?
这有点类似于这个问题,但是范围更广。 总的来说,有了像EF 4.1这样的POM支持的ORM,现在将您的域实体作为持久化到数据库的对象有意义吗? 借助EF 4或Linq-to-SQL等较旧的ORM,您的“数据库对象”是自动生成的,并与数据库紧密耦合,因此,对于非平凡的应用程序,先将它们映射到更健壮的智能域实体投入工作。 使用较新的ORM的想法是仅构建健壮的域实体,然后具有仅提供所述域实体与您的DBMS之间映射的数据层吗? 在写作中,我感觉到这一直是目标,但使用现有工具并不容易(轻松),至少在.NET世界中并非如此。


4
用DDD(或有意义)建立模型关系?
这是一个简化的要求: 用户创建一个Question带有多个Answer的。Question必须至少有一个Answer。 澄清:思考Question并Answer像测试一样:有一个问题,但是有几个答案,其中几个可能是正确的。用户是准备此测试的演员,因此他创建了问题和答案。 我正在尝试对这个简单的示例进行建模,以便1)匹配现实生活模型2)用代码进行表达,从而最大程度地减少潜在的误用和错误,并向开发人员提示如何使用该模型。 问题是实体,答案是价值对象。问题包含答案。到目前为止,我已经有了这些可能的解决方案。 [A]工厂内Question 除了Answer手动创建,我们可以调用: Answer answer = question.createAnswer() answer.setText(""); ... 这将创建一个答案并将其添加到问题中。然后,我们可以通过设置其属性来操纵答案。这样,只有问题才能创造答案。此外,我们会避免没有问题的答案。但是,我们无法控制创建答案的方式,因为答案已在中进行了硬编码Question。 上述代码的“语言”也存在一个问题。用户是创建答案而不是问题的人。就我个人而言,我不喜欢我们创建值对象并依靠开发人员将其填充值-他如何确定需要添加什么? [B]工厂内部问题,参加#2 有人说我们应该在以下方法中使用这种方法Question: question.addAnswer(String answer, boolean correct, int level....); 与上述解决方案类似,此方法将强制性数据用于答案并创建一个也将添加到问题中的答案。 这里的问题是我们无缘无故地复制的构造函数Answer。另外,问题真的会产生答案吗? [C]构造函数依赖 让我们自由地自己创建两个对象。我们还要在构造函数中表达依赖权: Question q = new Question(...); Answer a = new Answer(q, ...); // answer can't exist without a question 这为开发人员提供了提示,因为不能毫无疑问地创建答案。但是,我们看不到“语言”表明答案已“添加”到问题。另一方面,我们真的需要看到它吗? [D]构造函数依赖项,采用#2 我们可以做相反的事情: Answer a1 …

4
确保交易与DDD的一致性
我从DDD开始,并了解使用聚合根来确保跨国一致性。我们不应在一项应用程序服务中修改多个聚合。 但是,我想知道如何处理以下情况。 我有一个称为“产品”的聚合根。 还有一个称为“组”的聚合根。 两者都有ID,并且可以独立编辑。 多个产品可以指向同一组。 我有一个可以更改产品组的应用程序服务: ProductService.ChangeProductGroup(string productId, string groupId) 检查组存在 从仓库获取产品 设置组 将产品写回到存储库 我还有一个可以删除组的应用程序服务: GroupService.DeleteGroup(string groupId) 1.从其groupId设置为提供的groupId的存储库中获取产品,确保计数为0或中止2.从组存储库中删除组3.保存更改 我的问题是以下情况,如果发生以下情况: 在ProductService.ChangeProductGroup中,我们检查该组是否存在(确实存在),然后在此检查之后,一个单独的用户(通过另一个GroupService.DeleteGroup)删除了productGroup。在这种情况下,我们为刚刚删除的产品设置了参考? 这是我设计中的缺陷吗?我应该使用其他域设计(如有必要,添加其他元素),还是必须使用事务处理?

3
什么是面向对象的思维过程?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 在过去的几个月中,我一直在与Zend的MVC实现一起研究OOP。通常,我对编程还很陌生,但是我强烈感到应该以“正确”的方式学习事物,这对我而言意味着要确保我理解为什么事情按照原样进行。即,我发现在学习如何做某事(任何事情,比如说音乐)时,学习如何做某事的最好方法是首先知道为什么要这样做。 无论如何,我一直在努力地理解如何开发自己的业务模型(例如,MVC的M),并且我决定这并不是因为我一般都不了解OOP,因为我已经研究了好几个几个月,我认为这些概念很难掌握。实际上,我发现我研究的示例非常直观。我认为,对我而言,问题在于将自己的问题转​​换为面向对象的解决方案的过程。书中的示例(到目前为止,我已经阅读过)太明显了,因此将问题转化为对象的过程并不是很困难。我认为我可能会缺少一个高级抽象过程。每个面向对象的解决方案都必须在最高级别上回答的某种步骤或问题列表。 如果您仅用五个步骤来描述这样的过程,它们将是什么,为什么?将任何问题转换为面向对象的解决方案最有效的过程是什么?

1
当前证据是否支持采用规范数据模型中的上下文?
“规范”思想在软件中无处不在。诸如Canonical Model,Canonical Schema,Canonical Data Model等模式似乎在开发中一次又一次出现。 像许多开发人员一样,我经常不加批判地遵循传统的常识,即需要规范的模型,否则您将面对映射器和翻译器的组合爆炸。或者至少,我用来做,直到几年前,当我第一次读到了几分臭名昭著的不信任投票EF: 曾经支持追求规范数据模型的假设既没有也不可能包含一旦将想法付诸实践就会发现的因素。通过多年的反复试验,我们发现针对每个单独的上下文使用单独的模型(可能在其中使用规范的数据模型)是最简单的方法,也是成本最低的方法,并且可以带来更大的可维护性和可扩展性使用上下文模型的应用程序和端点,并且这种方法不会像规范模型那样鼓励软件熵。 这篇文章没有提供任何证据来支持其主张,但是确实让我质疑CDM方法足够长的时间以尝试替代方法,并且所产生的软件在字面上或形象上都没有爆炸。但这并不意味着要孤立很多。我本来可以很幸运。 因此,我想知道,是否对软件系统或体系结构中的规范模型与上下文模型的实际,长期影响进行了认真的研究? 或者,如果现在提出这个要求还为时过早,那么有没有任何开发人员/架构师撰写过有关从CDM切换到独立上下文模型(反之亦然)的个人经验的书,以及对生产率,复杂性或可靠性等方面的实际影响是什么? 那么在不同级别上的差异又如何呢?也就是说,在单个应用程序中使用同一模型与在应用程序系统或整个企业中使用模型之间的差异呢? (请只提供事实;欢迎战争故事,但不能no测。)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.