|
|
1
5
我想先排除第二种方法。它不仅看起来有违直觉,而且违反了一些好的设计原则,例如 Command-Query Separation 以及 Principle of Least Surprise . 其余选项取决于域逻辑。如果域逻辑规定没有ID的顺序是无意义的,那么ID是必需的顺序不变量,我们必须对其进行建模,以便:
注意,通过标记
您可以通过在构造函数中放入一个guard子句来进一步加强域逻辑,以防止ID为负或为零。 到目前为止,您可能想知道这将如何处理数据库中自动生成的ID。嗯,没有。 没有好的方法来确保提供的ID尚未使用。 这给你两个选择:
在许多情况下,创建新订单是一种业务操作,在任何情况下都需要特定的建模,因此我认为区分这一点没有问题。尽管order和orderrequest在语义上非常相似,但它们甚至不必在类型层次结构中相关。 我甚至可以说他们 不应该 关联,因为orderrequest是 值对象 鉴于订单是 实体 . 如果采用这种方法,addorder方法必须返回一个订单实例(或者至少是ID),否则我们就无法知道刚刚创建的订单的ID。这让我们回到了违反CQS这就是为什么我倾向于 实体ID首选guid . |
|
|
Naghi · 如何将ssh隧道远程添加到现有的repo? 2 年前 |
|
|
dc2023 · 有没有办法在特定的分支上进行git镜像克隆? 3 年前 |
|
|
Veotani · 如何注册通用存储库的依赖关系? 8 年前 |
|
|
topcool · Asp核心,对象引用未设置为存储库模式中对象的实例 8 年前 |