Examples
Modular monolith
A DDD-style modular monolith with two business modules, a shared kernel, and a Web API host.
socotra.yaml
socotra.yaml
socotra:
version: "1.1"
solution:
name: "EcommerceApp"
rootNamespace: "Ecommerce"
dotnetVersion: "net9.0"
architecture:
pattern: "modular-monolith"
enforceLayerConstraints: true
allowedDependencies:
- from: "*.Application"
to: "*.Domain"
- from: "*.Infrastructure"
to: "*.Application"
- from: "*.Api"
to: "*.Application"
modules:
- name: "Orders"
layers:
- name: "Domain"
type: ClassLib
templates: ["base-entity", "aggregate-root", "domain-event"]
- name: "Application"
type: ClassLib
references: ["Orders.Domain"]
templates: ["repository-interface", "command", "query", "result-pattern"]
- name: "Infrastructure"
type: ClassLib
references: ["Orders.Application"]
packages: ["Microsoft.EntityFrameworkCore.SqlServer:8.0.0"]
templates: ["ef-context", "di-registration"]
- name: "Api"
type: WebApi
references: ["Orders.Application"]
- name: "Catalog"
layers:
- name: "Domain"
type: ClassLib
templates: ["base-entity"]
- name: "Application"
type: ClassLib
references: ["Catalog.Domain"]
- name: "Api"
type: WebApi
references: ["Catalog.Application"]
shared:
- name: "SharedKernel"
type: ClassLib
templates: ["base-entity", "result-pattern"]
host:
name: "EcommerceApp.Api.Host"
type: WebApi
references: ["**/*.Api"]What you get
$ socotra apply --auto-approve
+ Create solution 'EcommerceApp.sln'
+ Add project 'SharedKernel' (ClassLib)
+ Apply template 'base-entity', 'result-pattern' to SharedKernel
+ Add project 'Orders.Domain' (ClassLib)
+ Apply template 'base-entity', 'aggregate-root', 'domain-event'
+ Add project 'Orders.Application' (ClassLib)
+ Add reference Orders.Domain
+ Apply template 'repository-interface', 'command', 'query', 'result-pattern'
+ Add project 'Orders.Infrastructure' (ClassLib)
+ Add package EntityFrameworkCore.SqlServer v8.0.0
+ Apply template 'ef-context', 'di-registration'
+ Add project 'Orders.Api' (WebApi)
+ Add project 'Catalog.Domain' (ClassLib)
+ Add project 'Catalog.Application' (ClassLib)
+ Add project 'Catalog.Api' (WebApi)
+ Add project 'EcommerceApp.Api.Host' (WebApi)
+ Add reference Orders.Api, Catalog.Api
Apply complete! 16 added, 0 changed, 0 destroyed.Schema 1.1 · CLI 1.0