2012-08-10 71 views
2

在DDD的世界中,检查用户在域中的角色还是应该在用户界面中发生?我问的原因是因为看起来,如果安全和角色是业务需求的一部分,看起来他们应该生活在这个领域。但是,角色检查的几乎所有示例都显示它正在UI层完成。是什么赋予了?应该在域还是UI层中检查角色?

回答

2

在一般情况下,有几个原因,身份验证和授权的关注在应用程序或用户界面级别的处理:

从建模的角度来看,这些问题往往不是固有的系统的能力。例如,用户故事可能会声明:“作为操作员,我可以打开机器...”。虽然确保只有操作员能够访问机器可能很重要,但机器本身并不关心谁可以打开它。

从实用的角度来看,这些问题通常与域保持分离,以避免将应用程序或域级服务注入实体的必要性。由于实体通常通过ORM框架进行序列化,因此将服务注入实体可能会很麻烦(有关此主题的更多信息,请参阅http://lostechies.com/jimmybogard/2010/04/14/injecting-services-into-entities/)。

+0

如果你正在处理像“操作员”这样的根,该怎么办?它的行为像'operator.TurnOnMachine()'。操作员也可能有一个声明/角色列表。 'TurnOnMachine()'方法可以检查'operator'是否有必要的声明并允许存在正确的声明(声​​明='我可以关闭机器')。虽然我同意机器不知道谁可以打开它,但操作员是这里的演员。 – 2012-08-10 19:36:50

+0

同意。绝对在UI中。 – 2012-08-15 15:12:21

+0

我在这里看到的区别是如何使用领域模型与领域模型中如何表示领域模型。在某些情况下,角色可能是您的域的内在和必要部分(例如,选择您将在视频游戏中使用哪个角色),但这与任何身份验证/授权需求无关。大多数业务应用程序用于建模用户与之交互的对象或流程,而不是用户本身。 – 2012-08-16 21:39:52