Załóżmy, że mam classA
, który ma własne metody z własnymi polami prywatnymi i co masz (zasadniczo przestrzegać standardów enkapsulacji). Następnie mam classB
, który potrzebuje do jego wykonania stanu końcowego (który jest uzyskiwany za pomocą jednej z metod classA
, która nieco przerywa enkapsulację) classA
. A następnie mamy classC
, który ponownie potrzebuje stanu końcowego classB
. I tak dalej i tak dalej, powiedzmy, classM
. Czy uważa się to za zbyt duże sprzężenie, czy nie?Zbyt wysokie sprzężenie lub w porządku do takiego projektowania?
Edycja: Ok, załóżmy, że projektowałem system Łupów, który zależy od tego, czy spadek nastąpi w wyniku pokonania wroga (każdy przeciwnik ma inną szansę spadnięcia). Jeśli wróg zostanie pokonany, rzeczy bitewne klasy będą rzucać kostką, niezależnie od tego, czy coś spadnie, czy nie, a następnie muszę przekazać ten stan drugiej klasie obsługującej dystrybucję łupów. W przypadku upuszczenia łup zdobywa łupy, a gracz otrzymuje wygraną łupu i jego dystrybucję, jeśli nie, unieważnia.
Ostateczne wykonanie byłoby coś takiego:
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());
i tak dalej.
Nie rozumiem tutaj problemu? Dlaczego po prostu nie przekazać obiektu a do konstruktora obiektu b? Może przesłuchiwać go za pomocą normalnych środków w celu określenia stanu bez zrywania enkapsulacji. Jeśli obawiasz się zbyt dużej ekspozycji, może spróbuj użyć pakietów pobierających prywatnie lub odizolować interfejsy do swoich modułów? Zadajesz dobre pytania, ale myślisz zbyt mocno. ;-) – jgitter