My favorite books on domain modeling

Why am I passionate about this?

If someone had told me during my early professional years that I would become a strong advocate for functional programming and the author of a fundamental book on functional software engineering, I would have found it hard to believe. Was functional programming truly worth dedicating my life to? However, once I experienced the sheer beauty of functional programming, there was no turning back. I delved deep into Haskell and functional C++, and began writing articles, giving talks, and developing various technologies. I realized that I possessed a truly unique perspective on approaching software engineering in functional languages, and that there was a significant knowledge gap that needed to be filled for the benefit of all.


I wrote...

Functional Design and Architecture

By Alexander Granin,

Book cover of Functional Design and Architecture

What is my book about?

Functional Design and Architecture is a comprehensive guide to software design in functional languages such as Haskell, Scala, F#, and OCaml. The book introduces a unique methodology called Functional Declarative Design, which combines brilliant ideas from functional programming with engineering reasoning to form a software engineering discipline for functional programming. It covers a wide range of topics, including software complexity, domain-specific languages, application architectures, various functional design patterns and idioms, best practices, design principles, and approaches.

This practical book fills a gap in the functional programming world by providing a comprehensive source of knowledge and complete methodology for building real-world applications with ease and maintainability.

Shepherd is reader supported. When you buy books, we may earn an affiliate commission.

The books I picked & why

Book cover of Domain-Specific Languages

Alexander Granin Why did I love this book?

It was a wonderful time when I first embarked on my programming journey.

I felt an immense sense of power over computers and had countless ideas on how programming could improve my life and the lives of others. Everything seemed within reach, and I approached the world of programming with great enthusiasm in the early 2000s.

However, reality hit me like a cold shower when I started delving into actual software development. I quickly realized that it was far more challenging than just writing code.

Each programming language and technology had its hidden complexities and treacherous pitfalls. Every domain was rife with intricate nuances that had to be understood before attempting to develop software within it. I soon discovered that there was no such thing as a "perfect solution" that could be universally applied.

As I ventured into working with real-world domains, I confronted the daunting task of addressing the intricate requirements specific to each business. I felt overwhelmed by the complexities of this realm and struggled to navigate them effectively.

That's when I stumbled upon Fowler's book, Domain-Specific Languages, which completely changed my perspective. It provided invaluable insights into tackling complexity, maintaining code sanity, and the immense value of implementing domain-specific languages.

In retrospect, I realized that I had already been creating various embedded domain-specific languages (eDSLs) in my projects long before I became familiar with the formal concept. Moreover, as my love for functional programming grew, I discovered that DSLs played a vital role within that paradigm.

Fowler's book greatly aided me in solidifying my own ideas and approaches to software design.

By Martin Fowler,

Why should I read it?

1 author picked Domain-Specific Languages as one of their favorite books, and they share why you should read it.

What is this book about?

When carefully selected and used, Domain-Specific Languages (DSLs) may simplify complex code, promote effective communication with customers, improve productivity, and unclog development bottlenecks. In Domain-Specific Languages, noted software development expert Martin Fowler first provides the information software professionals need to decide if and when to utilize DSLs. Then, where DSLs prove suitable, Fowler presents effective techniques for building them, and guides software engineers in choosing the right approaches for their applications.

This book's techniques may be utilized with most modern object-oriented languages; the author provides numerous examples in Java and C#, as well as selected examples in Ruby. Wherever possible,…


Book cover of Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F#

Alexander Granin Why did I love this book?

As I delved deeper into the world of functional programming, I couldn't shake the feeling that it was vast, profound, and somewhat detached from the real world.

Functional programming seemed to exist as its own entity, heavily rooted in academia, and not as pragmatic compared to object-oriented programming. With my experience in mainstream languages like C++, C#, and Python, I possessed a rich toolbox for creating high-quality software in those paradigms.

I had learned various architectural approaches, design patterns, and software development principles that were mostly applicable to object-oriented programming but appeared less suitable for functional programming.

However, I began to question whether these ideas were truly universal and whether they could be reformulated for functional programming. This led me to embark on my own research in the field, which eventually culminated in writing my own book.

It was during this exploration that I stumbled upon Wlaschin's book, which provided an illuminating read. It offered proof that pragmatic functional programming and software engineering could indeed coexist, incorporating those same principles, approaches, and patterns.

This book served as an inspiring starting point for my journey into the realm of pragmatic functional programming, something I had yearned for intensely for a long time.

By Scott Wlaschin,

Why should I read it?

2 authors picked Domain Modeling Made Functional as one of their favorite books, and they share why you should read it.

What is this book about?

You want increased customer satisfaction, faster development cycles, and less wasted work. Domain-driven design (DDD) combined with functional programming is the innovative combo that will get you there. In this pragmatic, down-to-earth guide, you'll see how applying the core principles of functional programming can result in software designs that model real-world requirements both elegantly and concisely - often more so than an object-oriented approach. Practical examples in the open-source F# functional language, and examples from familiar business domains, show you how to apply these techniques to build software that is business-focused, flexible, and high quality. Domain-driven design is a well-established…


