
Subdomains sind ein Aspekt aus dem Strategic Design im Domain-driven Design (DDD) von Eric Evans. Sie unterteilen die Fachlichkeit in Core Domain, Supporting Subdomains und Generic Subdomains. Nach meinem Verständnis lassen sie sich auf ein ganzes Unternehmen, aber auch auf eine von einem Bereich verantwortete Systemlandschaft oder eine konkrete Software anwenden.
Die Domain anhand eines Beispiels
Zum Verständnis dieser drei Begriffe sollte man ein ungefähres Bild haben, was überhaupt eine Domain ausmacht. Das ist gar nicht so einfach, ich würde es vielleicht als abgegrenzte Fachlichkeit bezeichnen. Die Domain eines Unternehmens ist die Fachlichkeit, mit der sich das Unternehmen am Markt behauptet. Die Domain kann etwa der Einzelhandel sein oder eine bestimmte Produktreihe im Einzelhandel, z.B. kann es konkret um Spielzeug für Kinder gehen. Innerhalb dieser Domain gibt es dann wiederum verschiedene andere Domains mit unterschiedlicher Bedeutung für das Unternehmen. Vorstellbar sind unter anderem die Domains Produktentwicklung, Bestellwesen und Kundenverwaltung. Bleiben wir für den Rest dieses Beitrags bei diesem Beispiel.
Core Domain
Die Core Domain ist die Domain, die ein Unternehmen einzigartig macht, womit es sich von seinen Wettbewerbern abhebt und die essenziell für die Erwirtschaftung seiner Umsätze ist. Stellen wir uns vor, der beispielhafte Hersteller von Kinderspielzeug stattet sein Spielzeug mit „smarter“ Technologie aus. Das Spielzeug ist mit diversen Sensoren ausgestattet, untereinander vernetzt und an ein Cloud-Backend angebunden. Mit diesen Features möchte das Unternehmen sich von anderen Spielzeugherstellern abheben. KI-Entwicklung und Cloud bilden die Core Domain(s) des Unternehmens. Für diese Domain(s) möchte der Hersteller nur die besten Leute einsetzen und es gelten besondere Ansprüche an Qualität, Testbarkeit, Erweiterbarkeit etc.
Supporting Subdomains
Eine Supporting Subdomain generiert nicht unmittelbar Umsatz und bringt keinen signifikanten Mehrwert für das Unternehmen, ist aber für die Core Domain als Zulieferer von Bedeutung und nicht durch eine Standardsoftware angemessen ersetzbar. Eine Supporting Subdomain ist entsprechend auch weniger wichtig und die Ansprüche nicht ganz so hoch. Eine Supporting Subdomain kann ein guter Ort sein, um Junior-Entwickler einzuarbeiten. Nehmen wir an, das Unternehmen im Beispiel hat ein selbstentwickeltes System, in dem von Partnern entwickelte und angebotene Sensoren erfasst sind und miteinander verglichen werden können. Das System wird in der Produktentwicklung eingesetzt, hat aber für die bereits auf den Markt gebrachten Produkte wenig Relevanz und ein Ausfall dieses Systems oder erhöhte Aufwände bei der Weiterentwicklung führen nicht direkt zu Umsatzausfällen oder Imageeinbußen. Im Worst Case ist dieses System auch ersetzbar.
Generic Subdomains
Eine Generic Subdomain lässt sich an Dritte outsourcen oder durch Standardsoftware abbilden. Sie ist notwendig für das Unternehmen, rechtfertigt aber nicht unbedingt eine Eigenentwicklung. Die Kundenverwaltung des Spielzeugherstellers hat für das Unternehmen keinen überdurchschnittlich hohen Stellenwert und kann über eine CRM-Software abgebildet werden. Damit handelt es sich um eine Generic Subdomain. Möglicherweise bietet das Unternehmen einen Newsletter, um regelmäßig über Produktneuigkeiten zu informieren. Es arbeitet dafür mit einem Partner zusammen, der den Newsletter-Versand, Anmeldung, Abmeldung und den Support dafür verantwortet. Auch hierbei handelt es sich um eine Generic Subdomain.
Fazit
Subdomains sagen erstmal nichts über die technischen Schnitte in der Software aus. Sie können auf einen Monolithen genauso angewandt werden wie auf eine Microservice-Landschaft oder einen Verbund von mehreren Enterprise-Anwendungen über einen Enterprise Service Bus (ESB). Gleichwohl setzen sie aber Grenzen. Wenn sich in einer Unit Geschäftslogik aus verschiedenen Subdomains befindet, läuft mit großer Wahrscheinlichkeit etwas falsch. Die Definition von Subdomains kann also ggf. auch der Entstehung von ungewollten Verflechtungen vorbeugen.
Mit der Definition von Subdomains lässt sich besser steuern, wo Qualität eine große Rolle spielt und wo die Software auch mal schneller und weniger sauber wachsen darf, denn eine konstant hohe Qualität zu erreichen ist quasi unmöglich. Mann kann also entscheiden, ob man bewusst Einfluss nehmen möchte, oder ob man es dem Zufall überlässt, welche Komponenten mit der Zeit gut und welche weniger gesund wachsen.
Subdomains unterstützen auch dabei, mögliche organisatorische Schwierigkeiten frühzeitig zu erkennen und angehen zu können. Erfordert die Core Domain etwa bestimmte Daten, die aus einer Supporting oder Generic Subdomain bereitgestellt werden, etwa von einer anderen Abteilung oder einem Partner, kann sich das mit der Zeit als Problem erweisen. Die andere Abteilung kann andere Prioritäten haben, für den Partner ist man nur einer von vielen Konsumenten. Hier lohnt es sich frühzeitig darüber nachzudenken, ob man vielleicht einen Anti-Corruption Layer einsetzen sollte, ob die vertraglichen Festlegungen bei der Zusammenarbeit mit dem Partner ausreichend sind, auch wenn es mal nicht so gut läuft, und ob man vielleicht auch Alternativen oder einen Plan B hat, wenn die Daten nicht in der erwarteten Qualität bereitgestellt werden.