# Softwarequalität
SOLID = steht für solide Grundprinzipe, an die man sich beim Schreiben von Code halten sollte
- Single Responsibility Prinzip
- Open Closed Prinzip
- L. Substitutions
- Interface Segregation Prinzip
- Dependency Inversion Prinzip
# Single Responsibility Prinzip
Jedes Softwareelement implementiert nur einen Aspekt. Siehe SEW_Softwaremetriken
- erhöht Wartbarkeit
Bsp.: Eine Klasse kümmert sich nur um eine Aufgabe - nicht um mehr!
# Interface Segregation Prinzip
Interface - so “schlank” wie nötig. Eine bestimmte Teilaufgabe soll abgedeckt werden. Weil eine Klasse könnte mehrere Interfaces implementieren.
Bsp.: Datenzugriffsschicht - CRUD-Methoden (wir geben CRUD-Methoden in Interface)
- beide Methoden können gleiches Interface implementieren: IDatenzugriff
- IDatenzugriff unterteilen - IReadDatenzugriff, IWriteDatenzugriff
- je nachdem was Verwender benötigt muss daher nicht alles implementiert werden
Verstärkung von Kohäsion Schwächen von Koppelung
# Open Closed Prinzip
Steht eigentlich für “Open for Extension but Closed for Modification” Ist mein Code erweiterbar, ohne dass das vorher definierte geändert wird.
Prinzip kann aufgelöst werden mit: Interface, Basisklasse
Im Code-Bsp. in Skriptum>rechts: Es muss nur um eine Methode erweitert werden.
# Liskovsche Substitutionsprinzip
Alles was in Basisklasse definiert/da ist, sollte in den abgeleiteten Klassen auch da sein. Für Verwender einer Klasse muss egal sein, ob Basisklasse oder abgeleitete Klasse. Wird oft bei falschen Vererbungshierarchien verletzt.
Bsp.: Datenzugriffsschicht - eine Klasse mit Speichern
- abgeleitete Klasse: speichert in rel. DB
- abgeleitete Klasse: speichert in Dateisystem
- Verwender von abgeleiteter Klasse muss es egal sein, ob es eine Basisklasse oder abgeleitete Klasse ist.
# Dependency Inversion Prinzip
Keine direkte Abhängigkeit zw. Data Access & Business Logic
SEW_SOLID 2024-11-19 09.09.20.excalidraw
⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠ You can decompress Drawing data with the command palette: ‘Decompress current Excalidraw file’. For more info check in plugin settings under ‘Saving’
Excalidraw Data
Text Elements
Business Logic (Higher Order)
IDataAccess
Data Access (Lower Order)
Link to original