Designprincipper Flashcards
Hvad bruges SOLID principperne til?
bruges til at skabe struktureret, fleksibel og vedligeholdelsesvenlig objektorienteret software. reducere kobling, forbedre genbrug og gøre systemet lettere at udvide uden at påvirke eksisterende kode.
Single Responsibility Principle (SRP)
En klasse skal kun have én grund til at ændre sig – én ansvarlighed.
Motivation: Mindsker kobling og øger fleksibilitet.
Fordel: Nemmere vedligeholdelse og bedre testbarhed.
Open-Closed Principle (OCP)
Klasser bør være åbne for udvidelse, men lukkede for ændring.
Motivation: Gør det muligt at tilføje ny funktionalitet med minimal indvirkning på eksisterende kode.
Fordel: Mindsker risikoen for fejl.
Liskov Substitution Principle (LSP)
subclasses klasser skal kunne imitate deres superclasses uden at bryde funktionalitet.
Motivation: Sikrer konsistens i arv.
Fordel: Fremmer genbrug og stabilitet.
Interface Segregation Principle (ISP)
Klienter skal ikke tvinges til at afhænge af metoder, de ikke bruger. Grupper i stedet metoder og brug flere seperate interfaces.
Motivation: Reducerer unødige afhængigheder.
Fordel: Fremmer modularitet og fleksibilitet.
Dependency Inversion Principle (DIP)
Afhængigheder bør være baseret på abstraktioner frem for konkrete implementeringer.
‘peg på interfaces i stedet’
Motivation: Adskiller høj- og lavniveau-moduler.
Fordel: Øger fleksibilitet og testbarhed.
inversion of control
spring har en indbygget ioc container, der kan inistianisere objekter automatisk vha. dependency injection. “dont call us, we call u”
dependency injection
objekters afhængigheder ikke bliver skabt direkte i deres egne klasser, men i stedet leveret (injected) fra en ekstern kilde.
Spring opretter selv objekter
Objekterne får deres afhængigheder på oprettelsestidspunktet (typisk som parameter til konstruktøren) af en ekstern enhed.
-Opretter bean-instansen.
-Administrerer afhængigheder.
-Ødelægger bean’en, når applikationen lukker ned.
Dependency Inversion Principle(DIP)
Klasser på højt niveau, som implementerer kompleks logik, bør ikke påvirkes af ændringer i klassen på lavt niveau. I stedet bør klasser på højt niveau definere et interface som skal implementeres af klasser på lavere niveau.
Ses ved serviceklassen kun kender til interfacet, og ikke den konkrete implementering
Interface seggregation principle (ISP)
Klienter bør ikke tvinges til at være afhængige af metoder i interfaces, som de ikke bruger. Grupper i stedet metoder og brug flere seperate interfaces.
ses ved vores små fokuserede interfaces
Separation of Concerns (SoC)
hver part er ansvarlig for en separat bekymring, hvilket minimerer overlapningen af bekymringer så meget som muligt.
MVC-mønsteret er en klassisk implementering af SoC,
Hvad er DRY (Don’t Repeat Yourself)?
Kode skal ikke gentages unødigt.
Hver del af et system bør kun have én entydig implementering.
Hvad er KISS (Keep It Simple, Stupid)?
Systemer og kode skal holdes så simple som muligt.
Undgå unødig kompleksitet, da simpel kode er lettere at forstå og vedligeholde.
Hvad er Encapsulation?
Skjul objektets interne detaljer og eksponer kun det nødvendige via public metoder.
Fordel: Beskytter data og forhindrer utilsigtede ændringer.
Hvad er High Cohesion, Low Coupling?
Høj kohæsion: Klasser/metoder skal kun håndtere én veldefineret opgave.
Lav kobling: Klasser bør have få afhængigheder for bedre fleksibilitet og testbarhed.