Слишком сильное сцепление или все в порядке?
Допустим, у меня есть 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 заключается в том, чтобы найти решение анти-паттерна телескопического конструктора.
Этот конструктор анти-паттерна - это то, что у вас есть.