2013-05-08 8 views
5

ich in einer Menge Code bemerkt haben in letzter Zeit, dass die Menschen Konfiguration hart codiert put (wie Portnummern, etc.) tief in Klassen/Methoden Werte, ist es schwierig zu finden zu machen, und auch nicht konfigurierbar.SOLID Prinzipien und Fest Code Konfiguration innerhalb einer Klasse

Ist dies eine Verletzung der SOLID-Prinzipien? Wenn nicht, gibt es ein anderes "Prinzip", das ich meinen Teammitgliedern mitteilen kann, warum es keine gute Idee ist? Ich möchte nicht nur sagen "es ist schlecht, weil ich es nicht mag", aber ich habe Probleme, an ein gutes Argument zu denken.

Antwort

3

Ein gutes Argument gegen eine TCP-Portnummer in einer Klasse hartzucodieren würde ‚Kontext Unabhängigkeit‘ Verletzung sein. Von GOOS, mit meinem Schwerpunkt:

Context Independence

... die "Kontext Unabhängigkeit" Regel hilft uns entscheiden, ob ein Objekt versteckt zu viel oder die falschen Informationen versteckt. Ein System ist einfacher zu ändern , wenn seine Objekte kontextunabhängig sind; das heißt, wenn jedes Objekt kein eingebautes Wissen über das System hat, in dem es ausführt. Dies ermöglicht uns Einheiten des Verhaltens (Objekte) zu nehmen und sie in neuen Situationen anzuwenden. Um kontextunabhängig zu sein, muss ein Objekt über die größere Umgebung, in der es ausgeführt wird, in informiert werden, in übergeben werden.

In diesem speziellen Fall von Context Independence würde ich es "Environment Independence" nennen. Mit anderen Worten, eine Klasse mit einer hartcodierten Portnummer weist eine unangemessene Abhängigkeit von einer Laufzeitumgebung auf, im Wesentlichen mit der Angabe 'Ich weiß, dass Port 7778 immer verfügbar sein wird' was eindeutig falsch ist.

0

Die SOLID-Prinzipien decken das Klassen-Design ab.

Ich vermute, dass die Idee, dass Sie die Konfiguration in Konfigurationsdateien gespeichert werden sollten normalerweise nicht so umstritten genug, um ein besonderes Prinzip zu rechtfertigen angesehen erfinden Menschen zu überzeugen! :)

Die meisten Menschen es nur aus der Erfahrung heraus, das erste Mal, wenn sie die Software erhalten versuchen, irgendwo anders als ihre eigene Entwicklung Workstation ausgeführt wird.

0

Obwohl nicht streng SOLID, ein anderer Grundsatz des OOD ist die Common Closure Principle, das besagt, dass Klassen, die zusammen zusammen verpackt sind ändern. Obwohl es sich nicht um eine Klasse handelt, könnten Sie diese Idee auf Konfigurationsinformationen ausdehnen. Da z.B. Portnummern ändern sich aufgrund anderer Kriterien als der umgebende Code, es scheint dies zu verletzen.

0

Das Prinzip der einfachen Verantwortung (das S in SOLID) besagt, dass eine Klasse nur einen Grund haben sollte, sich zu ändern. This article gibt ein Beispiel für eine Modemschnittstelle und erläutert, wie die Details zum Herstellen einer Verbindung und zum Auflegen eine separate Verantwortung für die Kommunikation von Daten darstellen und sich wahrscheinlich aus verschiedenen Gründen ändern werden. Sie könnten dies verwenden, um einen ähnlichen Fall dafür zu machen, warum Portnummern ein zusätzlicher "Grund für die Änderung" sind, getrennt von der Hauptverantwortung der Klasse.

Verwandte Themen