Work in Progress
Diese Seite ist aktuell im Review! Die Seite wurde noch nicht qualitätsgesichert und kann Fehler enthalten.
Die verlinkten Seiten sind ggf. nur für Schleupen-Mitarbeiter sichtbar.

Fachliche Enumeration

Diesem Dokument soll das Muster fachliche Enumeration aufzeigen, nachdem fachliche Enums erstellt werden können, die im Gegensatz nur normalen C#-Enums Geschäftslogik beinhalten.

Bei C#-Enums ist es oft so, das Geschäftslogik, die eigentlich in die Enumwerte reingehört, mittels Extension Methods drumherum gebaut wird. Dies führt zu nicht Objekt-orientiertem Design und Codeduplikation.

Design

Im Framework steht eine Basisklasse bereit. Die landspezifische Enumklasse leitet sich davon ab und beinhaltet die benannten Instanzen als statische readonly-Felder, die dann als Enum zur Verfügung stehen.

Implementierung

Im Framework steht die Basisklasse DomainEnum bereit. Die landspezifische Enumklasse leitet sich nun davon ab. Sie erhält außerdem die benannten Instanzen als statische Felder, die dann als Enumwerte zur Verfügung stehen.

internal abstract class BuchStatus : DomainEnum
{
    public const string NeuPersistenceValue = "Neu";
    public const string BeschaedigtPersistenceValue = "Beschädigt";

    public static readonly BuchStatus Neu = new Neu();
    public static readonly BuchStatus Beschaedigt = new Beschaedigt();

    public abstract decimal BerechnePreis(decimal price);

    private sealed class Neu : BuchStatus
    {
        public override string PersistenceValue => NewPersistenceValue;

        public override decimal BerechnePreis(decimal price)
        {
            // ...
        }
    }

    private sealed class Beschaedigt : BuchStatus
    {
        public override string PersistenceValue => DamagedPersistenceValue;

        public override decimal BerechnePreis(decimal price)
        {
            // ...
        }
    }
}

Stärken und Schwächen

Stärken
  • Enum und Geschäftslogik sind zusammen; besser für DDD
Schwächen
  • Technisch komplizierter als eine C#-Enum

Benutze Muster

Cookie Consent mit Real Cookie Banner