Definition: Eine Softwareinheit wie Klassen, Module und Funktionen sollte offen für Erweiterungen sein und für Modifikationen geschlossen sein.
Der Ursprung des Problems: Während des Lebenszyklus der Software muss der ursprüngliche Code der Software aufgrund von Änderungen, Upgrades und Wartung geändert werden, und können Fehler in den alten Code eingeführt werden, und es kann uns auch zwingen, die gesamte Funktion neu zu überarbeiten, und der ursprüngliche Code muss erneut getestet werden.
Lösung: Wenn sich die Software ändern muss, versuchen Sie, die Änderung durch Erweiterung des Verhaltens der Softwareentität zu erreichen, anstatt vorhandenen Code zu ändern.
Das Prinzip des Öffnens und Schließens ist das grundlegendste Designprinzip für objektorientiertes Design, das uns leitet, wie man ein stabiles und flexibles System etabliert. Das Prinzip des Öffnens und Schließens kann die vage Definition der sechs Prinzipien des Entwurfsmusters sein. Es sagt uns nur, dass wir Modifikationen öffnen und schließen sollen, aber wie können wir offen und geschlossen sein und es uns nicht klar sagen. In der Vergangenheit, wenn mir jemand sagte: "Sie müssen sich an das Prinzip des Öffnens und Schließens beim Entwerfen halten", würde ich das Gefühl haben, dass er nichts gesagt hat, aber es schien, dass er alles sagte. Weil das Prinzip des Öffnens und Schließens wirklich zu leer ist.
Nachdem ich viele Artikel über Designmuster sorgfältig nachgedacht und gelesen hatte, verstand ich endlich ein wenig Verständnis für das Prinzip des Öffnens und Schließens. Tatsächlich folgen wir den ersten fünf Prinzipien von Designmustern, und der Zweck der Verwendung von 23 Entwurfsmustern besteht darin, den Öffnungs- und Schlussprinzipien zu folgen. Mit anderen Worten, solange wir uns an die ersten fünf Prinzipien halten, entspricht die soziale Software natürlich den Eröffnungs- und Abschlussprinzipien. Dieses Eröffnungs- und Schlussprinzip ähnelt eher der "durchschnittlichen Punktzahl" des Grads der Einhaltung der ersten fünf Prinzipien. Wenn die vorherigen fünf Prinzipien gut befolgt werden, ist die durchschnittliche Punktzahl natürlich höher, was bedeutet, dass die Software -Design -Öffnungs- und Abschlussprinzipien gut befolgt werden. Wenn die vorherigen fünf Prinzipien nicht eingehalten werden, bedeutet dies, dass die Eröffnungs- und Abschlussprinzipien nicht eingehalten werden.
Tatsächlich ist der Autor der Ansicht, dass das Prinzip des Öffnens und Schließens nichts weiter ist, als die Bedeutung auszudrücken: Erstellen eines Frameworks mit Abstraktion und erweitern Sie Details mit der Implementierung. Aufgrund der Flexibilität und der breiten Anpassungsfähigkeit der Abstraktion kann die Stabilität der Softwarearchitektur im Grunde genommen aufrechterhalten werden. Für die Variablendetails in der Software verwenden wir die von Abstract abgeleitete Implementierungsklasse, um sie zu erweitern. Wenn sich die Software ändern muss, müssen wir nur eine Implementierungsklasse entsprechend den zu erweiterenden Bedürfnissen erneut verderben. Natürlich ist die Prämisse, dass unsere Abstraktion vernünftig sein muss und wir in den Änderungen der Nachfrage zukunftsorientiert und vorausschauend sein müssen.
In der Definition des Eröffnungs- und Schließprinzips kann eine Softwareentität auf ein Softwaremodul, eine lokale Struktur, die aus mehreren Klassen oder einer unabhängigen Klasse besteht, verweisen.
Jede Software muss einem wichtigen Problem konfrontiert sein, dh ihre Bedürfnisse werden sich im Laufe der Zeit ändern. Wenn das Softwaresystem mit neuen Anforderungen konfrontiert werden muss, sollten wir unser Bestes geben, um sicherzustellen, dass das Systemdesign -Framework stabil ist. Wenn ein Softwaredesign dem Prinzip des Öffnens und Schließens entspricht, kann es sehr bequem sein, das System zu erweitern, und es besteht kein Grund zur Änderung des vorhandenen Codes bei der Erweiterung, damit das Softwaresystem eine bessere Stabilität und Kontinuität hat und gleichzeitig Anpassungsfähigkeit und Flexibilität aufweist. Wenn die Software -Skala immer größer wird, wird die Software -Lebensdauer länger und die Software -Wartungskosten werden immer höher, und das Entwerfen von Softwaresystemen, die den Eröffnungs- und Schließungsprinzipien entsprechen, wird immer wichtiger.
Um das Prinzip des Öffnens und Schließens zu erreichen, ist es notwendig, das System abstrakt zu entwerfen, und Abstraktion ist der Schlüssel zum Prinzip des Öffnens und Schließens. In Programmiersprachen wie Java und C#kann eine relativ stabile Abstraktionsschicht für das System definiert werden, und verschiedene Implementierungsverhalten können auf die spezifische Implementierungsschicht verschoben werden, um sie zu vervollständigen. In vielen objektorientierten Programmiersprachen werden Mechanismen wie Schnittstellen und abstrakte Klassen bereitgestellt, durch die die Abstraktionsschicht des Systems definiert und dann durch konkrete Klassen erweitert werden kann. Wenn Sie das Verhalten des Systems ändern müssen, müssen keine Änderungen an der Abstraktionsschicht vorgenommen werden. Sie müssen nur neue konkrete Klassen hinzufügen, um neue Geschäftsfunktionen zu implementieren.
Das von Sunny Software entwickelte CRM -System kann verschiedene Arten von Diagrammen wie Kreisdiagramme und Balkendiagramme anzeigen. Um mehrere Diagrammanzeigenmethoden zu unterstützen, ist der ursprüngliche Entwurfsplan in der folgenden Abbildung dargestellt:
Der folgende Code -Snippet ist in der Methode display () der ChartDisplay -Klasse vorhanden:
...... if (type.equals ("pie") {piechart chart = new pieChart (); Chart.Display (); } else if (type.equals ("bar")) {barchart chart = new barChart (); Chart.Display (); } ...... Wenn Sie in diesem Code eine neue Diagrammklasse wie LineChart hinzufügen müssen, müssen Sie den Quellcode der Display () -Methode der ChartDisplay -Klasse und eine neue Urteilslogik hinzufügen, die gegen das Prinzip des Öffnens und Schließens verstößt.
Das System wird jetzt neu konfiguriert, damit es dem Prinzip des Öffnens und Schließens entspricht.
In diesem Beispiel muss das Hinzufügen einer neuen Diagrammklasse den Quellcode ändern, da jede Diagrammklasse in der Methode display () der ChartDisplay -Klasse programmiert ist. Das System kann abstrakt neu gestaltet werden, so dass beim Hinzufügen neuer Diagrammklassen nicht der Quellcode geändert werden müssen, der das Prinzip des Öffnens und Schließens erfüllt. Die spezifischen Methoden sind wie folgt:
(1) Fügen Sie eine abstrakte Diagrammklasse Abstractchart hinzu und verwenden Sie verschiedene konkrete Diagrammklassen als Unterklassen;
(2) Die ChartDisplay -Klasse ist für abstrakte Diagrammklassen programmiert, und der Client entscheidet, welches bestimmte Diagramm verwendet werden soll.
Die Struktur nach der Rekonstruktion ist in der folgenden Abbildung dargestellt:
In Abbildung 2 stellen wir die abstrakte Diagrammklasse AbstractChart ein, und das ChartDisplay ist für die abstrakte Diagrammklasse programmiert, und der Client legt das sofortige spezifische Diagrammobjekt über die Methode setChart () fest. In der Display () -Methode von ChartDisplay wird die Anzeige () -Methode des Diagrammobjekts aufgerufen, um das Diagramm anzuzeigen. Wenn Sie ein neues Diagramm wie LineChart hinzufügen müssen, müssen Sie LineChart nur als Unterklasse von AbstractChart verwenden und ein Linechart -Objekt in das DiagrammDisplay auf den Client einfügen, ohne den Quellcode der vorhandenen Klassenbibliothek zu ändern.
HINWEIS: Da Konfigurationsdateien in Formaten wie XML und Eigenschaften Klartextdateien sind, können sie direkt über den VI -Editor oder den Notepad ohne Kompilierung bearbeitet werden. In der Softwareentwicklung wird die Änderung der Konfigurationsdateien im Allgemeinen nicht als Änderung des Systemquellcodes angesehen. Wenn ein System nur das Ändern der Konfigurationsdatei beinhaltet, wenn es erweitert wird und der ursprüngliche Java -Code oder der C# -Code keine Änderungen vorgenommen haben, kann das System als System betrachtet werden, das dem Prinzip des Öffnens und Schließens entspricht.