Domain-Driven Design (DDD) With F# and EventStore

In this post I present a methodology for implementing Domain-Driven Design (DDD) using F# and EventStore. The described approach makes use of idiomatic functional constructs, especially where they bring value beyond the traditional object-oriented and procedural paradigms. In this manner, the functional and object-oriented paradigms are contrasted. The natural alignment between functional programming and event sourcing is exploited and implemented with EventStore. Note that this project is a spike and is a work in early stages of progress.

Read on →
F#, FP, OOP

Inverting Object-orientation With F# Discriminated Unions and Pattern Matching

In this post I compare and contrast the use discriminated unions and pattern matching in F# to the object-oriented paradigm, particularly in C#. Additionally, aspects of the object-oriented approach are linked with GoF design patterns, multiple dispatch and the open-closed principle. Ultimately, discriminated unions are shown to address deficiencies in the imperative, object-oriented approach.

Read on →

Placing Knowledge on Center Stage

In this post I survey the evolution of various programming paradigms and emphasize the importance of expressing and isolating domain knowledge. Paradigms such as OOP, AOP, DCI, DDD, and Hexagonal are regarded as having a central goal of facilitating the representation of knowledge all while supporting integration with technical components. Finally I introduce a knowledge-driven architecture by Jeff Zhuk.

Read on →

Abstraction and Encapsulation

The notions of abstraction and encapsulation are prevalent throughout the realm of programming and are intimately related. Their differences are subtle indeed and warrant careful examination. Specifically, the differences are most apparent on the basis of intent. Ultimately, encapsulation can be viewed as a structural aspect of abstraction which can be employed without the intent to abstract.

Read on →