Denotational Domain-Driven Design
In a DDD project, code and model should be close relatives, reflecting our domain insight. The best models convey deep insights. But where to get those deep insights? We can always hope for a more thorough understanding of the domain, but the resulting insights – while valuable – are often shallow. The combination of DDD and Functional Programming enables a different approach: Generate domain knowledge by systematic abstraction of a denotational model, an approach (pioneered by Conal Elliott) called Denotational Design. With Denotational Design, we look at our model divorced from its concrete domain, refactor it for abstraction, and look for mathematical properties such as monoid or functor. (And sometimes we find monads.) This process is quite systematic and widely applicable, to domains from simple images to semiconductor fabrication schedulers, dialing domain insight up to 11.