Хорошо, чтобы иметь несвязанные роли в контексте DCI?
Я работаю над контекстом CreditCardPayment и обнаружил, что не все роли необходимы для некоторых методов контекста. Например, метод CreateSecurityHash
может потребоваться все роли, но VerifyHash
требуется только один. Можно ли не связывать все роли? Если да, то как насчет введения нескольких конструкторов и связывания только того, что нужно, например:
public CreditCardPayment(objectA, objectB, objectC)
{
BindRoles(objectA, objectB, objectC)
}
public CreditCardPayment(objectA)
{
BindRoles(objectA, null, null)
}
Хотя трудно знать, какие контекстные методы разрешено вызывать при этом. Итак, я хотел бы знать:
- Это все еще нормально (если так, почему?), Или
- Является ли весь сценарий признаком того, что нужен другой контекст, или
- Должен ли я сохранить контекст и предоставить все объекты, необходимые для ролей, всегда?
1 ответ
Если вы чувствуете, что не связываете все роли, есть несколько вопросов, которые вы должны задать себе. Вы уже спросили одного из них "Должен ли я создать два контекста?" чтобы ответить на этот вопрос, я бы посмотрел на контекст как на дыру. Если он действительно моделирует один процесс, не делите его на несколько. Мы хотим смоделировать ментальную модель конечных пользователей. Если эта модель сложна, мы ничего не можем сделать, чтобы изменить это, но мы можем помочь, отразив ее.
В вашем конкретном случае может показаться, что вы действительно моделируете один процесс, и в этом случае вы должны сохранить контекст как единое целое. Назначьте роли один раз и знайте, что с этого момента вы можете безопасно использовать взаимодействия.
Не связывание ролей приведет к коду, о котором нелегко рассуждать. "Будет ли безопасно вызывать этот метод?" Вы сможете ответить на него только во время выполнения, когда увидите, какие роли были связаны. Все роли всегда связаны одновременно, это происходит до взаимодействия или является первой частью взаимодействия