4

I am trying to figure out if a system designed using DDD can have several core domains. I found this thread (Can we have more than one core domain, as the result of Distillation process) but I can not comment on it.

When googling I don't really find an answer, or the answer is pointing toward that there should only be one core domain, and that is how it is described in the book "Domain-Driven Design Distilled" that I have read.

But I don't feel like that makes sense? Say you are selling a system that does bookkeeping and invoicing as the two big functionalities. Then I feel that both of them are core domains. They are both a core part of the program, and they are distinct from each other so they could (or should) not be lumped in into just one domain.

Or if you are selling a "productivity suite" then your core domains might include "Issue management system domain" "calendar domain" "chat application domain" "email system domain" since these are all big integral parts of the system you sell (Say if you are google and are moddeling the G-suite)

Have I maybe just misunderstood and having several core domains is nothing strange?

Thanks!

2 Answers2

2

The core domain, as I've understood it, is the one that you want to finish first, so in that sense there really can only be one core domain.

The terminology seems to be a little muddled because it developed in an environment where DDD was being adopted by teams in larger organizations being charged with "deliver a system to do this" (e.g. in the GSuite example, "implement a spreadsheet", in which case propagating changes to cell values might well be the core domain for that problem).

In a sufficiently large system, there may well be domains that deliver around the same value (e.g. there's no real way to determine which is more valuable, because without either of them the system cannot fully function), in which case I guess it's probably most consistent to say that there is no core domain in that system (but some network of cooperating subdomains).

Levi Ramsey
  • 18,884
  • 1
  • 16
  • 30
1

In a "system", you can have multiple Domains.

In a Domain, generally you have only one Core Domain. It's the most important and bankable part of your software.

If you remove this part of the software, is your system still "alive" ?

  • No, so this part is the Core Domain.
  • Yes, so this part is probably a Supporting Domain

In your example, the system with bookkeeping and invoicing functionnalities, I'm not completly sure (it depends on the business) that it's not two Domains.

Julien Gavard
  • 613
  • 1
  • 6
  • 20