01
Architecture
Microservices own their data through a database-per-service approach. Clients enter through an API Gateway rather than coupling directly to every internal service. Service boundaries should reflect business capabilities, with explicit APIs and messages between them.
02
Messaging
RabbitMQ and MassTransit support event-driven communication. Events communicate changes between service boundaries. An event consumer needs to handle duplicate delivery and failure explicitly; messaging is a reliability concern as well as a transport choice.
03
Service Communication
gRPC supports explicit synchronous service contracts where a response is needed in the current operation. Asynchronous messaging serves work that can proceed independently. The choice depends on consistency needs, latency and what should happen when the other service is unavailable.
04
Product & Seller Architecture
Product maintains a local SupplierReadModel instead of reading the Seller database directly. This keeps Seller data ownership intact and lets Product answer its own queries. The local model is a projection of the seller information Product needs, rather than a second source of truth.