DDD和C#-限制对子实体的访问

我几乎可以肯定,我已经忽略了一些简单的事情,但是并没有点击.

我有一个Person实体(Person汇总的根).我还有一个用于认证和授权(Auth)的子实体,该实体具有角色列表和权限列表.

我希望通过在根上使用AddAuthRole等方法通过根来管理对角色和权限的修改.

这非常简单,但是我将如何做而又不暴露Auth实体中的任何类似功能?我不希望使用引用该子项的消费者尝试针对这些列表进行添加和删除.

我感觉这是一些基本的面向对象概念,我应该为自己不了解而感到羞耻.

解决方法:

IMO限制访问集合成员的权限更多是惯例问题,而不是严格执行.我不认为您可以在“聚合”周围放置“物理”边界,它们过于严格,不必要地复杂.查看DDD / Aggregates in .NET

在您的示例中,我不太了解这些类的设计,但是如果Authentication和Authorization是Person Aggregate的成员,并且您想保护它们,则不要从外部引用它们.这只是一个基本的DDD约定,您团队中的每个程序员都应该关心-除交叉指向直接指向“聚合根”的引用外,不要交叉引用.

如果您使用不可变值对象,则访问限制和域对象保护的需求也将大大减少.角色和权限通常可以是这样的有价值的对象,使您可以将它们公开,而不必担心外部对象会弄乱它们的状态并对其进行修改.因为这首先是聚合的目的:在一个地方收集某些实体的所有操作规则,以防止任何人摆弄这些实体.

上一篇:ORB-SLAM2-ORB相关


下一篇:在PHP和OOP中使用Memcache