10SOLID en anti-patterns
| Principe | Betekenis | Herkennen / toepassen |
|---|---|---|
| Single Responsibility | Een klasse heeft één taak (één reden om te veranderen). | Factuur met BerekenTotaal, OpslaanInDatabase én PrintAlsPdf → opsplitsen. |
| Open/Closed | Open voor uitbreiding, gesloten voor wijziging. | Nieuw voertuigtype = nieuwe subklasse, geen extra if/switch op type. Nieuwe logger zonder Verhuurbedrijf te wijzigen. |
| Liskov Substitution | Een subklasse moet overal kunnen staan waar de ouder staat, zonder verrassingen. | Vierkant als subklasse van Rechthoek breekt (breedte/hoogte niet los te zetten). |
| Interface Segregation | Een interface bevat alleen wat voor alle implementaties geldt. | Krijg je NotImplementedException of lege methodes? Splits de interface (IAanstuurbaar, IEnergieverbruiker, IAlertbaar). |
| Dependency Inversion | Afhangen van abstracties, niet van details. | OrderProcessor kent INotificationService, niet EmailService. |
#Anti-patterns
"Een gangbare aanpak die logisch lijkt, maar herhaaldelijk slechter uitpakt dan een bekend alternatief" (Koenig, 1995).
| Anti-pattern | Oplossing |
|---|---|
| God Class (alles in één klasse) | Opsplitsen (SRP) |
| Golden Hammer (overal hetzelfde trucje) | Passende oplossing per probleem |
| DRY-schending (copy-paste code) | Gedeelde methode of basisklasse |
Magic numbers (if (accu < 20), return -1) | Benoemde const, exception i.p.v. -1 |
Swallowed exceptions (catch { }) | Loggen, afhandelen of laten doorgaan |
#De vier OO-pijlers in één zin
| Encapsulation | Data private, toegang via properties/methodes die regels bewaken. |
| Abstraction | Alleen het essentiële tonen (abstracte klasse, interface). |
| Inheritance | Subklasse erft van superklasse (is-een), hergebruik. |
| Polymorphism | Zelfde aanroep, eigen uitvoering per type (override). |
Deze vier woorden + waar je ze in je code toepast, staan graag als commentaar boven de betreffende plek. Dat maakt je ontwerpkeuzes zichtbaar voor de lezer.