2016-05-26 10 views
0

Dies ist eine Frage zum Anwendungscode-Design. Hier ist meine Situation:
Ich habe eine db-Tabelle mit dem Namen Bericht, die die Menge an Arbeitszeit eines Benutzers während eines bestimmten Monats darstellt. Ich habe ein DAO, um mit der Datenbank und einem @ Service umzugehen, der die Methoden von daa kapselt und mehr Zeug mit Berichten macht.Java-Code-Design bidirektionale Zuordnung

Zusätzlich habe ich eine Tabelle Target, um den Benutzern Ziele für ihre Aktivitäten zuzuordnen (Ziele können monatlich oder jährlich sein). Ich habe wieder ein DAO und einen @Service, um diese Entitäten zu verwenden.

Meine Frage ist, über Design, weil ich eine bidirektionale Verbindung zwischen den beiden Diensten, vor allem für die folgenden Prozesse:

  • Der Berichtsdienst den Zieldienst aktualisieren muss, wenn ein Bericht hinzugefügt, modifiziert oder gelöscht ..
  • der Zieldienst den Bericht gewartet werden muss, wenn wir den Verlauf eines Ziel

ich meine Anwendung Refactoring und zu sehen, die beiden Bohnen Bohnen berechnen müssen, die einander brauchen macht mich t fühlen sein ist nicht so gut ...
Gibt es eine Möglichkeit, diese Situation richtig zu gestalten (ich meine die Verbindung zwischen meinen beiden Diensten) oder sollte ich bei der bidirektionalen Verbindung bleiben?

+0

Definieren Sie nicht die Service-Schnittstelle? Auf diese Weise haben Sie keine Abhängigkeit von den Service-Beans (Implementierungen). –

+0

Ja, ich benutze Schnittstellen für meine Dienste und meine DAOs. Aber in meinen Implementationen habe ich immer noch diese "zirkuläre" Verbindung zwischen den beiden Klassen, die nicht besonders schön und schwer zu pflegen ist, besonders in meinen Unit Tests. – gWombat

+0

Warum müssen Ziele mutiert werden, wenn Berichte sind? Kannst du das erklären? – plalx

Antwort

0

Schließlich löste ich mein Problem, indem sie einige Veränderungen in meinem ReportDAO machen und es in meinem target aufrufen. Auf diese Weise könnte ich die bidirektionale Verknüpfung zwischen meinen beiden Diensten entfernen und hätte nur eine unidirektionale Zuordnung.