Book cover of Domain-Driven Design: Tackling Complexity in the Heart of Software

Alexander Granin Why did I love this book?

My journey in the world of software development has been arduous and challenging.

One of the common struggles we all face is the overwhelming number of solutions available, making it impossible to fully grasp everything at a deep level.

Just when I thought I had mastered an approach and felt competent in it, a new shiny approach would emerge, demanding my immediate attention. It often felt like a never-ending race to keep up with the ever-evolving field.

This constant pursuit of staying relevant as a software engineer can be frustrating, as it feels like we are always lagging behind the rapidly advancing world. I discovered that knowledge of specific technologies, frameworks, or libraries does not easily transfer across different technology stacks. They are too specific and lack universality. It was then that I turned my focus to more general principles of software engineering.

I realized that there are fundamental engineering principles that can be applied across different technologies, making it easier to understand unfamiliar tools and frameworks. Instead of solely focusing on specific technologies, I started immersing myself in the broader and more foundational concepts of software engineering.

It took a significant amount of time before I finally came across Evans' book. I wish I had found it much earlier, as it would have illuminated my path and prevented me from wandering in the darkness for so long.

By Eric Evans,

Why should I read it?

2 authors picked Domain-Driven Design as one of their favorite books, and they share why you should read it.

What is this book about?

Incorporate effective domain modeling into the software development process

Software design thought leader and founder of Domain Language, Eric Evans, provides a systematic approach to domain-driven design, presenting an extensive set of design best practices, experience-based techniques, and fundamental principles that facilitate the development of software projects facing complex domains. Intertwining system design and development practice, this book incorporates numerous examples based on actual projects to illustrate the application of domain-driven design to real-world software modeling and development.

Domain Model: Part I outlines the goals of domain-driven development, defines terms, and gives an overview of the implications of using the…


Book cover of Function and Reactive Domain Modeling

Alexander Granin Why did I love this book?

I'm a devoted advocate of functional programming and a passionate Haskell enthusiast.

Ironically, there was a time in my life when I was a student and held the belief that functional programming was merely an impractical academic pursuit.

However, I soon had a revelation that the techniques I employed in C++ to mitigate the inherent unsafety of the language actually aligned with the core principles of functional programming: immutability, purity, and composability.

This realization left a profound impression on me, prompting me to delve into learning Haskell. It proved to be a pivotal moment that significantly shaped my entire career trajectory.

As I delved deeper into functional programming, I discovered a significant void in terms of software engineering practices that were prevalent in the realm of object-oriented programming.

Drawing from my experiences in C++ and C#, I noticed numerous gaps in our understanding of how to build robust applications using functional languages. This deficiency posed a genuine challenge for functional programming, and it became easier to understand why it was sometimes dismissed as a non-practical endeavor.

Fortunately, I found solace in discovering books like Ghosh's work on domain modeling in functional languages and Wlaschin's book, which both demonstrated that functional programming could indeed be practical and enjoyable for real-world tasks.

By Debasish Ghosh,

Why should I read it?

1 author picked Function and Reactive Domain Modeling as one of their favorite books, and they share why you should read it.

What is this book about?

Functional and Reactive Domain Modeling teaches readers how to think of the domain model in terms of pure functions and how to compose them to build larger abstractions. It begins with the basics of functional

programming and gradually progresses to the advanced concepts and patterns needed to implement complex domain models. The book demonstrates how advanced FP patterns like algebraic data types,

typeclass based design, and isolation of side-effects can make models compose for readability and verifiability.



On the subject of reactive modeling, the book focuses on higher order

concurrency patterns like actors and futures. It uses the Akka framework…


Book cover of Refactoring: Improving the Design of Existing Code

Alexander Granin Why did I love this book?

What does refactoring have to do with domain modeling in functional programming?

It turns out that the very essence of code improvement is closely tied to enhancing its capability to handle the intricacies of a specific domain. This implies that even when refactoring a domain-agnostic mechanism in our code, our objective is to address previously inaccessible aspects of the domain.

Another important aspect of refactoring is that functional languages make it more desirable and safer, thanks to core principles such as purity and immutability.

Although there might not be an abundance of books on domain modeling in functional programming, I firmly believe that Fowler's book can be immensely beneficial in this endeavor.

By Martin Fowler,

Why should I read it?

2 authors picked Refactoring as one of their favorite books, and they share why you should read it.

What is this book about?

Refactoring is about improving the design of existing code. It is the process of changing a software system in such a way that it does not alter the external behavior of the code, yet improves its internal structure. With refactoring you can even take a bad design and rework it into a good one. This book offers a thorough discussion of the principles of refactoring, including where to spot opportunities for refactoring, and how to set up the required tests. There is also a catalog of more than 40 proven refactorings with details as to when and why to use…


5 book lists we think you will like!

Interested in object-oriented programming, software engineering, and computer programming?

10,000+ authors have recommended their favorite books and what they love about them. Browse their picks for the best books about object-oriented programming, software engineering, and computer programming.

Object-Oriented Programming Explore 19 books about object-oriented programming
Software Engineering Explore 25 books about software engineering
Computer Programming Explore 39 books about computer programming