Komunikacja między klasami

0

Witajcie,

uczę się Javy (i przez to OOP) i napotkałem problem komunikacji między klasami.
Na ten moment struktura klas wygląda tak:

class MainClass {
    Connector client = new ConnectorClient(...);
    Class1 member1 = new Class1(client);
    Class2 member2 = new Class2(client);
    Class3 member3 = new Class3(client);
}

Ważniejsze punkty w powyższym przypadku:

  • obiekt klasy Connector musi być wspólny dla wszystkich trzech klas memberN

  • obiekty member1, member2, member3 muszą się ze sobą komunikować

Wiem, że można przekazywać referencje w konstruktorach do pozostałych obiektów memberN i w ten sposób się komunikować, ale czy z Waszego doświadczenia można to rozwiązać w sposób bardziej elegancki, skalowalny i elastyczny?
Nie chciałbym trafić za jakiś czas na problem zbyt wielu zależności pomiędzy klasami, sami wiecie z czym się to wiąże.

Będę wdzięczy za wszelkie uwagi

1

Poczytaj o dependency injection. Wstrzykuje zależności za Ciebie

2
Progress napisał(a):

Poczytaj o dependency injection. Wstrzykuje zależności za Ciebie

Nie. DI to po prostu wzorzec, który może być zrealizowany np. poprzez Spring.

Co do samego tematu - wstrzykiwanie zależności przez konstruktor jest obecnie uznawane za eleganckie rozwiązanie - IMO największym z nich jest testowalność takiego rozwiązania. Przy czym można to rozwiązać za pomocą jakiegoś frameworku, tak, żeby za każdym razem nie pisać wszystkiego samemu.

Przy czym jeżeli klasa jest zależna od zbyt wielu klas to problemem jest pewnie zbyt skomplikowana klasa, a nie sama realizacja DI

0

@wartek01, @Progress - dzięki za cenne wskazówki! Zastanowię się nad DI.

0

Tak jak wspomniał @wartek01 DI to tylko wzorzec. Zależności za Ciebie "wszczykuje" np. IoC.
@Brunatalny DI używasz i nawet o tym nie wiesz - gwarantuję Ci.

1

Jeśli mam być szczery to tutaj pasuje na oko raczej jakiś event bus albo message passing, a nie wiązanie obiektów między sobą.

0

@Shalom: właśnie o tym myślałem, żeby obiekty już na tym etapie rozwoju nie były ze sobą ściśle powiązane.
A masz coś konkretnego na myśli poprzez message passing?

1 użytkowników online, w tym zalogowanych: 0, gości: 1