Если я хочу создать класс со списком констант и статических методов для решения каких-то рутинных задач, как его назвать — MyClassUtils или MyClassHelper? Я бы предпочел -Помощник. А в чем помощь? Мой случай заключается в совместном использовании некоторого кода между несвязанными классами: легко вызвать константу MyClassHelper.DUMMY_CONSTANT или проверить объект с помощью специальной логики MyClassHelper.isDummyObjectReallyDummy(dummyObject). Отличное решение!
Но эта дискуссия об имени неверна. Создание MyClassHelper (даже -Utils) неверно. Из-за SOLID, например.
S — в классе уживается разная специфическая бизнес-логика для типа (или для домена) (иногда слишком разная).
O — такой класс существует в статическом контексте, поэтому он не может использовать преимущества ООП, и нам нужно изменить его методы, чтобы добавить еще несколько функций вместо их переопределения.
D — в статическом контексте методы класса нуждаются во всех зависимостях до запуска программы.
Я даже видел приватный статический метод для статического хелпера — это как хелпер для хелпера.
Вот почему лучше сделать шаг назад и задать другой вопрос — куда вставить новую бизнес-логику для типа данных?
Таким образом, основная идея состоит в том, чтобы инкапсулировать логику в классе с данными, с которыми он работает. Если говорить о типе данных, то я практикую классы Wrapper — Type -> TypeWrapper.
Преимущества следующей структуры:
- Инкапсуляция бизнес-логики
- Четкая иерархия типов через наследование.
- Менее объемные частичные развертывания.
Кроме того, некоторые константы переместятся в Wrappers. Но если константа действительно необходима для совместного использования, компромиссом является использование шаблона имени класса, такого как MyTypeConstantsStore, потому что -Helper или даже-Utils не отображают цель класса в данном случае.