gpt4 book ai didi

php - 领域驱动设计 : Handling complex entities with many states and relations (Real Estate)

转载 作者:可可西里 更新时间:2023-11-01 12:18:07 24 4
gpt4 key购买 nike

所以我对 DDD 还很陌生,我正在尝试为我现在的雇主(房地产代理)构建一个可扩展且灵活的系统,这将帮助我们加快公司内部程序。

如前所述,我们从事房地产行业。我正在尝试定义我们的 UL,但在概念化某些复杂实体时遇到了问题。

例如:在房地产行业,“属性(property)顾问”将拜访潜在的“客户”,并对他们的“属性(property)”进行“评估”。上市时,此“评估”成为“上市”,也可以成为“已售出属性(property)”或“撤回属性(property)”。 “属性(property)”可以处于多种不同的状态。我应该将“属性(property)”定义为一个实体,还是应该将每个单独的状态(评估、上市、出售、撤回)定义为一个单独的实体?

但是,当我们将“客户端”添加到组合中时,问题变得更加复杂。客户可以是“业主”、“购买者”、“买方”、“Tennant”、“投资者”、“开发商”等等。最重要的是,客户端可以是其中多个的组合!同样,“Client”应该是实体并且所有这些状态都应该表示为“Client”实体的属性,还是它们应该是单独的实体?

最重要的是,“客户”实体与“属性(property)”实体之间的关系如何。这是一个多对多的关系,我看不出有什么简单的方法来组合它。 DDD 似乎声明一个实体在其存在时应该是唯一的,因此这意味着我不能拥有一个带有附加“客户”实体列表的“属性”实体,而不会使我的“客户”实体表现得像 VO。在考虑“客户”实体及其关联的“属性(property)”实体列表时,反之亦然。

在过去的 2 周里,我每天花 8 个小时阅读这个主题。它非常令人困惑,我还没有理清这团乱麻。任何正确方向的帮助和指示将不胜感激!

最佳答案

我不会使用 PHP,但我可以建议如何为您的类建模:


客户和角色

  1. 创建一个接口(interface)(或抽象类)称为角色角色有一个引用回客户端

  2. 继承以下类角色:所有者购买者购买者Tennant投资者

  3. 对于这些具体角色类中的每一个,根据需要扩展成员(例如 Tennant可能有MonthlyRent)

  4. 向您的客户添加一个角色列表。每当将新角色添加到Client.Roles,角色应该引用客户

重要部分:您的大部分类都应该引用单独的Role 对象,而不是Client。您可以通过角色访问客户端。


属性状态和转换

  1. 创建一个名为PropertyEvent 的接口(interface)(或抽象类)。向其添加名为 OccurredAt 的时间戳属性。

  2. 从 PropertyEvent 继承以下类:AppraisalListingSoldWithdrawn

  3. 对于这些具体的 PropertyEvent 类中的每一个,根据需要扩展成员(例如评价会有关联评估人?)

  4. PropertyEvents 列表添加到您的属性(property)。每当状态发生变化时,创建适当的事件并添加它到 Propery.History

重要部分:这是领域事件的概念。此技术将自动提供属性状态更改的历史记录。


请注意,我没有关注实体、聚合或值对象。当您对模型有更好的感觉时,您可以解决这些问题。

希望对您有所帮助!

关于php - 领域驱动设计 : Handling complex entities with many states and relations (Real Estate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4299886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com