Frage

Ich bin finde ich mehrere Orte, die öffentliche statische innere Klassen entworfen hat, die „Helfer“ Klassen macht mein Code viel mehr Art sicher und, meiner Meinung nach, gut lesbare erweitern. Zum Beispiel stelle ich mir eine „such“ Klasse. Es gibt eine Menge von Gemeinsamkeiten für die verschiedenen Dinge, die ich für (einen Suchbegriff und dann eine Gruppe von Suchbegriffs Typen, ein Datumsbereich, etc.) suchen, indem es in einer statischen inneren Klasse erstreckt, ich fest Paar die Erweiterung und die durchsuchbare Klasse mit den spezifischen Unterschieden. Das scheint wie eine schlechte Idee in der Theorie (enge Kopplung Bad!), Aber die Erweiterung ist spezifisch für diese durchsuchbar Klasse (eine Klasse, One Purpose).

Meine Frage ist, in Ihrer Erfahrung, hat die Verwendung von statischen inneren Klassen (oder was auch immer Ihre Sprache equivelent ist) aus Ihren Code lesbarer / wartbar oder hat Sie das in der EOF beißen endete?

Auch ich bin nicht sicher, ob diese Community Wiki Material ist oder nicht.

War es hilfreich?

Lösung

Sounds durchaus sinnvoll für mich. Durch sie eine innere Klasse zu machen, Sie machen es einfach und offensichtlich einen Kandidaten für die Überprüfung zu finden, wenn die durchsuchbare Klassenänderungen.

Enge Kopplung ist nur schlecht, wenn man paar Dinge, die wirklich nicht zusammengehören, nur weil einer von ihnen geschieht, das andere zu nennen. Für Klassen, die eng zusammenarbeiten, zum Beispiel wenn, wie in Ihrem Fall, einer von ihnen besteht, die andere zu unterstützen, dann ist es „Zusammenhalt“ genannt, und es ist eine gute Sache .

Andere Tipps

Beachten Sie, dass die Klasse nicht die Einheit der Wiederverwendung ist. Daher ist eine gewisse Kopplung zwischen den Klassen normal und zu erwarten. Die Einheit der Wiederverwendung ist in der Regel eine Sammlung von verwandten Klassen.

In Python, haben wir eine Vielzahl von Strukturen.

  1. Pakete. Sie enthalten Module. Diese sind im Wesentlichen Verzeichnisse mit einem wenig Python Maschinen geworfen.

  2. Module. Sie enthalten Klassen (und Funktionen). Dies sind Dateien; und kann eine beliebige Anzahl von eng verwandten Klassen enthalten. Oft werden die „innere Klasse“ Unternehmen auf dieser Ebene behandelt werden.

  3. Klassen. Diese können innere Klassendefinitionen enthalten sowie Verfahren funktioniert. Manchmal (nicht sehr oft) innere Klassen tatsächlich verwendet werden. Das ist selten, da die Modulebene Kopplung zwischen den Klassen in der Regel vollkommen klar ist.

Die einzige Einschränkung mit inneren Klassen ist dafür, dass Sie sich nicht ganz über den Platz zu wiederholen - wie in - stellen Sie sicher, wenn Sie eine innere Klasse definieren, sind Sie nirgendwo anders gehen zu müssen, dass die Funktion nutzen, und, dass diese Funktionalität notwendigerweise mit der äußeren Klasse gekoppelt ist. Sie wollen nicht mit einem ganzen Bündel von inneren Klassen, um am Ende, die alle genau die gleiche setOrderyByNameDesc() Methode implementieren.

Der Punkt in „lose Kopplung“ ist die zwei Klassen so getrennt zu halten, wenn es Änderungen am Code in Ihrem „such“ Klasse sind nichts würde sich ändern, in den anderen Klassen sein. Ich denke, dass die statischen inneren Klassen Sie sprechen möglicherweise Code, um einen Alptraum machen könnte zu halten. Eine Änderung in der such könnten Sie durch alle statischen Klassen der Suche senden um herauszufinden welche sind jetzt wegen der Aktualisierung gebrochen. Persönlich würde ich bleiben weg von solchen inneren Klassen, wenn es wirklich aus irgendeinem Grund erforderlich ist.

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