Разбиение объектов на самые основные части - PullRequest
6 голосов
/ 29 октября 2010

Не уверен, что название отражает то, что я пытаюсь здесь сказать.

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

Больше всего меня беспокоит наполнение классов тоннами вещей или разбиение объектов и растворение моих проектов в море классов.

Любая помощь?

EDIT:

Полагаю, что в примечании / подтеме часть меня хочет выяснить уровень детализации, который вы должны использовать в программе. Вид, как низко вы должны идти?

Ответы [ 6 ]

4 голосов
/ 29 октября 2010

Больше всего меня беспокоит наполнение классов тоннами вещей или разбиение объектов и растворение моих проектов в море классов

Это очень верный аргумент и в любом случаемасштабный проект, крайне сложно получить право сразу, особенно потому, что в действительности в большинстве случаев требования сами по себе меняются со временем.Вот тут-то и приходит «Рефакторинг». Вы разрабатываете на основе того, что знаете в любой данный момент, и стараетесь не слишком совершать слишком много прыжков веры в то, что, по вашему мнению, система МОЖЕТ развить.

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

Дизайн, основанный на том, чтоВы знаете -> Build It -> Просмотрите это -> Refactor it -> Re-design -> и это продолжается и продолжается ..

1 голос
/ 29 октября 2010

В вашем конкретном случае, если у вас уже есть фабричный объект, то принцип СУХОГО (не повторяйте себя) сказал бы, что плохая идея - создать другую фабрику, которая делает то же самое.это актуальная проблема, с которой вы сталкиваетесь?Или просто страх перед тем, как ваш код может вырасти в будущем?

1 голос
/ 29 октября 2010

Эмпирическое правило, которое мне нравится, чтобы решить, "это становится слишком большим сейчас?" такое "я могу объяснить цель этого кратко?" Если вы начинаете вводить предостережения и множество ласка слов, чтобы объяснить функции компонента вашего дизайна (будь то класс, переменная-член, метод или что-то еще), это может быть хорошим индикатором того, что он становится слишком сложным и должен быть разделен .

1 голос
/ 29 октября 2010

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

0 голосов
/ 29 октября 2010

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

Не уверен, правильно ли я вас понял, но это звучит как кандидат на AbstractFactory шаблон.

0 голосов
/ 29 октября 2010

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


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

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

...