Есть ли что-то не так с этим pattern? Это только вопрос личного выбора, если состояние класса хранится в полях и свойствах или передается между статическими методами с использованием аргументов?
Исходя из моего личного опыта, я работал на 100 приложений KLOC, которые имеют очень очень глубокое hiearchies объекта, все наследует и перекрывает все остальное, все реализует полдюжины интерфейсов, даже интерфейсы наследуют полдюжины интерфейсы, система реализует каждый шаблон дизайна в книге и т. д.
Конечный результат: настоящая ООП-тастическая архитектура с таким количеством уровней косвенности, что требуется много часов для отладки чего-либо. Недавно я начал работу с такой системой, где кривая обучения была описана мне как «кирпичная стена, а затем гора».
Иногда чрезмерно усложненный ООП приводит к таким гранулярным классам, что это на самом деле чистый вред.
Напротив, многие языки функционального программирования, даже такие OO, как F # и OCaml (и C#!), Поощряют плоский и мелкий hiearchy. Библиотеки в этих языках, как правило, обладают следующими свойствами:
- Большинство объектов Pocos, или в большинстве одного или двух уровней наследования, где объекты не намного больше, чем контейнеры для логически связанных данных.
- Вместо классов, вызывающих друг друга, у вас есть модули (эквивалентные статическим классам), управляющие взаимодействиями между объектами.
- Модули, как правило, действуют на очень ограниченное количество типов данных и имеют узкую область видимости. Например, модуль списка OCaml представляет операции над списками, модули клиентов облегчают операции с клиентами. Хотя модули имеют более или менее ту же функциональность, что и методы экземпляров в классе, ключевое отличие от модулей-библиотек заключается в том, что модули гораздо более автономны, гораздо менее гранулированы и, как правило, имеют мало, если есть зависимости от других модулей.
- Как правило, нет необходимости переопределять методы объектов подкласса, поскольку вы можете передавать функции как объекты первого класса для специализации.
- Хотя C# не поддерживает эту функцию, functors предоставляет средство для подкласса специализированных модулей.
Наиболее крупные библиотеки, как правило, более широкий, чем глубокий, например, Win32 API, PHP библиотеки, Erlang BIFS, OCaml и Haskell библиотеки, хранимые процедуры в базе данных, и т.д. Так что этот стиль программирования бой тестирование и, кажется, хорошо работает в реальном мире.
На мой взгляд, лучшие разработанные API-интерфейсы на основе модулей, как правило, легче работать, чем лучшие разработанные API ООП. Однако стиль кодирования столь же важен в дизайне API, поэтому, если все остальные члены вашей команды используют ООП, а кто-то уходит и реализует что-то совершенно в другом стиле, тогда вам, вероятно, следует попросить переписать, чтобы более точно соответствовать кодировке команд стандарты.
http://www.stackoverflow.com/questions/790281/ –
Также http://stackoverflow.com/questions/2410584/is-it-ok-to-wind-up-using-mostly-static-classes/ 2410849 # 2410849 – ewernli
После вашего редактирования я бы сказал, что да, определенно должен быть экземплярным классом, потому что вы поддерживаете состояние (электронную таблицу Excel), поэтому у меня будет класс, который принимает ваш результат в конструкторе, а другой метод «Сохранить (имя файла строки)» или «Сохранить (Worksheet excel)», чтобы создать электронную таблицу Excel. Все другие методы, которые я предполагаю, являются вспомогательными методами и должны быть частными. –