TODO add Articles to my Website where i write about my technical findings: put it under research
It rests on the idea and belief that software design principles and concepts are independent from the programming language. How the respective principles are implemented however does depend completely on the chosen language.
Hypothesis: the principles we are using in OOP to write industry-strength software are valuable and good and they are programming language independent, therefore apply to HAskell too. What is language dependent is how they are actually implemented
The question is now, what is good software design? The following principles have been established over the last 2-3 decades:
- low (Accidental) complexity
- testability
- decoupling
- low cohesion…
The concepts to
- dependency injection
- transaction boundary demarcation
- layering into at least 4 layers: Presentation, Application, Domain, Infrastructure
- testing
- lazy loading of database entities
- caching
Now the question is how to implement these concepts, satisfying the above principles to arrive at a good software design?
In the following we propose a new approach to Software Design in Haskell, by applying DDD (as of Evans and Vernon) to Haskell. DDD is successfully applied to OO systems, where it leads to much cleaner design, which in particular reflects the Ubiquitous Language, which is a language which reflects the domain. The questions, whether we can bring these concepts and patterns to Haskell as well?
yes there are great librsries but how to put them together in a functional architechture is not so clear. we need something like spring in Haskell
TX demarcation Aggregates with CQRS+ES in Haskell
DDD ΒΆ
DDD applies to Business and Enterprise domains, where communication with non technical Domain Experts is a fundanental Part of the process. for such applications there are some established architechtures and DDD
towards DDD in Haskell: introducing all tactical design concepts from DDD
shared understanding of the Domain. not Database-driven or object-oriented
strategic vs. tactical design, here we focus on tactical design