Soc*_*oos 9 php complexity-theory many-to-many domain-driven-design
所以我对DDD很新,我正在努力为我现在的雇主(房地产代理商)建立一个可扩展且灵活的系统,这将有助于我们加快公司内部程序的速度.
如上所述,我们在房地产.我正在尝试定义我们的UL,并且在构思某些复杂实体时遇到了问题.
例如:在房地产方面,"房地产顾问"将访问潜在的"客户家"并对其"房产"提供"评估".上市后,这个"评估"成为"上市",也可以成为"已售出房产"或"已撤回房产".有很多不同的州可以使用"财产".我是应该将"财产"定义为实体还是应将每个单独的州(评估,上市,出售,撤回)定义为单独的实体?
当我们将"客户"添加到组合中时,问题变得更加复杂.客户可以是"业主","购买者","买方","Tennant","投资者","开发者"以及许多其他人.最重要的是,客户可以是多个客户的组合!同样,"客户"应该是实体,所有这些状态只是作为"客户"实体的属性来表示,还是应该是独立的实体?
最重要的是,"客户"实体与"财产"实体的关系如何.它是一个多对多的关系,我认为没有简单的方法来组合它.DDD似乎表明实体在其存在时应该是唯一的,因此意味着我不能拥有带有附加"客户"实体列表的"财产"实体,而不会使我的"客户"实体表现得像VO.反之亦然,在考虑"客户"实体时,列出其相关的"财产"实体.
关于这个问题,过去两周我一直在阅读8小时.它非常混乱,我还没有解决这个烂摊子.任何有关正确方向的帮助和指示都将不胜感激!
我不会使用 PHP,但我可以建议如何对您的类进行建模:
创建一个名为Role 的接口(或抽象类)。 角色具有对客户端的引用
从 Role 继承以下类: Owner、Buyer、Buyer、Tennant、Investor
对于每个具体角色类,根据需要扩展成员(例如 Tennant 可能有MonthlyRent)
将角色列表添加到您的客户端。每当将新角色添加到 Client.Roles时,该角色应引用 Client
重要的部分:大多数类应该引用单独的Role对象,而不是 Client。您可以通过角色访问客户端。
创建一个名为PropertyEvent的接口(或抽象类)。向其中添加一个名为OccurredAt的时间戳属性。
从 PropertyEvent 继承以下类:Appraisal、Listing、Sold、Withdrawn
对于每个具体的 PropertyEvent 类,根据需要扩展成员(例如,Appraisal 将具有关联的 AppraisedBy?)
将PropertyEvents列表添加到您的 Property。每当状态发生变化时,创建适当的事件并将其添加到Propery.History中。
重要的部分:这是领域事件的概念。该技术将自动提供属性状态更改的历史记录。
请注意,我没有关注实体、聚合或值对象。当您对模型有更好的感觉时,您可以解决这些问题。
希望有帮助!
| 归档时间: |
|
| 查看次数: |
789 次 |
| 最近记录: |