- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力设计这个系统,其中地址是最核心的信息。现在在这种情况下,地址不仅仅是几行字符串。我们将市政当局(代码、名称)、地区(邮政编码、名称)、街道(代码、名称)、门牌号存储在属于市政当局的特定地区的街道上。这是一个非常规范的方案。
因此,我们拥有相互关联的实体 Municipal、District、Street 和 HouseNumber,为一个人(或其他东西)定义了一个完整的地址。
现在我一直在试图弄清楚拥有一个名为 Address 的聚合根是否有意义?然后,地址实体(聚合根)将引用 HouseNumber、Street、District 和 Municipal。然后一个人将与一个地址相关联。
严格来说这个聚合根是没有必要的,但如果我没有它,我将不得不遍历许多对象才能获得完整的地址。基于该参数创建聚合根是否有意义?
在这种情况下,除了聚合根之外,一个人永远不会引用任何东西,但是 UI 可能只显示市政当局(在浏览地址等时)。这是否违反了聚合根的想法?
我真的很想得到你的建议并解决这个问题。任何帮助都感激不尽!
一点更新从另一个关于我的问题的讨论中:
需要对一些不变量进行总体管理。例如;一世
在一个区/市的街道上不能有门牌号,其中
邮箱位于另一个不同的区/市。所以在赋值的时候
一个地址/人的邮箱,我需要确保它们在同一个
区。
还有一些一致性边界(如果我理解这个概念
正确的方法)。如果我有地址,这必须有一个地区的门牌号
一条街道(在那个地区)。一条街道可以跨越多个地区,所以它是
确保该街道上的门牌号码正确无误
区。
关于设计聚合的更新:
门牌号实际上是地址的入口点。门牌号与街道和地区相关联。所以一个人与一个门牌号相关联。我还想定义的是,一个人是否对该门牌号有“邮政责任”。引入聚合根地址,使人与那个而不是门牌号相关联。在数据库中,聚合地址将包含与门牌号的 1-1 关联,并且地址与人员具有 1-* 关联。我应该将表明该人是否有邮政责任的值存储在哪里?我应该在地址聚合中这样做吗?或者去哪里
你把它?我的实体也是如此——我应该在哪里表明该人是否有邮政责任?
最佳答案
要区分地址是值对象还是实体,请问自己一个问题——如果个人地址发生变化并且第二个人的地址相同——两者都会改变吗?如果它们都发生了变化 - 地址被提升为实体(因为地址身份很重要而不是值(value))。
要区分地址是实体还是聚合根,请问自己一个问题 - 地址本身是否有意义,或者它总是与人相关,通过它修改,与它一起删除?如果它不与人绑定(bind)而是单独存在(在模型中你是在建模而不是现实),那么地址是一个聚合根。
Strictly speaking this aggregate root is not necessary, but if I don’t have it, I would have to traverse many objects to obtain the full address. Does it make any sense to create an aggregate root based on that argument?
A person will never reference anything but the aggregate root in this case, however the UI might display only Municipalities (when browsing addresses, etc.). Is this a violation of the aggregate root idea?
Two persons can be associated to the same address, and if one of them move the other doesn't move automatically.
Addresses exists on their own and if a person move to an address, he gets associated with it.
If I understand it correctly (http://msdn.microsoft.com/en-us/magazine/dd419654.aspx - the part about aggregates), then whether an address can exist without a person (or other addressee) is irrelevant; the question is whether the address-constituents can exist or be accessed without the address. If they can, Address shouldn't be an aggregate root.
关于oop - DDD : Address as an aggregate root?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3241333/
这里有一个很大的设计缺陷,但我无法解决它: 业务需要有点涉及,所以我会尽量保持简单。 我们有一张购物表和一张退货表。当进行退货时,我们必须找到与数据库中最早购买的退货匹配,并将其记录在“已应用退货”表
在我的家庭项目中,我遇到了确定域对象类型的问题。 领域:公交时刻表 限界上下文:路由(公共(public)交通基础设施,ctx1)、时间表(调度,ctx2) 对象: Station - 描述一个公交车
我有一个名为“产品类型”的值类型,它被分配给了一个产品。 (一个产品有一个产品类型) 为了允许用户从列表中选择类型,我将填充一个下拉列表。在哪里检索产品类型列表最合适?一个实现存储库模式的类? 编辑:
域这个词在 DDD 中究竟是什么意思?我一直在阅读定义……虽然我看到了域模型之类的东西并理解模型是什么 - 域模型是什么意思? 域实际上是什么意思? 谢谢 最佳答案 域是指您的应用程序解决的主题。 例
DDD 中的域模型应该与持久性无关。 CQRS 要求我为我不想在读取模型中包含的所有内容触发事件。 (顺便说一下,将我的模型拆分为一个写模型和至少一个读模型)。 ES 要求我为所有改变状态的事件触发事
Eric 在他的书中触及了 的主题。模块 很少。他也没有通过示例讨论模块结构与有界上下文的关系。限界上下文是否包含模块或模块包含限界上下文?当应用程序具有 DDD 时,它的可扩展性有多容易? 在我们设
前言 笔者于2021年入职了杭州一家做水务系统的公司,按照部门经理要求,新人需要做一次个人分享(主题随意)。 当时笔者对DDD充满了浓厚的兴趣,之前也牛刀小试过,于是就决定班门弄斧Show一下
上部分 模型驱动设计的构造块 为维护模型和实现之间的关系打下了基础。在开发过程中使用一系列成熟的基本构造块并运用一致的语言,能够使开发工作更加清晰而有条理。 我们面临的真正挑战是找到
3. 领域对象的生命周期 。 每个对象都有生命周期,如下图所示。对象自创建后,可能会经历各种不同的状态,直至最终消亡——要么存档,要么删除。当然很多对象是简单的临时对象,仅通过调用构造函数来创建
为了保证软件实践得简洁并且与模型保持一致,不管实际情况如何复杂,必须运用建模和设计的实践. 某些设计决策能够使模型和程序紧密结合在一起,互相促进对方的效用。这种结合要求我们注意每个元素的细节
大家好,我是 ddd 设计的新手,正在尝试使用这种在 C# 中工作的模式开发我的第一个应用程序 在我的应用程序中,我有一个包含子实体 Assets 的聚合合约,当添加或结算 Assets 时,我应该在
我正在尝试弄清楚如何使项目的一些消费者(业务客户)的不变量保持一致,他们对同一版本的聚合根有自己的要求。让我们以客户为例,提出假设性问题以满足以下愚蠢的逻辑: public class Custome
我见过一些具有实体值对象表示的 DDD 项目。它们通常显示为 EmployeeDetail、EmployeeDescriptor、EmployeeRecord 等。有时它包含实体 ID,有时不包含。
我试图了解如何表示某些 DDD(域驱动设计)规则。 遵循蓝皮书约定,我们有: 根实体具有全局身份并负责检查不变量。 根实体控制访问,并且不会被其内部结构的更改所蒙蔽。 对内部成员的 transient
我对 ddd 中的验证方法有疑问。我已经阅读了相当有争议的意见。有人说这应该在实体之外,其他人说这应该放在实体中。我试图找到一种我可以遵循的方法。 例如,假设我有带有电子邮件和密码的 User 实体。
寻找有关如何解决此问题的建议,并了解域驱动设计是否真的是这里的最佳模式。 我的客户正在重新构建其几近过时的工具和服务堆栈。客户是一个快速扩张的电子商户。它的核心产品是它的大型电子商务网站。围绕该网站,
我很难找出实现依赖于数据库中存储的数据的业务规则验证的最佳方法。在下面的简化示例中,我想确保用户名属性是唯一的。 public class User() { public int Id { g
情况: 要处理域事件,Jimmy Bogart proposed 一种将事件存储在聚合中的方法。 在我看来,这是一种非常方便的方法。但是,域服务中的域事件怎么办? 域服务不应该有状态(stateles
我正在处理遗留项目,试图改进项目结构。我的问题是我应该如何组织代码结构。我看到两个选项: #1 business-domain / layer app/ ----accout/ --------app
根据 DDD 原则,所有处理与特定聚合根对象相关的实体的 CRUD 操作都应该由聚合根进行。 但是我们如何从 aggr 根中仅更改实体的单个属性?我们应该在实体中有 setter 方法吗?这些方法应该
我是一名优秀的程序员,十分优秀!