Когда я разрабатываю свое программное обеспечение, я, как правило, создаю целую тонну ThingyHelper.java, FooHelper.java, BarHelper.java и т.д. Я посчитал, и в текущем проекте, над которым я работаю, есть что-то вроде более 40 классов что выглядит примерно так:
public final class FoobarHelper {
// Prevent instantiation
private FoobarHelper() {throw new AssertionError();}
public static void doSomething() {}
public static int foobar() {}
// And many more
}
Мой вопрос таков: хорошая идея объединить все эти классы в огромный класс Helper.java? Оглядываясь, на эту тему ничего не написано. Мое мнение таково:
Я должен это сделать, потому что:
Есть ли соглашение для вспомогательных классов, или если нет, было бы ужасной идеей?
Я утверждаю, что ваша проблема заключается не в том, что у вас слишком много этих классов, а в том, что вам нужны эти классы вообще.
Основная идея объектной ориентации заключается в объединении функциональных возможностей и данных в объекты, которые затем представляют ваш программный поток. Не зная приложения, ваши классы полезности предлагают использовать неживые классы компонентов, которые затем обрабатываются слоем служебных функций. Это признак процедурного программирования и ничего не нужно реализовать с помощью Java.
Кроме того, нет никаких оснований для объединения ваших методов утилиты. Так что я бы ответил не на ваш вопрос. Существуют некоторые законные применения классов полезности, таких как классы Java Math
, Collections
(они также будут лучше сочетаться с объектными методами, но языковые ограничения/ограничивают такое определение), и вы могли бы просто столкнуться с одним из них. Обратите внимание, что Java решила сгруппировать такие методы полезности по своей семантике. Имеет смысл определить методы утилиты в одном пространстве имен, чтобы ваша среда IDE могла помочь вам выбрать функцию, когда вы вводите только класс (который не представляет собой настоящий класс, а скорее пространство имен функций в этом контексте). В конце концов, речь идет о поиске баланса. Если у вас есть один метод утилиты для каждого класса, для других трудно найти эти методы, поскольку они должны знать о имени класса. Если есть только один класс утилиты, может оказаться проблематичным найти функцию всех предложенных. Подумайте о классе утилиты как о форме помощника навигации (пространство имен) и решите, что вы найдете интуитивно понятным.