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