Я участвую в проекте, который очень серьезно относится к принципу единой ответственности. У нас много маленьких классов, и все довольно просто. Однако у нас есть анемичная модель предметной области - нет поведения ни в одном из наших классов моделей, они просто мешки свойств. Это не претензия к нашему дизайну - кажется, он действительно работает достаточно хорошо.
Во время анализа проекта SRP выявляется всякий раз, когда в систему добавляется новое поведение, и поэтому новое поведение обычно попадает в новый класс. Это делает вещи очень легко поддающимися модульному тестированию, но иногда меня озадачивает, потому что это похоже на вытягивание поведения из того места, где оно актуально.
Я пытаюсь улучшить свое понимание того, как правильно применять SRP. Мне кажется, что SRP выступает против добавления поведения бизнес-моделирования, которое использует один и тот же контекст для одного объекта, потому что объект неизбежно в конечном итоге либо выполняет несколько связанных действий, либо выполняет одно действие, но знает несколько бизнес-правил, которые меняют форму. своих выходов.
Если это так, то создается впечатление, что конечным результатом является модель анемической области, что, безусловно, имеет место в нашем проекте. Тем не менее, модель анемической области - это антипаттерн.
Могут ли сосуществовать эти две идеи?
РЕДАКТИРОВАТЬ: пара контекстных ссылок:
SRP - https://web.archive.org/web/20150202200348/http://www.objectmentor.com/resources/articles/srp.pdf
Модель анемичного домена - http://martinfowler.com/bliki/AnemicDomainModel.html
Я не из тех разработчиков, которым просто нравится находить пророка и следовать тому, что они говорят как Евангелие. Поэтому я не даю ссылки на них как способ заявить, что «это правила», а просто как источник определения этих двух концепций.