associations - 在 DDD 中授权和执行引用规则之间的界限在哪里?

标签 associations authorization domain-driven-design cqrs business-rules

域示例:

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/

相关文章:

c# - ASP.NET MVC : Problem setting the Authorize attribute Role from a variable, 需要常量

asp.net-mvc - 在哪里引发与持久性相关的域事件-服务,存储库或UI?

domain-driven-design - 在哪里检查用户电子邮件尚不存在?

javascript - 同时使用hasOne和belongsTo有什么意义吗?

ruby-on-rails - Ruby 中 Association 的相关内容 (on Rails)

ruby-on-rails - 嵌套关联,如何为 View 、 rails 准备变量

python - 如何在实时网站上的 Django 中向 Google 授权应用程序

ruby-on-rails - Rails 协会无法批量分配外键

authentication - JWT 和 session 的黑名单有什么区别?

namespaces - 跨域(DDD)实体的命名空间