x00xer
Новичок
Добрый день.
Возник вопрос, следующего характера:
В большинстве случаев слой валидации (выполненный в виде сервиса скажем) имеет определенный набор встроенных правил. И в большинстве своем эти правила достаточно примитивны, типа строка это или нет, адрес почты или нет и т.д. И почти всегда правила валидации применяются к одному аттрибуту.
Конечно в некоторых современных фреймворках иногда встречаются и более сложные правила валидации, с участием базы данных или зависимые от других правил к примеру, так же есть иногда возможность в правило передать, через параметры, доп. данные.
Но вот что я не могу понять, если рассмотреть на примере E-Commerce сайта, к примеру заказ (или по другому корзина): содержит в себе товары из разных категорий. И скажем у бизнеса есть необходимость правиле: корзина должна быть не меньше чем на определенную сумму, в том случае если выбрана доставка а не самостоятельный вынос товаров. Мало того, скажем, ограничение на сумму заказа должно учитывать из каких категорий товары. Пример абсолютно выдуманный, но то что хотелось им сказать, так это то, что эта доменная модель может иметь множество сложных бизнес правил валидации.
Т.е. тут очевидно не просто правило валидации, применяемое к одному какому-то аттрибуту. Тут необходимо провалидировать целиком корзину как некую сущность. Ну и конечно критериев доп. может быть много. Очевидно что простым запросом (или одним правилом валидации) тут не отделаться. Сама по себе корзина как сущность может и не существовать в БД в виде единственной таблицы. Она может состоять из десятка таблиц. Но тем не менне это Сущность (модель объекта предметной области). А вот операции характерные для предметной области это службы или сервисы (сервис валидации, сервис сохранения и т.д.). Так вот вопрос, как такие не типовые задачи решают современные фреймворки типа Laravel, Yii, Symfony? И конечно в первую очередь меня интересует валидация, особенно та что требует не тривиальной работы с БД, как такое реализовать не нарушая SOLID ? или по другому как SOLID может помочь в реализации такой задачи ?
Возник вопрос, следующего характера:
В большинстве случаев слой валидации (выполненный в виде сервиса скажем) имеет определенный набор встроенных правил. И в большинстве своем эти правила достаточно примитивны, типа строка это или нет, адрес почты или нет и т.д. И почти всегда правила валидации применяются к одному аттрибуту.
Конечно в некоторых современных фреймворках иногда встречаются и более сложные правила валидации, с участием базы данных или зависимые от других правил к примеру, так же есть иногда возможность в правило передать, через параметры, доп. данные.
Но вот что я не могу понять, если рассмотреть на примере E-Commerce сайта, к примеру заказ (или по другому корзина): содержит в себе товары из разных категорий. И скажем у бизнеса есть необходимость правиле: корзина должна быть не меньше чем на определенную сумму, в том случае если выбрана доставка а не самостоятельный вынос товаров. Мало того, скажем, ограничение на сумму заказа должно учитывать из каких категорий товары. Пример абсолютно выдуманный, но то что хотелось им сказать, так это то, что эта доменная модель может иметь множество сложных бизнес правил валидации.
Т.е. тут очевидно не просто правило валидации, применяемое к одному какому-то аттрибуту. Тут необходимо провалидировать целиком корзину как некую сущность. Ну и конечно критериев доп. может быть много. Очевидно что простым запросом (или одним правилом валидации) тут не отделаться. Сама по себе корзина как сущность может и не существовать в БД в виде единственной таблицы. Она может состоять из десятка таблиц. Но тем не менне это Сущность (модель объекта предметной области). А вот операции характерные для предметной области это службы или сервисы (сервис валидации, сервис сохранения и т.д.). Так вот вопрос, как такие не типовые задачи решают современные фреймворки типа Laravel, Yii, Symfony? И конечно в первую очередь меня интересует валидация, особенно та что требует не тривиальной работы с БД, как такое реализовать не нарушая SOLID ? или по другому как SOLID может помочь в реализации такой задачи ?