23 Faking domain logic Using C# extensions to create the illusion of domain logic programming domain driven design CSharp code smells