Я припускаю, що вам потрібна перевірка для наполегливості.
Не тільки View, але і модель не повинна обробляти валідацію. Під час моїх днів в ІТ я зрозумів, що DDD - це один із способів переконатися, що ви насправді робите правильно, тобто. класи насправді відповідають за те, якими вони повинні бути.
Дотримуючись дизайну, керованого доменом, ваші моделі включають вашу логіку бізнесу, і це все. Але вони не включають перевірку, чому б і ні?
Припустимо, ви вже настільки далеко, що використовуєте Data Mapper
замість того, Active Record
щоб зберігати доменний рівень. Але все ж ви хочете, щоб моделі були перевірені, тому ви додаєте перевірку до своєї моделі.
interface Validation
{
public function validate();
}
class ConcreteModel extends MyModel implements Validation
{
public function validate() { // the validation logic goes here }
}
Логіка перевірки гарантує, що ви можете правильно вставити модель у свою базу даних MySQL ... Мине кілька місяців, і ви вирішите, ви хочете зберігати свої Моделі і в базах даних noSQL, і в базах даних, для яких потрібні інші правила перевірки, ніж MySQL.
Але у вас є проблема, у вас є лише 1 метод перевірки, але вам потрібно перевірити параметр Model
2 різними способами.
Моделі повинні робити те, що вони відповідальні , вони повинні піклуватися про вашу логіку бізнесу та робити це добре. Перевірка пов'язана з наполегливістю, а не діловою логікою, отже, перевірка не належить до моделі .
Validator
Натомість вам слід створити s, який буде приймати модель для перевірки їх конструктора як параметр, реалізувати Validation
інтерфейс і використовувати ці Validator
s для перевірки ваших об'єктів.
interface Validation
{
public function validate();
}
class MySQLConcreteModelValidator implements Validation
{
public function __construct(ConcreteModel $model) { }
public function validate()
{
// you validate your model here
}
}
class RedisConcreteModelValidator implements Validation
{
public function __construct(ConcreteModel $model) { }
public function validate()
{
// you validate your model with different set of rules here
}
}
Якщо в будь-який час у майбутньому вирішите, що ви хочете додати інший метод перевірки для іншого шару збереження (оскільки ви вирішили, що Redis і MySQL більше не є способом), ви просто створите інший Validator
і використовуєте свій IoC
контейнер, щоб отримати правильний екземпляр на вашому config
.