Null object pattern to avoid Null exceptions

The Null object method pattern is er voor om Null exceptions te voorkomen. Maar ook voor een stukje leesbaarheid van je code doordat je -tig keer minder op een null object hoeft te filteren.

Het idee erachter is om in het geval dat een object eigelijk null moet zijn niet null terug te geven maar een object wat betekend dat het object null is. Dat is duidelijk toch ?

Dus als je een class person hebt, die ieder een property house hebben. Nu kun je personen aanmaken die een house hebben, maar ook personen die geen house hebben. In de standaard situatie zou de house property van de person dan null teruggeven. In het geval van de Null object pattern geeft deze dan een oject terug wat betekend dat house null is.

Gaat als volgt, maak een house interface, en daarvandaan twee classes, een house en een nullhouse:

interface Ihouse
    {
         int CalculateTax();
    }

    public class house:Ihouse 
    {
        public house(int value)
        {
            this.Value = value;
        }
        public int AmounTax = 20;
        public int Value { get; set; }
        public int CalculateTax()
        {
            return (Value / AmounTax) * 100; 
        }
    }

    public class nullhouse:Ihouse 
    {
        public int AmounTax = 0;
        public int Value { get; set; }
        public int CalculateTax()
        {
            return 0;
        }
    }

Als je nu een list met personen aanmaakt die wel of niet een huis hebben met bijbehorende waarde, als volgt:

    public class person
    {
        public Ihouse hisHouse { get; set; }
        public person(bool house, int value)
        {
            if (house)
                this.hisHouse = new house(value);
            else
                this.hisHouse = new nullhouse();
        }
    }
List personen = new List() { new person(true, 1000000), new person(true, 200000), new person(false, 0) };

Dan zou je daarna de waarde van de belasting van het huis kunnen berekenen zonder dat je op null waardes hoeft te controleren:

personen.ForEach(p => p.hisHouse.CalculateTax());

Handig toch ?

{{opmerking.Naam}}:

{{opmerking.OpmerkingText}}

            

Saving your comment....

Naam is verplicht!
Email is verplicht!
Opmerking is verplicht!