GRASP
GRASP (General Responsibility Assignment Software Patterns (or Principles))
- Creator, en klasse skal oprette objekter, som den bruger, indeholder eller har tæt relation til.
- Controller, en klasse som håndterer systemhændelser og koordinerer mellem lag.
- Low coupling, en klasse bør have så få afhængigheder som muligt.
- High cohesion, en klasse bør have et klart og fokuseret ansvar.
- Indirection, indfører et mellemled for at reducere afhængigheder.
- Pure Fabrication, en kunstig klasse for at samle teknisk ansvar, som ikke hører naturligt til i domænet.
Der er lidt faglig diskussion om, hvorvidt det er principper eller mønstre. Larman konkluderer, at det er lidt ligemeget hvad vi kalder det, bare vi bruger det.
Controller, high cohesion, polymorphism og low coupling har vi arbejdet med ud af de 9 principper.
- High Cohesion: Metoderne i klasserne hænger sammen og er tæt relaterede, så man ikke har en ”gud”-klasse ("gud"-klasse, ejer det hele).
- Low coupling: lav klasser, sådan de ikke har særlig mange andre klasser der er afhængige af dem, nemmere vedligeholdelse, gør alting er adskilt.
- Controller: Minder meget om ViewModel, da den håndterer events og koordinerer operationer mellem UI-laget og Model laget.
Creator:
- En creator er en klasse som står for at lave nye instanser af en klasse.
- Eksemepl: Repositories der har en Create metode er creators.
Information Expert
- Giv et ansvar til den klasse som har informationen der skal bruges til at udføre det.
- Eksempel: Consignment klassen holder information omkring consignment. Derfor giver det god mening at consignmentet selv også holder styr på om det er blevet afrapporteret. fordi det er den klasse som er bedst stillet til det ansvar.
Low Coupling
- Lav kobling mellem klasser. Handler om at klasser er så lidt afhængige af hinanden som muligt.
High Cohesion
- Metoder i en klasse har høj samhørighed. Metoder skal relaterere sig til hinanden
Controller
- Håndterere events og uddelegere opgaver.
Pure fabrication
- Lav nye klasser i stedet for at bryde High cohesion og low coupling.
Indirection
- Brug intermediaries (mediator pattern) eller abstrakte klasser til at holde og øge fleksibiliteten i programmet.
Polymorphism
- Method overriding, method overloading, constructor overloading/chaining.
Protected variations
- ???