Posts

Visual Studio: Debug informatie schrijven naar Output window

Met zowel Debug.WritelLine() als met Trace.WriteLine() kan je berichten tonen in de Output window van Visual Studio. Het verschilt tussen deze twee methode heeft te maken met het builden van de applicatie. Als je build configuratie op 'Release' staat, dan negeert de compiler alle 'Debug' statements. Deze statements zitten dus niet in de gemaakte assemblies (dll, exe). De 'Trace'-statements worden niet  genegeerd, wat dus betekent dat deze wel  in de assemblies zitten. Naast de 'WriteLine' bieden Debug en Trace ook andere methodes, zoals bijvoorbeeld 'Assert'. Met deze methode kunnen condities worden opgegeven. Pas als aan een conditie wordt voldaan, dan pas wordt er naar de Output window geschreven. bron:  https://support.microsoft.com/en-us/kb/815788

Clean Code - Design Patterns

Design patterns zijn onder te verdelen in drie categorieen: Creational patterns Helpen om instanties van objecten te maken. Structural patterns Helpen om de communicatie op te zetten tussen gescheiden groepen objecten. Behavior patterns Helpen om het gedrag van de systemen onder te verdelen in discrete classes. Ondanks dat de patterns zijn gecategoriseerd, allemaal volgen ze hetzelfde doel: dependency management. Elk pattern is een kristalisatie van de SOLID principles. Ze zoeken allemaal uit hoe de elementen te scheiden van het systeem.

Clean Code - Transformation Priority Premise

De transformation list is als volgt opgebouwd: Null (return null) Null to constant (verander return null naar bij. 2) Constant to Variable (verander bijv 2 naar een variabele) Add computation (maak gebruik van -, +, *, etc.) Split flow (Voeg een if else statement toe, en niet meer dan 2 paden) Variable to Array (maak van een variabele een array) Array to Container (maak van een array een list) If to While (verander de if naar een while loop) Recurse (maak een recursieve methode) Iterate (maak gebruik van een for of een foreach loop) Assign  Add case (Voeg een else if blok toe) Indien er meerdere keuzes zijn om een richting te bepalen, ga dan voor de keuzedie het dichtst bij 1 zit. De kans is waarschijnlijk groter dat dit een betere uitkomst biedt.

Clean Code - Mocking

Tijdens het testen kan het voorkomen dat je nep objecten moet gaan gebruiken. Deze nep objecten komen in verschillende gradaties en vormen een hierarchie. Onderstaand de hierarchie van hoog naar laag. - Test double (= abstract) - Dummy - Een subclass die geen gedrag kent. Alle functies retourneren een waarde die zo dicht mogelijk bij 0 of null ligt. - Stub - De functions voeren geen acties uit en geven fixed waarden terug die de producitecode sturen richting het pad dat getest moet worden - The spy - is hetzelfde als de stub, maar onthoud waarden die bruikbaar zijn voor de test. Zo kan bijvoorbeeld geckeckt worden of er een bepaalde functie is aangeroepen of hoevaak een bepaalde functie is aangeroepen. Deze waarden kunnen dan later weer door de test worden uitgelezen. - The (true) mock - heeft alle eigenschappen die een spy ook heeft. Daar bovenop heeft een mock ook nog een bijzondere feature: hij weet water zou moeten gebeuren. De test checkt niet wat de mock bespioneert. De t...

Clean Code - Component Coupling

Stable Dependencies Principle Als van een component meerdere componenten afhankelijk zijn, dan is dit een stabiel component. Een aanpassing op dit component heeft grote gevolgen voor de componenten die er van afhankelijk zijn. Als een component afhankelijk is van alleen maar andere componenten dat is dit een instabiel component. Dit omdat geen andere componenten afhankelijk zijn van dit component. Als je dus code hebt dat veel zal veranderen, plaats deze code dan in een instabiel component. Een stabiel component mag alleen maar afhankelijkheden hebben met andere stabiele componenten. Als een stabiel component afhankelijk is van een instabiel component dan heeft een aanpassing in een instabiel component grote gevolgen op de componentstructuur. De stabiliteit van een component is te berekenen: 1 - Tel het aantal componenten dat afhankelijk zijn van het component (= fan in); 2 - Tel het aantal componenten waarvan het component zelf afhankelijk is (= fan out). Pas deze uitko...

Clean Code - Component Cohesion

Wat zit er precies in een component? Uit welke onderdelen bestaat een component? En wat zijn de krachten wat deze onderdelen samenbrengen? De onderdelen zijn de functies. De krachten die deze functies bij elkaar brengen wordt cohesian genoemd. Classes zijn de eerste laag van cohesion voor functies. De enige zichtbare onderdelen van een class zijn de publieke functies. De data van een class wordt altijd verborgen gehouden. Classes zijn een verzameling van functies die allemaal opereren op dezelfde data. Net als functies kunnen classes ook samenhangend (cohesive) zijn. Soms horen classes bij elkaar en soms niet. De kracht van class cohesion bepaald in welk component een class behoort. Het doel van een goede componentstructuur is om ze onafhankelijk van elkaar de deployen. Common Closure Principle Components zijn altijd onderdeel van 1 layer (ui, middleware, data), niet meerdere. In andere woorden, components do'nt cross boundaries. Als een requirement verandert of toegevoeg...

Clean Code - Components

Een component is niets anders dan een onafhankelijke deployable library, zoals een dll. Onafhankelijk deployable houdt in dat een verandering in 1 component geen invloed heeft op het compileren en deployen van andere componenten. De voordelen van afhankelijke componenten zijn dat zij onafhankelijk van elkaar kunnen worden deployed, maar ook onafankelijk van elkaar kunnen worden ontwikkeld. Het laatste is erg belangrijk als er gewerkt wordt in teamverband, Bij het ontwerpen van een design is het verstandig om de SOLID principle toe te passen. Als eerste begin je met het Single Responsibility Principle. Dit houdt in dat je gaat bepalen wie de actors zijn. Met andere woorden, welke groepen mensen/gebruikers zullen veranderingen vragen van het systeem. Nadat de actors bekend zijn, worden de namen van de modules bepaald. Een actor representeer een module. De naam van de module is altijd abstract en kent geen details. Voorbeeld: bij de actor die de gaat over de communicatie van het systee...