# LH DDD ```plantuml !include <kubernetes/k8s-sprites-unlabeled-25pct> package "Delivery Infrastructure - Kubernetes Cluster" { component "<$crd>\nAPISpec" as apispeccrd component "<$crd>\nAPIProxyPolicy" as policycrd component "<$crd>\nAPIProxy" as apiproxycrd component "<$crd>\nAPICatalogEntry" as apicatalogentrycrd component "<$pod>\nApigeeOperator" as operator } package "Apigee" { component APISpec component APIProxy package "portal" { component APICatalog } } apiproxycrd --> policycrd apicatalogentrycrd --> apispeccrd operator --> apiproxycrd operator --> apispeccrd operator --> apicatalogentrycrd operator --> APISpec operator --> APIProxy operator --> APICatalog actor Developer as dev dev --> apiproxycrd dev --> apispeccrd dev --> apicatalogentrycrd actor LighthouseDeveloper as lhdi lhdi --> policycrd ``` ```plantuml storage Platform { object Container object "Kubernetes" as k8s object "Operator" as ao object "GitHub Repo" as repo object webhook rectangle publishAPI #lightblue { } k8s .. ao k8s .. Container repo .. webhook } storage Apigee { object Proxy object APISpec object APICatalog object APICatalogEntry object portal portal .. APICatalog APICatalog .. APICatalogEntry } queue "Messaging Mechanism" as mm { } rectangle "APIPublished" as publishedout { } rectangle "APIPublished" as publishedin { } storage Backstage { object Techdocs object "Gateway Manager" as ApigeePlugin } webhook --> publishAPI publishAPI --> publishedout publishedout --> mm mm --> publishedin publishedin --> ao ``` ``` The developer publishes an API to the public gateway Given an API that is ready for publishing And a catalog entry definition for the API And a spec definition ffor the API And a proxy policy definition for the API When the developer publishes the API to the public gateway Then a proxy is created And a spec is created And a catalog entry is created ``` - Mixing a bunch of stuff together. Usually you wouldn't mix the domain / aggregate diagrams with the command / domain events - There's also a bunch of stuff here that doesn't have the right abstraction level. This also assumes that we'll use an event based architecture (messaging mechanism). - Ultimately the code is the only artifact of the domain model which is why you want to use something like BDD or Cucumber that ties requirements to tests --- ![](https://i.imgur.com/XDtEm6P.png) - We're may not be building this so it might be confusing to try to map it to what we're doing - The important concept here is that the domain model is distinct and verifiable on its own. It contains business logic. - Right now it's not clear to me what the implementation looks like- is the domain model a set of microservices + the output adapter? - maybe a lot of the stuff I have listed as aggregates are actually application services so they exist outside of the domain model. "Kubernetes" is not really a semantic abstraction