在下面的模型中,地址不应该是值对象吗?

2024-05-17

From 值对象如何存储在数据库中? https://stackoverflow.com/questions/679005/how-are-value-objects-stored-in-the-database/ :

假设公司和个人都有相同的邮件地址。 这些陈述中哪些被认为是有效的?

1.“如果我修改 Company.Address,我希望 Person.Address 自动获取这些更改”

2.“如果我修改Company.Address,它一定不会影响Person.Address”

如果 1 为 true,则地址应该是实体

如果 2 为真,则地址应该是值对象。

不应该在上述模型中发送邮件Address be a 值对象,因为即使Company and Person有相同的邮件,该邮件仍然没有概念标识?

换句话说,如果最初Company and Person share [电子邮件受保护] /cdn-cgi/l/email-protection,但随后收到新邮件[电子邮件受保护] /cdn-cgi/l/email-protection,那么我们可以认为邮件地址[电子邮件受保护] /cdn-cgi/l/email-protection本身并没有改变,而是Company and Person替换为[电子邮件受保护] /cdn-cgi/l/email-protection ?

因此,据我了解,一个事实是Address共享应该不足以赋予它个性(即身份)?!

谢谢


是的,你的理解是正确的。Address几乎应该总是一个值对象,因为在大多数域中,地址确实只是一个值。

事实是,一个Company and a Person有相同的Address今天并不意味着如果一个改变,另一个也应该改变。如果存在这种关系,则应通过显式约束对其进行建模,而不是通过Address一个实体。

