Модель занимает главное место в ddd. Она включает в себя данные и методы работы с ними. Все понятно когда в приложении модель полностью контролируется разработчиком, но что если архитектура приложения модульная и позволяет включать сторонние модули которые расширяют функционал модели.
Например, есть класс User.
class User
{
private $name;
public function getName()
{
}
public function setName()
{
}
}
Теперь в стороннем модуле нужно чтобы пользователь научился определять: хороший ли он.
public function isGoodPerson()
{
return $this->name === 'Vasya';
}
Самое простое что можно сделать - наследование. Сразу откидываем вариант (module 2: isBadPerson).
Остается создать новый класс который будет требовать модель User и в котором будет нужный метод. В этом и вопрос: не нарушается ли главный принцип опп (да и ddd) когда манипуляция над данными происходит вне класса?
Нарушается? Тогда как расширять модели?