Frage

Ich habe gerade gelesen, SRP, so einfach wie 123 ... , und alles mit mir außer einem Absatz mitschwingt, in einem Abschnitt mit dem Namen „Kohäsion“ (ich habe zu Zusammenhalt „bekommen“, aber diese Rede von Parametern vs Instanz beansprucht vor Felder gibt mir Pause ...):

Nehmen Sie Ihre Klasse. Schauen Sie sich Ihre Methoden. Haben sie Parameter oder sind sie mit Instanzfelder? Wenn sie sind mit Hilfe von Parametern, entfernen Sie diese. Machen sie Instanzfelder. Haben Sie am Ende mit Methoden, die nur eine der Verwendung fünf Instanzen? Das wahrscheinlichste ist ein Warnung der niedrigen Kohäsion, dass besteht zwischen diesem Verfahren und Ihre Klasse.

Ist das Entfernen der Parameter lediglich eine temporäre Trainingsmethoden zu offenbaren, die nähern statisch-Fähigkeit (niedrige Kohäsion), mit der Idee ist, dass Sie sich auf die Verwendung von Parametern zurück, wenn Sie fertig sind?

Oder ist die Präferenz für Instanzfelder über Parameter eine Ist-Design-Technik eine hohe Kohäsion zu halten?

Habe ich das Zitat aus dem Zusammenhang irgendwie genommen?

War es hilfreich?

Lösung

CRUD ist ein echtes gemeinsames Konzept für basierte Programmierschnittstelle. Nehmen Sie zwei konkrete Klassen, die einen CRUD-Schnittstelle implementieren. Mitarbeiter und Gebäude

Nun stell dir vor, wie Ihr Code Parameter aussehen, bezogen:

Employee employeeObj = new Employee();
Building buildingObj = new Building();

string firstName = "Bob";
employeeObj.Create(firstName);

Was über den Bau?

BuildingTypes buildingType = BuildingTypes.One;
building.Create(buildingType);

Woops ... wie soll man CRUD-Schnittstelle mit unterschiedlichen Parametern implementieren? Erstellen Sie Überlastungen? Weitere Schnittstellen? Was ist mit zwei params (Vorname Nachname)?

Dies wird so hässlich so schnell .... denn sobald Sie die Parameter mit einer CRUD verwenden Schnittstelle Sie mehr als einen Grund zu ändern haben, die das Design der Zusammenhalt nimmt ab.

Lassen Sie uns versuchen mit unserer Objekte / Instanz basierend params ...

Employee empObj = new Employee();
empObj.FirstName = "Bob";

empObj.Create();

Building buildingObj = new Building();
buildingObj.BuildingType = BuildingTypes.One;

buildingObj.Create();

Mit einfachen CRUD und kein params man sogar in Polymorphismus streuen können:

someObj.Create();

Dies führt auch zu einem verkapselten Zusammensetzung, Entkopplung, SRP, etc ...

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