Doel: modulaire code. Blokjes die we in elkaar kunnen schuiven.
Overzicht:
- Uitleg Dependency Inversion
- Aantal patterns a.d.h.v. code
- OO Clean code
- Value objects a.d.h.v. code
Wat willen we? Dependency Inversion
Wat hebben we? Procedurele code
Tussenstap: Parameterization
Dependency Inversion: gebruik van interface: Agent Interface
Applicatie geeft een "Factory" om een service te configureren. Agent Factory
Veelvuldig gebruik in frameworks.
DI = Dependency Injection
Factories worden soms samen geregistreerd in 1 library class.
Kleine aanpassingen kunnen gedaan worden met decorators.
(geen code voorbeeld)
Gebruikt om data te transporteren tussen componenten van de applicatie.
Voorbeeld componenten: UI, engine, database, API client, API server.
Voorkomt OOP valkuil: Fat Model
Enum wordt vaak gebruikt in een DTO. Gebruik van enum in kernlogica is een anti-pattern.
Bv: batterij gedrag, reisgedrag, overbelasting etc.
Bv: UI componenten die een model weergeven. ElectricCar
Generiekere verise: event bus.
Communicatie andersom: command bus.
- Job (bv in Unity game engine)
- Queue
- object is altijd in een geldige staat
- validatie in/door constructor
- lastig? -> builder pattern -> idee voor in AnyLogic? (voorbeeld als tijd over is)
- aanpassingen aan de eigenschappen van een object gaan via de methodes van het object.
Een object communiceert alleen via properties of parameters.
Geen globals, singletons, statics.
Niet object bomen aflopen of diepe introspectie doen:
for (var gridConnection: this.gridConnections) {
for (var asset : gridConnection.getAssets()) {
if (asset instanceof Battery) {
// do stuff with battery
}
}
}
Bouw complexe objecten door ze samen te stellen uit kleinere objecten.
Beperk overerving.
Beperk het aantal properties in een object.
"Een object is geen trekpop"
Gedrag en data gaan samen in een object.
Niet te ver doorvoeren. Af en toe een getter of setter mag.
Heilige graal van het programmeren: immutability.
Er zijn geen enteiten meer, alleen maar waarden. De entiteit wordt een verzameling van waarden door de tijd.
Het programma is "puur": een serie van transformaties van data.
Nooit race conditions: race conditions zijn alleen mogelijk als een object veranderd wordt.