Где поставить валидации при следовании дизайну DCI?

Я следую DCI, чтобы структурировать поведение нового приложения на Rails, но у меня есть некоторые сомнения относительно того, куда поместить валидации.

Традиционно, если вы собираетесь управлять своими данными с использованием моделей ActiveRecord, валидации определяются в конкретном классе, который наследуется от AR, и они, похоже, подходят как часть уровня данных.

Однако, на мой взгляд, имеет смысл иметь определенные проверки, которые происходят только под определенной ролью, и их следует проверять только в том случае, если объект находится в этом контексте, игнорируясь во всех других случаях. Что в основном означает, что эти проверки должны быть определены в определенных ролях, и объект должен быть расширен этими модулями ролей, когда он используется в контексте, где это имеет смысл.

Как вы думаете, это хорошая идея, чтобы сохранить эти проверки на ролях? Если так, как вы объявляете их, не загрязняя другие экземпляры того же класса, чем объект? Если я хочу использовать проверки ActiveRecord, они объявляются на уровне класса, поэтому я не могу прикрепить их к объекту по отдельности, так как вынужден использовать повторное объявление метода экземпляра validate в модуле роли (присоединение ошибки к массиву ошибок объекта напрямую) или какой-то подобный метод.

1 ответ

Это зависит от проверок / правил, о которых идет речь. Основная цель DCI состоит в том, чтобы отделить, что представляет собой система (модель домена), от того, что система делает (функциональность), если правила связаны с моделью домена. Например, правила для согласованности SSN, то он должен быть частью объектов данных. С другой стороны, если правила связаны с функциональностью системы. Например, пользователю разрешено заказывать только два супер-товара со скидкой в ​​неделю, тогда это вопрос контекста.

Другие вопросы по тегам