Thi*_*s13 5 php domain-driven-design cqrs
假设我有两个有界上下文:计费和运输。
在计费有界上下文中我有这个:
class Account {
private $id;
private $address;
private $zipCode;
private $city;
private $postbox;
}
Run Code Online (Sandbox Code Playgroud)
在 Shipping Bounded Context 中我有这个:
class Recipient {
private $id;
private $address;
private $zipCode;
private $city;
private $doorCode;
}
Run Code Online (Sandbox Code Playgroud)
现在,众所周知,这两个模型与其他有界上下文中的另一个用户相关。
如果帐户和接收者共享相同的 ID,并且该 ID 将来自用户模型。
除了 accountId 和recipientId 之外,我是否还必须在这些模型中添加一个名为 $userId 的字段?
从 DDD 的角度来看,您应该userId为Account和添加一个字段Recipient。
原因是Recipient,Account和User都是实体。这意味着他们应该有自己的身份。即使你User总是只有一个Account,也不意味着就是User 这样 Account,所以他们不能共享相同的 id。
此外,最好从一开始就为一个用户拥有多个帐户。假设用户决定删除他的帐户。在这种情况下,我想你不应该删除他过去的订单,所以你不应该删除 aUser本身。您应该仅删除用户的Account。
如果将来同一用户决定创建一个新帐户Account,您实际上可以创建一个新帐户,并在数据库中拥有一个旧的未激活帐户和一个新的活动帐户。
但是,我可以想象当您出于某种原因决定对这些实体使用相同的 Id 时的设计,即使它不太符合 DDD 原则。但如果您决定这样做,最好为 id 字段使用明确的名称。而不仅仅是:
class Account {
private $id;
private $address;
}
Run Code Online (Sandbox Code Playgroud)
你最好有:
class Account {
private $userId; // if it's userId we should express it explicitly in the name
private $address;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1020 次 |
| 最近记录: |