OO Design reminders

Onderstaand reminders voor OO design:

Lijsten
Komt het regelmatig voor dat er acties moeten worden uitgevoerd op lijsten, maar hiervoor dan een aparte class aan, bijv. Persons. Deze class erft dan van IEnumerable en heeft dan als extra's de methodes die vaak gebruikt worden.

Option type
Soms moet een actie op een object worden uitgevoerd, maar alleen als dat object bestaat. Om een null check uit te sluiten kan je een nieuwe class maken: Option. Vervolgens implementeert deze class IEnumerable. Dit is een manier om aan te geven dat er "niets" is zonder te hoeven checken op null. De aanroepende code kan dan altijd bijv. ForEach(o => o.DoSomething()) aanroepen zonder daarbij te hoeven checken op null. Voorbeeld implementatie van Option class:

public class Option<T> : IEnumerable<T>
{
    private readonly T[] data;

    private Option(T[] data)
    {
        this.data = data;
    }

    public static Option<T> Create(T element)
    {
        return new Option<T>(new[] { element });
    }

    public static Option<T> CreateEmpty()
    {
        return new Option<T>(new T[0]);
    }

    public IEnumerator<T> GetEnumerator()
    {
        return ((IEnumerable<T>) this.data).GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }
}

Reacties

Populaire posts van deze blog

[SQL Server] varchar vs nvarchar

MS Sql 70-461: Chapter 5

[C#] Class serialiseren en deserialiseren