限界上下文和聚合根(Bounded Contexts and Aggregate Roots)

2019-07-30 05:33发布

我们正尝试使用DDD原则基于RBAC用户维护系统模型。 我们已经确定了以下实体:

Authorization is an Aggregate Root with the following:
    User   (an entity object)
    List<Authority>    (list of value objects)

Authority contains the following value objects:
    AuthorityType (base class of classes Role and Permission)
    effectiveDate

Role contains a List<Permission>
Permission has code and description attributes

在通常情况下,授权肯定是聚合根,因为一切都在用户维修围绕那(例如我可以向用户授予一个或多个机构,独立实体,其可以是一个角色或许可)

我的问题是:怎么样的角色和权限? 难道他们也是在自己独立的环境中总根源是什么? (即我有三个背景,授权,角色,权限)。 虽然可以在短短的一个方面结合所有,不会角色太重足够的,因为它会被加载为授权“对象图”的一部分?

Answer 1:

首先,我不禁觉得你误会了界上下文的概念。 什么你所描述的不列颠哥伦比亚省的我会形容为实体。 在我的脑海里,有界的上下文,它们给无处不在的语言定义不同的目的给定环境下的实体。

例如,在医院域, 病人正在门诊部门的方法,如BookAppointment()处理可能有介绍人名单,和。 患者的生命如同然而的住院治疗,就会有一个病区属性和方法如TransferToTheatre()。 鉴于此,有在患者存在两个所约束的背景:门诊及住院人数。 在保险领域,销售团队放在一起具有关联,因此成本一定程度的风险的策略 。 但是如果达到理赔部门,这些信息是没有意义的给他们。 他们只需要验证政策是否有效的要求。 因此,有两个上下文这里:销售与索赔

其次,你只是使用RBAC作为当你尝试与实施DDD的例子吗? 我想问的原因是因为DDD旨在帮助解决复杂的业务问题 - 即在那里计算是很需要(如政策风险)。 在我的脑海里RBAC是一个相当简单的基础设施服务,不与实际域逻辑关注自身,因此不保证严格执行DDD。 DDD是昂贵的投资,你不应该采取它只是为了它的缘故; 这就是为什么有界环境是很重要的 - 只有当它的合理的模型DDD的上下文。

无论如何,在这个答案听起来到的风险“学术”我现在就试着回答你的问题假设你仍然要建模以此为DDD:

对我来说,这将所有适合下一个上下文(所谓的“安全”或东西)

作为一般的经验法则,让一切都需要一个独立的交易,所以合计:

  1. 在假设系统允许当局被添加到授权对象,使授权的集合。 (虽然有可能是与机构的列表,开沟授权和简单地使用户的聚合根的说法)
  2. 机关服务没有任何意义的授权总量之外并加入一个时才被创建的,所以这些仍然为实体。
  3. 在假定系统允许权限被添加到一个角色角色成为聚合根。
  4. 权限无法创建假设/删除-也就是说,它们是由系统本身定义的,所以这些都是简单的值对象。

虽然对总设计的题目,我不能推荐这些文章就够了。



文章来源: Bounded Contexts and Aggregate Roots