Haftungsausschluss: Jeder kann, aber was bin ich schlimmer ?!
SOLID ist eine Reihe von Prinzipien fĂŒr die Organisation von Code. TatsĂ€chlich erklĂ€ren sie bestimmte Regeln, die Ihnen helfen, die Nerven und die Zeit Ihrer und anderer zu sparen. Oder sie können nicht helfen.
Versuchen wir, diese Prinzipien an den Fingern zu verstehen, ohne Codebeispiele und SMS.
S - Prinzip der Einzelverantwortung (SRP)
Es sollte nur einen Grund geben, die Klasse zu Ă€ndern (âEine Klasse sollte nur einen Grund haben, die Klasse zu Ă€ndern.â Robert C. Martin.)
Stellen Sie sich vor, Sie haben fĂŒnf Lieblingslieder, ein paar Filme und Bilder von Katzen auf Ihrem Computer. Sie bringen all dies in âEigene Dateienâ und genieĂen im Allgemeinen das Leben.
Dann laden Sie weitere Filme, ein neues Album Ihrer Lieblingsband und ein Dutzend neue Katzen herunter. In "Meine Dokumente" wird es irgendwie unangenehm und Sie legen alles von Papa aus.
Musik
Filme
Dichtungen
Dann verbinden Sie eine unbegrenzte Geschwindigkeit, steigen aus den Spulen und laden alle Simpsons-Serien mit Diskografien Ihrer Lieblingsgruppen herunter. Fotos von einem Angelausflug mit Freunden werden zu den Fotos von Katzen hinzugefĂŒgt. VĂ€ter beginnen sich zu verzweigen.
Musik
Die TĂŒren
Warten auf die Sonne
Hallo, ich liebe dich.mp3
...
...
Rhcp
Agutin
Video
Fernsehsendungen
Filme
Privates Studio
Foto
Dichtungen
Angeln
PrÀferenz im Land
Kurtisanen
Und was haben wir hier?
- Musik - ist NUR fĂŒr Musik verantwortlich.
- The Doors - NUR verantwortlich fĂŒr Musik von The Doors
- Warten auf die Sonne - NUR verantwortlich fĂŒr das Album Waiting for the Sun.
- Hallo, ich liebe dich.mp3 - NUR verantwortlich fĂŒr das Lied Hallo, ich liebe dich
Was könnte der Grund fĂŒr die Ănderung in The Doors sein? Nur eine - (qualitative oder quantitative) Ănderung in den Songs von The Doors. Das Entfernen einer langweiligen Serie aus "/ Video / TV Series /" kann jedoch kein solcher Grund sein, wie das Umbenennen von "Musik" in "Musik".
Welche Schlussfolgerungen können gezogen werden?
- Bei SRP geht es um Zerlegung (sortiert in Unterordner) und Verbundenheit ("Hallo, ich liebe dich.mp3" ist nur mit "Warten auf die Sonne" verbunden und sie kĂŒmmert sich nicht um Ănderungen an "../Series". Andererseits alle Songs "The Doors" befinden sich darin und sollten sich nicht im Ordner "Cats" befinden.
- Der Abstraktionsgrad des Grundes fĂŒr die Ănderung sollte nicht höher sein als der Abstraktionsgrad der zu Ă€ndernden EntitĂ€t. Das HinzufĂŒgen des Unterordners "Alla Pugacheva" zu "Musik" kann in keiner Weise der Grund fĂŒr die Ănderung "Warten auf die Sonne" sein.
- Keine Notwendigkeit, auf den Punkt der AbsurditĂ€t zu bringen. Wenn Sie drei Songs, ein Video und fĂŒnf Bilder von Katzen haben, sehen sie auf einem Haufen groĂartig aus - wenn Sie sie in Ordner legen, wird alles nur verwirrt. Wie bei der Sammlung âThe best of The Doorsâ sollten Sie sie nicht nach Jahr in Unterordner unterteilen, von denen jeder einen Song enthĂ€lt.
O - Open-Closed-Prinzip oder OCP
Software-EntitĂ€ten (Klassen, Module, Funktionen usw.) sollten zur Erweiterung geöffnet, aber zur Ănderung geschlossen sein. " Bertrand Meyer)
Kehren wir zum Schritt unserer Geschichte zurĂŒck, als Sie die Geschwindigkeit unbegrenzt verbunden haben. Nehmen wir an, Sie haben zunĂ€chst alle Arten von Filmen ĂŒber Klempner der Filmfirma Private aufgepumpt und, da es sich ausschlieĂlich um Klempner handelte, den Ordner "/ Video / About Plumbers /" erstellt.
Nach einiger Zeit haben Sie weitere Filme aus diesem Studio heruntergeladen, aber bereits ĂŒber die Lieferung von Pizza. AuĂerdem hat dir dein neues MĂ€dchen eine SMS geschrieben: âIch habe den Filmâ Afonya âheruntergeladen und im Ordner / Video / About Plumbers / gespeichert, ok?â. Und alles scheint in Ordnung zu sein - ĂŒber Klempnerarbeiten, aber es gibt eine Nuance.
Und hier wird Ihnen klar, dass das Ăndern der FunktionalitĂ€t unmöglich ist, ohne die vorhandene Struktur von Ordnern (Klassen) zu Ă€ndern, und dies ist ein klarer VerstoĂ gegen das OCP-Prinzip.
Wie musste in diesem Fall gemacht werden? Es ist sehr einfach, das System zunĂ€chst so zu gestalten, dass fĂŒr die neue FunktionalitĂ€t der alte Code nicht geĂ€ndert werden muss. Das heiĂt, Codieren Sie den Ordner "../Pro plumbers /" nicht fest, in der Hoffnung, dass es in Zukunft nur noch solche geben wird, sondern erhöhen Sie den Abstraktionsgrad auf "../Studio Private /" und fĂŒttern Sie sie ruhig sowohl mit Klempnern als auch mit Pizzaboten usw. -andere ...
Erstellen Sie fĂŒr Afoni eine neue Klasse, z. B. "../Mosfilm/", und erweitern Sie die Klasse "/ Video /".
Schlussfolgerungen:
- Ăberlegen Sie sich im Voraus, was Sie tun werden, wenn âandereâ Filme ĂŒber Klempner erscheinen. Vielleicht sollten Sie es sofort in Ihrem Kopf tun, um es spĂ€ter nicht zu wiederholen?
- Bei diesem Prinzip geht es hauptsÀchlich um abstrakte Klassen ("../Studio Private /").
L - Barbara Liskov Substitutionsprinzip oder LSP
Objekte im Programm mĂŒssen durch Instanzen ihrer Untertypen ersetzt werden können, ohne die korrekte AusfĂŒhrung des Programms zu Ă€ndern.
Hier ist es ganz einfach.
Wenden wir uns zur ErklĂ€rung der SĂŒĂe und KindermĂ€dchen zu, insbesondere dem Ordner "/ Photo / Seals /".
Wir lieben Katzen und haben viele Fotos gesammelt.
Foto
Dichtungen
Rothaarige
Gestreift
Nass
Schwarz
Manula
Es kommt vor, dass wir sogar direkt eine Diashow ĂŒber den gesamten Stammordner starten und sie bewundern. Und so wird in einem schönen Moment, wenn Sie fast das Nirvana erreicht haben, der Bildschirm angezeigt:
Datei "/ Foto / Siegel / BĂŒcher / Der gestiefelte Kater in Boots.fb2" kann nicht angezeigt werden.
Wie sich spĂ€ter herausstellte, hat Ihr Freund beschlossen, den Grad der Niedlichkeit zu erhöhen, und die âSiegelâ mit einem neuen Unterordner des âBuchesâ geerbt, da er die LSP grob verletzt hat, da die Unterklasse âBĂŒcherâ nicht anstelle der Basisklasse âFotoâ verwendet werden kann.
Schlussfolgerungen:
- Der Name ist erschreckend, die Definition ist komplex, aber das Prinzip selbst ist einfach und intuitiv.
- Wenn Ihre Methode erwartet, dass "Foto" eingegeben wird, sollte es keine Rolle spielen, welchen Erben von "Foto" Sie ihm geben: "Manuli", "Rothaarige" oder "Nass", aber wenn "BĂŒcher" dazu kommt, dann Es wurde erwartet, dass er am Tee erstickte.
I - Interface Segregation Principle oder ISP
Clients sollten nicht von Methoden abhÀngig sein, die sie nicht verwenden.
Hier wird es schwierig sein, mit Ordnern und Dateien zu erklÀren, aber ich werde versuchen - nicht streng nach Spannungen zu urteilen.
Sie haben den Standard-Musikplayer satt und haben beschlossen, einen neuen, trendigen und Hype-Player herunterzuladen. Er weiĂ sogar, wie man das Cover eines Musikalbums und Untertitel eines gespielten Songs anzeigt. Das Problem ist jedoch, dass der Player mit einem Fehler abstĂŒrzt, wenn sich die Dateien "cover.jpg" und "subtitles.txt" nicht im Albumordner befinden. Und jetzt, da Sie alles auf der Welt verfluchen, beginnen Sie, diese Stub-Dateien in allen Unterordnern mit Alben zu erstellen.
Das heiĂt, wir haben die Musikklasse und alle ihre Erben verpflichtet, die AudioCoverSubtitles-Schnittstelle zu implementieren, da wir falsche Analogien gezogen haben. Gleichzeitig implementiert diese BenutzeroberflĂ€che nur das Album "Waiting for the Sun" vollstĂ€ndig, das Album "The Best of The Doors" implementiert nur den Audio + Cover-Teil und den Rest nur Audio.
Dies fĂŒhrt uns zu der Idee, dass es sinnvoll ist, die dicke AudioCoverSubtitles-OberflĂ€che in drei kleine Audio-, Cover- und Untertitel zu unterteilen und sie nur dort zu verwenden, wo sie wirklich benötigt werden.
Schlussfolgerungen:
- Beim ISP geht es plötzlich um die Trennung von Schnittstellen.
- Wenn Ihre Schnittstelle Sie zwingt, Stub-Methoden zu erstellen, ist dies eine schlechte Schnittstelle, und Sie sollten sie mit einer Schere durchgehen.
D - AbhÀngigkeitsinversionsprinzip oder DIP
Module der oberen Ebene sollten nicht von Modulen der unteren Ebene abhÀngen. Beide Modultypen sollten von Abstraktionen abhÀngen.
Abstraktionen sollten nicht von den Details abhÀngen. Details sollten von Abstraktionen abhÀngen.
Das Modul âTĂŒrenâ sollte nicht davon abhĂ€ngen, welche Art von Audiodateien es enthĂ€lt, .mp3, .flac oder .wav.
Das Doors-Modul, das Submodul Waiting for the Sun (und alle anderen), hÀngt von der Abstraktion der Musik auf oberster Ebene ab, die ihre Implementierung bestimmt (die Tatsache, dass sie Musik enthalten).
Angenommen, wir haben beschlossen, die Speicherung von Musik nach dem Prinzip der Komprimierung zu trennen - "verlustbehaftet" und "verlustfrei". Dies sind die Details, die die AbhĂ€ngigkeit von der Abstraktion âMusikâ verbindet - in ihnen muss es letztendlich noch Musik geben. DarĂŒber hinaus hĂ€ngt die Abstraktion âMusikâ selbst nicht von diesen Details ab. Es ist ihr egal, ob die Musik dort oder ohne sie verloren geht - wie es Musik war, bleibt es so.
Schlussfolgerungen:
- DIP - es geht darum, das Besondere sollte vom Allgemeinen abhÀngen und nicht umgekehrt.
- DIP ist "Mehr Abstraktionen fĂŒr den Gott der Abstraktionen!"
- Bei DIP geht es auch um Ursachen und Wirkungen, um die richtige Antwort auf die Frage: âZweige schwingen aufgrund der Tatsache, dass der Wind weht, oder der Wind weht aufgrund der Tatsache, dass die Zweige schwingen.â
Vielen Dank und ein schönes Wochenende!