SRP и много классов - PullRequest
       31

SRP и много классов

3 голосов
/ 26 декабря 2009

Я рефакторинг некоторого кода, который я написал несколько месяцев назад, и теперь я создаю много маленьких классов (несколько свойств, 2-4 метода, 1-2 события).

Это так и должно быть? Или это тоже немного запах кода?

Я имею в виду, если классу нужно много методов для выполнения своей ответственности, я думаю, что так оно и должно быть, но я не уверен, что много маленьких классов также особенно хорошая практика?

Ответы [ 3 ]

4 голосов
/ 26 декабря 2009

Множество маленьких классов звучит просто отлично:)

В частности, если вы позволите каждому классу реализовывать интерфейс, и различные коллабораторы будут взаимодействовать через эти интерфейсы, а не напрямую друг с другом, вы сможете достичь так называемого Supple Design (термин из Домен-управляемый дизайн ) со множеством слабых связей.

Если вы можете свести его к нулю, чтобы важные операции имели тот же тип вывода, что и ввод, вы получите то, что Эванс называет Закрытие операций , что, по моему мнению, является особенно сильной техникой проектирования. .

Что происходит, когда вы применяете SRP, так это то, что, хотя все классы начинаются с малого, вы постоянно проводите рефакторинг, и время от времени случается, что порыв понимания проясняет, что некоторые конкретные классы могут быть намного богаче, чем ранее предполагается.

Сделай это, но продолжай рефакторинг навсегда:)

1 голос
/ 27 декабря 2009

Я думаю, вы должны найти средний путь. Слишком много классов иногда излишне. Со своей стороны я стараюсь отделить проблемы на более низком уровне, и если что-то идет, то рефакторинг получится более грубым:

Сначала напишите отдельные проблемы, извлекая методы. Если вы видите группу методов для данных (экземпляр + статические поля), чтобы сформировать отдельную ответственность «Извлечь класс». Через некоторое время, если вы видите различные группы классов внутри пакета, выполните «извлечение пакетов».

Я нашел этот (взрывной) подход более естественным, так как с самого начала создавал множество классов и пакетов. Но это также зависит ...: Если я уже вижу большие компоненты в начале, я уже создаю выделенные структуры пакетов.

Может быть, еще немного подробностей о вашем коде, чтобы предложить более конкретную помощь:)

1 голос
/ 26 декабря 2009

Множество маленьких классов с целенаправленной ответственностью - вот что такое srp. Так что, да, именно так все и должно быть в отношении сторонников srp. Но вы видите взрыв числа классов в вашей системе, и становится очень трудно запоминать или интуитивно знать, где на самом деле все делается, не так ли? Вы действительно обнаруживаете новый запах кода, который является (обычно ненужным) увеличением сложности, которое сопровождает srp. Я написал запись об этом здесь . Посмотрим, согласитесь ли вы.

...