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