Entkopplung - OOP
Habe ich eine einfache Frage (das arbeiten mit Java). Ich habe zwei Klassen, eine, ein Dokument, eine zweite stellt ein Wort dar.
Die Dokument-Klasse kennen muss, um einige Infos über die Worte, die gehalten wird in Word. Meine Frage ist, was ist der beste Weg, um zu entkoppeln die beiden Klassen? Ich habe 2 Optionen in den Sinn:
-
Haben keine Verbindung zwischen den Klassen, und jedes mal, wenn ich eine Methode aufrufen im Dokument, ich pass es ein Objekt von Word (also ich habe eine Dritte Klasse mit einer main-Methode, initiiert
beide Dokument und Word). -
Deklarieren Sie eine private-Objekt von Word -, innen-Dokument.
Eine Sache zu beachten, ich habe nur ein Objekt für Word und eine für das Dokument. Ich glaube nicht, erstellen Sie ein neues Objekt für jedes neue Dokument oder word. Ich Speichere eine Liste der gesamten Dokumente in Dokument und eine Liste pf die ganzen Wörter in Word.
Dank!
- Ihr Dokument hat nur ein Wort?
- Nein, es kann viele Worte.
- dann macht es mehr Sinn, eine ArrayList von Word-Objekten in Ihrem Dokument.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin nicht einverstanden mit Ihrem Verständnis der Entkopplung. Die Entkopplung wird nicht nur über die Objekte erzeugen andere Objekte, es ist auch über die Objekte wissen über das Verhalten von anderen Objekten und (ganz entscheidend) was muss geändert werden (dein Beispiel) Dokument, wenn Word ändert.
Aber auch ich verstehe wirklich nicht, was Sie Ihr bedeuten diese beiden Sätze:
Start vom Dokument. Was können Objekte dieser Klasse tun? Sie scheinen zu sagen, dass
Wenn die Klasse Dokument enthält eine Liste, was es eine Liste? Ich glaube, Sie brauchen:
Nun ein Regal bieten könnten Methoden wie getRecentDocumets() findDocumentsContaining(String text)
und Dokument enthalten könnte getWordCount() und insertParagraph(Liste, START); und so weiter.
Haben eine bessere Diskussion, die wir brauchen, um zu sehen, ein bisschen mehr von dem, was Sie im Sinn hatte, ein bisschen mehr über das Verhalten.
Ich Stimme mit Ihrer Allgemeinen Gedanken, dass es Etwas anderes als Dokument und Word gibt. Etwas, das vernünftigerweise aufrufen von Methoden wie createDocument() und insertParagraph()
Aus meiner Sicht...
Es ist ein vernünftiger Ansatz. In diesem Beispiel erstellen Sie eine
Document
ohneWord's
, was für ein leeres Dokument, das gültig ist.Könnte man noch eine Dritte Klasse, wie Sie vorschlagen, aber ich sehe nicht den Vorteil mit es.
Sollte dein problem gelöst werden, indem die Zusammensetzung. Daher haben wir eine Liste von
Word
scheint zu sein, ein Gültiger Ansatz. Durch die Trennung von Dokumenten und Wörter, die Sie bereits erreicht haben, die erforderliche de-Kopplung. Ich nicht Ihre genauen Punkt des de-coupling-Dokument und Word-Objekte.Ihre Frage ist
Weder die option erfüllt Ihren Wunsch. Wenn Sie gehen, um zusammen zu arbeiten, dann sind Sie gehen zu gekoppelt werden. Die einzige Sache ist, wie eng oder lose die Kopplung ist.
Beide Optionen klingen wie die enge Kopplung. Eine form von loser Kopplung wäre zu speichern
interface
Referenz nehmen und es in einen Konstruktor oder eine setter-Methode.Wenn Sie möchten, dass zur Entkopplung der Klassen, einem standard-Weg ist eine Schnittstelle:
Diese Weise sowohl Klasse und Wort hängen von IWord, aber weder die Klasse, noch Wort, hängt von den anderen. Dies ist bekannt als Dependency Inversion.
Nun, zunächst einmal denke ich, du zählst deine Klassen falsch.
Urteilen, was Sie hier gesagt haben Sie so etwas wie dieses:
Und Sie möchten, um die Worte Klasse in den Dokumenten. Wenn Sie das tun wollen, das heißt, Sie können nicht entkoppeln (da Sie gegen die definition des Wort "Entkoppelung"). Ich vermute hier wieder, aber ich denke, Sie codieren möchten, können Sie es ändern Sie die Implementierung der Dokumenten-Klasse, so dass Sie könnte in Zukunft die Verwendung einer anderen Klasse, wie zum Beispiel BetterWords.
Damit zu tun, dass ich schaffen würde, entweder eine abstrakte Klasse oder eine Schnittstelle (je nach dem rest Ihrer Architektur) und dann machen die Worte, die Klasse entweder erweitern oder implementieren. Dann können Sie etwas wie das hier tun:
Oder man kann es in die Dokument-Klasse (die Worte), nicht wirklich wissen, wo Sie Sie haben wollen.