Frage

Ich arbeite an einem akademischen Projekt, das eine ziemlich große Warteprozedur in Java simuliert. Der Kern der Simulator Reste innerhalb eines Pakets, wo es acht Klassen existieren, die jeweils ein einzelnes Konzept umzusetzen. Jede Klasse im Projekt folgt SRP. Diese Klassen kapseln das Verhalten des Simulators und inter verbinden jede andere Klasse im Projekt.

Das Problem, das entstanden ist, ist, dass die meisten dieser acht Klassen sind, wie logisch ist glaube ich, eng gekoppelt und jeder hat Kenntnis von jeder anderen Klasse haben, arbeiten in diesem Paket um Methoden aufzurufen daraus zu können wenn gebraucht. Die Anwendung muss nur eine Instanz jeder Klasse, so dass es besser sein könnte statische Felder für jede Klasse in einer neuen Klasse und Verwendung zu schaffen, dass Anrufe zu erhalten einen Verweis in jeder Klasse für jede andere Klasse in dem Paket (die ich -instead machen ‚m sicher, dass falsch ist) -, aber ist dies eine richtige Design-Lösung in Betracht gezogen? oder gibt es ein Design-Muster vielleicht, dass ein besseren Anzug meiner Bedürfnisse?

War es hilfreich?

Lösung

Es klingt Sie eine Art einer komplexen Zustandsmaschine haben. Sie konnten die Methodenaufrufe zwischen den Objekten als asynchrone Ereignisse abstrakt. Anstatt direkt eine Methode auf den anderen Objekten aufrufen, könnte jedes Objekt generische Ereignisse zu einem ‚Router‘ Objekt. Das Router Objekt würde das Ereignis zu einem beliebigen Anzahl von Objekten übermittelt, die ihre Zuhörer am Router registriert. Sie können Filter in den Hörern implementieren oder im Router-Algorithmus zu beschränken, der die Ereignisse empfängt. Zustandsänderungen würden auch als Ereignisse veröffentlicht.
Wenn Sie einen JMS-Server als ‚Router‘ verwenden, könnten Sie sogar Ihre Objekte auf mehreren Hosts verteilen.
Dieser Ansatz bietet eine einfache, wiederverwendbare Schnittstelle zwischen Objekten in Form einer gemeinsamen Veranstaltung schema / Schnittstelle.

Andere Tipps

Haben Sie sich Gedanken über Schnittstellen mit den Klassen zu entkoppeln? Sie haben acht Klassen, aber es ist möglich, dass Sie nur ein paar Schnittstellen benötigen zwischen Kommunikation / Interoperabilität zu ermöglichen und ein gutes Maß an Flexibilität zu gewinnen.

  

Das Problem, dass ich entstanden ist, dass die meisten dieser acht Klassen sind, wie logisch ist glaube ich, eng gekoppelt und jeder hat Kenntnis von jeder anderen Klasse haben, arbeiten in diesem Paket um Methoden aufrufen zu können, von es, wenn nötig.

Das ist in Ordnung. Die kleinste Einheit der Umsetzung (außerhalb der einzelnen Klassen) für Java-Komponenten ist das Paket. Klassen innerhalb eines Pakets werden kann eng gekoppelt. So stellen Sie sicher, dass die Kupplung nicht Leck außerhalb (verwendbare Paket-geschützten Klassen zum Beispiel).

  

Die Anwendung muss nur eine Instanz jeder Klasse so könnte es besser seine statische Felder für jede Klasse in einer neuen Klasse und Verwendung zu erstellen, dass Anrufe in jeder Klasse für jede andere Klasse machen -instead in dem Paket eine Referenz zu erhalten (was ich bin sicher, dass falsch ist)

Wenn jeder dieser acht Klassen Bedürfnisse eine Instanz aller anderen sieben Klassen haben, vielleicht die Art und Weise Sie Split-Funktionalität zwischen den Klassen ist nicht gut. Wenn jede Klasse nur einen einzigen Verantwortungsbereich hat, warum diese schwere Quer Abhängigkeit entstehen?

Sind diese Klassen mit Staat? Oder nur eine Sammlung von Methoden, die auch vielleicht statisch sein?

Aber auch hier, solange die öffentliche Schnittstelle dieses Pakets in Ordnung aussieht, würde ich nicht allzu viele Sorgen. Hat Client-Code auch über die acht Klassen wissen müssen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top