2009-10-20 2 views
1

У меня есть вопрос об использовании методов «utility/helper» в заводском классе. Рассмотрим пример строки XML, которая перепечатывает документ. У меня есть класс, который преобразует его в «объект» (скажем, PDF, Word, CSV и т. Д.). У меня есть фабричный класс (позволяет его назвать DocumentFactory), который принимает эту строку XML и на основе определенных правил возвращает верный объект документа.Использование вспомогательных/служебных методов в классе Factory

Мой вопрос здесь в том, что с точки зрения «лучших практик» это нормально для меня, чтобы добавить методы «утилиты/помощника» в класс DocumentFactory, помогающий решить, какой тип объекта будет возвращен? Эти помощники выходят за рамки простого утверждения if/swtich. Но не более 15-20 строк.

Я использую один закрытый статический класс, а также в моем коде, и есть около 4-5 вспомогательных методов (помощники общедоступны, так как у меня есть тесты, написанные для них).

Так что эта настройка действительна для фабричного класса?

ответ

1

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

+0

«Применяются все обычные предупреждения, связанные с методом» Что это? – RayJ

+0

Ничего особенного, только то, что вы уже знаете, если читаете Фаулера. Не позволяйте этим вспомогательным методам распространяться на сотни строк запутанной логики, избегать упорядочивания зависимостей между ними, реорганизовывать их в свой класс, если вы захотите использовать их вне DocumentFactory. Что-то в этом роде. Если у вас есть тесты для них, и эти тесты являются всеобъемлющими, вы, вероятно, хорошо. –

+0

есть. я думаю, я должен быть в порядке :) – RayJ

0

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

+0

Как проверить каждый из частных методов помощника? –

+0

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

+0

точно, что я пытался выяснить. поскольку методы утилиты являются общедоступными, но не являются внутренними (думаю, высокая сплоченность), чтобы фабричный класс я рассматривал отдельный класс для хранения этих методов утилиты, а затем использовал этот класс на заводе. однако мое текущее рабочее место является архаичным, и идея использования DI неизвестна даже для менеджера по развитию здесь. без DI я добавил бы лишний «багаж», и поэтому я решил поставить их на самом Фабрике. Я рад, что согласен с этим здесь :) – RayJ

Смежные вопросы