域示例:
1.
class Customer {
public $id;
public $purchaseLimitReached = TRUE;
}
class Order {
public $customer;
public function Order(Customer $customer) {
if($customer->purchaseLimitReached === TRUE) {
throw new Exception('Order cannot be created, customer
has reached his limits!');
}
}
}
2.
class User {
public $email;
public $emailOwnershipVerified = FALSE;
}
在情况 1 中,订单不能作为引用的客户已达到其购买限额的规则是否应该成为订单对象中域的一部分?还是应该将此规则作为授权的一部分,在域外处理?
在情况 2 中,如果用户没有验证自己(电子邮件),他对域中的任何关联/引用无权。他无法进行身份验证、发布、评论甚至查看私有(private)/隐藏数据。域对象是否应该进行检查以强制执行对用户的有效引用/关联?或者用户已经验证自己的验证是否应该是授权的一部分,再次在域之外?
最佳答案
长话短说,主要将授权视为业务规则,并为您的域建模以反射(reflect)所有这些规则。真正的授权和业务规则之间的界线很细,但是应该尽量忘记授权,尽量多考虑业务规则。授权是一个技术问题,在我看来是一个非常薄的层。
关于associations - 在 DDD 中授权和执行引用规则之间的界限在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23794895/