No special messages at the moment. Just have a good day and stay hydrated!

How To Decide Where To Put Domain Logic | Domain Driven Design w/ TypeScript

Jul 1st, 2019 / 1 min read / Share / Edit on GitHub
In this post, I walk you through a process for determining where different types of domain logic belongs in a Domain-Driven Design project.

The reason we use Domain-Driven Design is because when our applications get sufficiently complex, we need to figure out better ways to organize domain logic than how we normally do with MVC in RESTful CRUD applications.

Domain Events

During the process of figuring out our requirements and understanding the domain, sometimes we'll hear language being used that sounds similar to:

"when this, then do this" or "when this, do this only if this has this"

When we hear that, we should automatically think "Domain Events".

Domain events should be named in the form of [Entity][Past Tense Verb]Event.

Some examples are: VinylCreatedEvent, VinylUpdatedEvent, OfferAcceptedEvent, OfferDeclinedEvent.

Just the, it naturally signifies that the model will be responsible for the verb/method.

Therefore: VinylCreatedEvent = Vinyl.create(props: VinylProps, id?: UniqueEntityId).

Therefore: VinylUpdatedEvent = vinyl.update(props: VinylProps).

Therefore: OfferAcceptedEvent = offer.accept().

And it just so happens that we would also create those domain events within those entity method invokations.

Validation and Invariant Logic => Value Objects & Entities


I hope this article was useful to you! Consider checking out my sponsors. I can continue to write quality articles for free because of them.


Thoughts? Share the article if you think it'll be useful to someone + join the discussion about this post on Twitter!

Stay in touch!

About the author

Khalil Stemmler

Khalil Stemmler is a Developer / Designer and co-founder of Univjobs. He frequently publishes articles about Domain-Driven Design and Advanced TypeScript & Node.js best practices for large-scale applications.

You may also enjoy...

A few more related articles

Implementing DTOs, Mappers & the Repository Pattern using the Sequelize ORM [with Examples] - DDD w/ TypeScript
Jun 20th, 2019 / 14 min read
There are several patterns that we can utilize in order to handle data access concerns in Domain-Driven Design. In this article, w...
Understanding Domain Entities [with Examples] - DDD w/ TypeScript
May 28th, 2019 / 12 min read
Entities are the first natural place we should aim to place business logic in domain-driven applications. In this article, we talk...
REST-first design is Imperative, DDD is Declarative [Comparison] - DDD w/ TypeScript
May 15th, 2019 / 11 min read
A comparison between designing Node.js applications using REST-first design and Domain-Driven Design.
An Introduction to Domain-Driven Design - DDD w/ TypeScript
Apr 9th, 2019 / 10 min read
Domain-Driven Design is the approach to software development which enables us to translate complex problem domains into rich, expr...

Want to be notified when new content comes out?

Join 2000+ other developers learning about Domain-Driven Design and Enterprise Node.js.

I won't spam ya. 🖖 Unsubscribe anytime.

Get updates