Сколько методов мы можем разумно поместить в сущность, прежде чем она будет считаться раздутой? [закрытый]


Со всеми этими чтениями о принципе единой ответственности, декомпозиции и т. д., трудно получить представление о том, что должно быть сигналом тревоги, что сущность раздувается.

Есть ли где-нибудь хороший совет/чтение о том, сколько методов мы должны считать максимальными, или есть ли какие-то объективные другие критерии?

1 4

1 ответ:

По моему мнению, твердые принципы должны рассматриваться как руководящие принципы, а не как строгие правила. Солидное нарушение обычно является надежным индикатором проблемы проектирования. Но иногда они неизбежны.

Существует довольно много метрик кода. Из NDepends:

NbMethods: (определено для приложений, сборок, пространств имен, типов) Количество методов. Метод может быть абстрактным, виртуальным или невиртуальный метод, метод, объявленный в интерфейсе, а конструктор, конструктор класса, финализатор, геттер свойства/индексатора или сеттер, сумматор или удалитель событий. Методы, объявленные в сторонних сборках не принимаются во внимание.

Рекомендации: типы, где NbMethods > 20 может быть трудно найти понимать и поддерживать, но могут быть случаи, когда это уместно иметь высокое значение для NbMethods. Например, Система.Окна.Формы.Класс DataGridView сторонних производителей насчитывает более 1000 методы.

20-это то, что авторы NDepends считают разумным порогом. Вот еще одно мнение из objecteering :

Это значение должно оставаться между 3 и 7. Это будет означать, что a класс имеет операции, но не слишком много. Значение, превышающее 7 мая укажите на необходимость дальнейшей объектно-ориентированной декомпозиции, или что у этого класса нет четкой цели. Значение 2 или меньше указывает, что это не совсем a класс, но только данные строительство.

Как вы можете видеть эти показатели довольно субъективны. Поэтому вы должны решить, что имеет смысл для вас и вашей команды. С точки зрения DDD я обнаружил, что использование Value Objects является очень хорошим подходом для уменьшения нарушений SRP на объектах.