埃里克·埃文斯 (Eric Evans) 在他的优秀著作中谈到了这一点领域驱动设计 https://rads.stackoverflow.com/amzn/click/com/0321125215甚至提供了一个具体的例子Address可能是一个实体——邮政服务,其域围绕地址展开,并且个人地址的身份很重要。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在下面的模型中,地址不应该是值对象吗? 的相关文章

  • 如何定义分层数据结构的DDD聚合根?

    我目前正在尝试将领域驱动设计原则应用于我的开发实践 我一直致力于如何为按层次结构组织的数据定义聚合根 我们以文件夹结构为例 每个文件夹可以有 0 N 个子文件夹 子文件夹 0 N 也可以有 0 N 个子文件夹 依此类推 我对文件夹及其所有直
  • 域对象和值对象 - 它们相等吗?

    通过查看 Zend 快速入门教程中的域对象示例以及考虑 DAO VO 模式的其他示例 它们似乎非常相似 我们能否推断出 值对象 与 域对象 是一样的 如果不是 您能澄清一下它们之间的区别吗 其中一个的功能是什么 如果另一个的功能又如何呢 我
  • 核心数据与同一实体的多个关系

    我现在已经对核心数据进行了相当多的研究 现在我决定是时候在我正在做的新项目中使用它了 我从未在工作项目中使用过它 只是遇到了一些问题 我想获得社区的反馈 我正在做一个基于位置的应用程序 我想在我的核心数据模型中存储 郊游 因此对于每次旅行
  • 是否有在基于 DDD 的分层架构中的模型层和数据访问层之间使用 LINQ 的建议模式

    我一直在读蒂姆 麦卡锡的书关于 NET 中的 DDD 的精彩书籍 http www amazon co uk NET Domain Driven Design Solution Programmer dp 0470147563 但在他的示例
  • DDD和应用层

    我在DDD中添加 Stateful Stateless WebService等是应用层 应用服务 吗 从下面的链接来看 这似乎是正确的 第二个问题 我创建了一个存储库类 所有涉及存储库的方法调用都应该包装在应用程序服务中吗 或者我可以直接在
  • DDD 领域模型复杂验证

    我正在努力使用域驱动设计原则重写我的 ASP NET MVC 应用程序 我正在尝试验证我的用户实体 到目前为止 我能够验证基本规则 例如用户名和密码是非空 空白字符串 然而规则之一是 我需要确保用户名是唯一的 但是 我需要访问数据库才能执行
  • 在 symfony2.1 上的“entity”buildForm 上使用“query_builder”时,“此值无效”

    这是我的问题 我用buildFormsymfony 2 1 上的方法来构建我的表单 使用以下代码一切正常 builder gt add combat entity array class gt KarateCompetitionBundle
  • 实体框架中的聚合根支持

    我们如何告诉实体框架骨料 http domaindrivendesign org node 88 保存聚合时 保存聚合内的实体 删除聚合时 删除聚合内的实体 当两个不同的用户尝试修改同一聚合中的两个不同实体时引发并发错误 加载聚合时 即使在
  • 在 Symfony2 中使用 json 数据水合实体

    有没有办法用 Symfony2 中传入请求的 json 数据来水合实体 我以为有类似的东西 Form bindRequest 但我找不到任何东西 如果能将这个功能与 knockout js 等库一起使用 那就太好了 如果您需要从 JSON
  • MapStruct 实现在 Spring Boot Web 应用程序中不起作用

    我是 Spring Boot 的新手映射结构 http mapstruct org Tool 早些时候 一个项目 由其他团队使用这些技术编写的 没有启动 然后 我在 Mapper 抽象类中进行了一些更改 但现在 Mapper 对象在应用程序
  • 使用流程管理器(又名 saga)在同一有界上下文中跨聚合根实现最终一致性

    假设您的有界上下文中有两个聚合 它们之间存在一些约束 使用 DDD 这些内部聚合约束不能在同一事务中强制执行 即聚合边界是事务边界 您是否会考虑使用 Microsoft CQRS 旅程中所谓的 流程管理器 来协调同一有界上下文中的两个聚合
  • 如何在 EF4 中获取实体的第一个 EntityKey 名称

    如何获取 Entity Framework 4 实体的第一个 EntityKey 名称 因为我正在构建存储库系统 并且我想通过 Id 获取项目 EF 中的主键是实体的第一个实体键 我正在使用这个代码 public virtual TEnti
  • 如何在 CQRS 中处理基于集合的一致性验证?

    我有一个相当简单的域模型 涉及一系列Facility聚合根 鉴于我使用 CQRS 和事件总线来处理从域引发的事件 您如何处理集合的验证 例如 假设我有以下需求 Facility必须有一个唯一的名称 由于我在查询端使用最终一致的数据库 因此在
  • 每个“容器”类一个 DAO 还是每个表一个 DAO?

    我有一个 容器 类 其中的字段包含在多个数据库表中 并且我使用 DAO 模式来访问数据 问题是 我应该为这个 容器 类创建一个 DAO 还是每个表都有一个 DAO 并合并它们的数据更好 您应该根据应用程序的需求而不是数据库的布局来设计 DA
  • 缺失的事件如何重播?

    我正在尝试了解有关 CQRS 和事件溯源 事件存储 的更多信息 我的理解是 在这种情况下通常不使用消息队列 总线 消息总线可用于促进微服务之间的通信 但它通常不专门用于 CQRS 然而 我目前的看法是 消息总线将非常有用 可以保证读取模型最
  • ADO 实体框架创建不需要的实体键

    我需要使用无法更改的数据库中的表 使用链接服务器 因此 我的架构的一部分是这些表的视图 我无法在数据库中创建 FK 当我在 ADO NET 实体框架中创建关联时 我遇到了问题 因为外部数据库表上的第二列有一个索引 并且 EF 正在为其创建一
  • Symfony2:PrePersist/PreUpdate 生命周期事件未触发

    两个实体画廊相册 and 画廊图片具有 OneToMany ManyToOne 关系 One GalleryAlbum can have gt Many GalleryImage Many GalleryImage can be in gt
  • 为实体框架中的实体创建基类

    我想创建一个对我的所有实体都通用的基类 该类将具有 Save Delete GetByID 等方法以及其他一些基本功能和属性 我在 Linq to SQL 方面有更多经验 希望能在 EF 中获得一些类似的好示例 谢谢 像这样 public
  • 如何使用 Linq 将实体表与交叉引用表连接起来

    首先我要说的是 我对 Linq 比较陌生 但我似乎很快就掌握了其中的大部分内容 但这个问题却难倒了我 我找了又找都没有结果 我使用代码优先并创建了 2 个模型 项目 和 关键字 他们之间存在多对多的关系 我的实体模型如下所示 public
  • Symfony 2:实体的位置

    我是 Symfony 2 的新手 我想知道一些事情 假设我的项目中有 2 个捆绑包 我想在两个包中使用从我的数据库生成的实体 我应该在哪里生成实体 对我来说 最好的方法是在捆绑包之外 但我不知道如何做到这一点 感谢您的帮助 我认为有两种解决

随机推荐