Agent skill
ddd-microservices
Provides comprehensive guidance for DDD in microservices including bounded contexts, service boundaries, event-driven architecture, and microservice patterns. Use when the user asks about DDD microservices, needs to design microservices with DDD, or implement microservice architectures.
Install this agent skill to your Project
npx add-skill https://github.com/partme-ai/full-stack-skills/tree/main/skills/ddd-skills/ddd-microservices
SKILL.md
When to use this skill
Use this skill whenever the user wants to:
- Use DDD to define microservice boundaries (bounded contexts, aggregates, domain events)
- Design inter-service contracts and event-driven communication
- Implement cross-service consistency, querying, and operational strategies
- Decide between synchronous (REST/gRPC) and asynchronous (events/messaging) communication
How to use this skill
Workflow
- Map bounded contexts to identify natural service boundaries
- Define aggregates within each service for data consistency
- Design communication: synchronous for queries and strong consistency; asynchronous (domain events) for decoupling
- Ensure data ownership: each service owns its database; share data via APIs or events
1. Bounded Context to Service Mapping
E-Commerce Domain:
├── Order Service ← Order bounded context
│ ├── Order aggregate
│ └── OrderPlaced event
├── Inventory Service ← Inventory bounded context
│ ├── Product aggregate
│ └── StockReserved event
├── Payment Service ← Payment bounded context
│ ├── Payment aggregate
│ └── PaymentCompleted event
└── Notification Service ← Cross-cutting
└── Subscribes to all domain events
2. Synchronous Communication (Feign/gRPC)
@FeignClient(name = "inventory-service")
public interface InventoryClient {
@GetMapping("/api/products/{id}/stock")
StockInfo getStock(@PathVariable String id);
}
3. Asynchronous Communication (Domain Events)
// Order Service publishes
@Transactional
public void placeOrder(PlaceOrderCommand cmd) {
Order order = Order.create(cmd);
orderRepository.save(order);
eventPublisher.publish(new OrderPlacedEvent(order.getId(), order.getItems()));
}
// Inventory Service subscribes
@EventListener
public void onOrderPlaced(OrderPlacedEvent event) {
inventoryService.reserveStock(event.getItems());
}
4. Database per Service
Order Service → order_db (PostgreSQL)
Inventory Service → inventory_db (PostgreSQL)
Payment Service → payment_db (PostgreSQL)
Best Practices
- Define bounded contexts clearly before splitting into services; avoid premature decomposition
- Use domain events to express cross-aggregate and cross-service facts; ensure idempotency and ordering
- Define clear SLAs, data ownership, and failure boundaries for each service
- Prefer eventual consistency with compensating transactions (Saga pattern) over distributed transactions
Resources
- Building Microservices by Sam Newman
- Domain-Driven Design by Eric Evans
- https://microservices.io/
Keywords
ddd microservices, bounded context, aggregate, domain events, service boundary, Saga pattern, CQRS, database per service, eventual consistency, API gateway
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
ocrmypdf-batch
OCRmyPDF batch processing skill — process multiple PDFs, Docker automation, shell scripting, and CI/CD integration. Use when the user needs to OCR many PDFs, set up automated OCR pipelines, or integrate OCR into workflows.
ocrmypdf-optimize
OCRmyPDF optimization skill — compress PDFs, configure PDF/A output, JBIG2 encoding, and lossless optimization. Use when the user needs to reduce PDF file size, create archival PDF/A files, or optimize OCR output.
ocrmypdf-image
OCRmyPDF image processing skill — deskew, rotate, clean, despeckle, remove border from scanned documents. Use when the user needs to improve scanned PDF quality, fix skewed pages, remove noise, or clean up scanned documents before OCR.
ocrmypdf-api
OCRmyPDF Python API and plugin skill — use OCRmyPDF programmatically from Python, integrate with applications, and extend with plugins (EasyOCR, PaddleOCR, AppleOCR). Use when the user needs to call OCRmyPDF from Python code, build OCR pipelines, or use alternative OCR engines.
ocrmypdf
OCRmyPDF core skill — add searchable OCR text layer to scanned PDFs, convert images to searchable PDFs, support 100+ languages via Tesseract. Use when the user needs to OCR a PDF, make a scanned PDF searchable, or extract text from scanned documents.
svelte
Guides Svelte and SvelteKit development including reactive components, stores, transitions, lifecycle hooks, SSR, file-based routing, and deployment. Use when the user needs to build Svelte components, create SvelteKit applications, implement reactivity patterns, or configure Svelte with Vite.
Didn't find tool you were looking for?