Слишком сильное сцепление или все в порядке?

Допустим, у меня есть classA, который имеет свои собственные методы со своими частными полями и тем, что у вас есть (в основном придерживаются стандартов инкапсуляции). Тогда у меня есть classB, что для его выполнения необходимо конечное состояние (которое получается одним из методов classAчто несколько нарушает инкапсуляцию) classA, И тогда у нас есть classCОпять нужно окончательное состояние classB, И так далее, и так далее, скажем, classM, Это считается слишком высокой связью или нет?

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

Окончательное исполнение будет примерно таким:

classA a = new classA;
...  //classA does its stuff
classB b = new classB(a.getFinalState());
... // again class does its stuff based on outcome of A
classC c = new classC(b.getFinalState());

И так далее.

2 ответа

Решение

Изменить: вы можете достичь того, что вы хотите, следуя шаблону делегирования и его близкому брату шаблону Decorator

Шаблон Builder, как уже предлагалось, является допустимой альтернативой. Это всегда зависит от того, к чему стремится ваш оригинальный дизайн.

Да. Существует тесная связь с уровнем 2. Это очень легко избежать и считается плохой практикой, которая снижает гибкость и возможность повторного использования кода. И тестирование это ночная кобыла.

Если они имеют взаимосвязанные свойства, рассмотрите возможность Builder Pattern,

Шаблон Builder заключается в том, чтобы найти решение анти-паттерна телескопического конструктора.

Этот конструктор анти-паттерна - это то, что у вас есть.

Другие вопросы по тегам