可以在 DCI 上下文中拥有未绑定的角色吗?

Posted

技术标签:

【中文标题】可以在 DCI 上下文中拥有未绑定的角色吗?【英文标题】:Ok to have unbound roles in a DCI Context? 【发布时间】:2012-12-09 21:49:30 【问题描述】:

我正在处理 CreditCardPayment 上下文,并发现某些上下文方法并不需要所有角色。例如,方法CreateSecurityHash 可能需要所有角色,但VerifyHash 只需要一个。不绑定所有角色可以吗?如果是这样,如何引入多个构造函数并只绑定需要的内容,如下所示:

public CreditCardPayment(objectA, objectB, objectC)

  BindRoles(objectA, objectB, objectC)


public CreditCardPayment(objectA)

  BindRoles(objectA, null, null)

虽然知道在执行此操作时允许调用哪些上下文方法,但感觉很困难。所以我想知道:

这还可以吗(如果可以,为什么?),或者 整个场景是否表明需要另一个上下文,或者 我是否应该始终保留上下文并提供角色所需的所有对象?

【问题讨论】:

为每个调用创建一个新上下文的目的是什么?为什么不在支付过程中让上下文存在? 很好,我当然会这样做。因此,作为一项规则,角色应该始终被绑定? 【参考方案1】:

如果您不想绑定所有角色,那么您应该去问自己几个问题。您已经问过其中一位“我应该创建两个上下文吗?”要回答这个问题,我会将上下文视为一个漏洞。如果它确实模拟了一个过程,那么不要将它分成几个。我们希望对最终用户的心智模型进行建模。如果该模型很复杂,我们无法改变它,但我们可以通过反映它来提供帮助。

在您的特定情况下,您似乎确实在为一个流程建模,在这种情况下,您应该将上下文保持为一个流程。绑定角色一次,并知道从那时起您可以安全地调用使用交互。

不绑定角色会导致代码非常难以推理。 “调用这个方法安全吗?”只有在运行时您可以看到已绑定哪些角色时,您才能回答这个问题。所有角色总是同时绑定在此发生在交互之前或者是交互的第一部分

【讨论】:

以上是关于可以在 DCI 上下文中拥有未绑定的角色吗?的主要内容,如果未能解决你的问题,请参考以下文章

DCI,“上下文”概念的问题以及相互了解的角色

DCI 上下文的责任?

如何使用 DCI 模式测试行为?

如何理解 DCI 模式

DCI 上下文中的错误处理?

Web 应用程序中的 DCI 上下文