Похудеть класс-переросток

День 7 конкурса качества кода Бена Оренштейна

Есть ряд причин, по которым вы должны заботиться о размере ваших классов при программировании.

Меньшие классы лучше придерживаются своей единственной ответственности

Согласно части S принципов SOLID, у класса должна быть единственная ответственность. Первое из четырех правил для разработчиков Sandi Metz гласит, что класс не должен превышать 100 строк. Идея заключается в том, что если ваш класс превышает 100 строк, он, вероятно, также превышает свою единственную ответственность.

Меньшие классы легче отлаживать

Когда класс становится большим, может быть трудно понять внутреннюю логику. Особенно, если класс нарушает принцип единой ответственности, трудно сразу понять, какие сценарии может обрабатывать класс, какие методы важны в каждом сценарии и где могут возникнуть проблемы в коде.

Легче поддерживать общедоступный интерфейс небольшого класса.

Открытый интерфейс вашего класса описывает другим программистам, как вы ожидаете использовать этот класс. Это позволяет вам установить важные проверки для любых данных, входящих в класс или выходящих из него. Делая внутренние методы частными, общедоступные методы выделяются и одновременно защищают и документируют намерения класса. Если ваш класс разрастается, может быть трудно поддерживать это разделение между общедоступным и частным. Это усложняет использование и сопровождение класса. Если все методы являются общедоступными, гораздо сложнее узнать, что можно изменить, а что может быть использовано в каком-то неожиданном уголке приложения.

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

Бен предлагает три потенциальных идентификатора для этих групп методов:

  1. Несколько методов, использующих один и тот же параметр.
  2. Несколько методов, которые обращаются к одним и тем же данным экземпляра.
  3. Несколько методов, в названии которых есть одно и то же слово.

Например, у вас может быть класс, предназначенный для сборки счетов-фактур, и несколько методов в этом классе предназначены для проверки и форматирования почтового адреса получателя. Эти методы форматирования адреса на самом деле не относятся к объекту счета-фактуры, поэтому, возможно, логика принадлежит классу AddressFormatter или самому объекту Address.

Этот пост является частью моей серии после 30-дневного испытания качества кода Бена Оренштейна. Любая полезная информация, содержащаяся в этих сообщениях, полностью благодарна ему и другим замечательным людям на форуме Challenge.