This project is part of my EMT lab series, showcasing the use of Domain-Driven Design (DDD) techniques to build a system for managing concert ticket sales. The system is designed to handle core business logic with a focus on entities, value objects, aggregates, repositories, and services.
-
Domain-Driven Design (DDD): The system is built with a focus on core domain concepts, ensuring that the business logic is central and decoupled from technical concerns.
-
Concert Catalog: Manage the catalog of concerts, including artist information, venues, dates, and ticket prices.
-
Order Management: Handle the entire ticket purchasing process, from placing an order to confirming the reservation.
-
Shared Kernel: Reusable domain logic shared across bounded contexts like concert catalog and order management.
The system is structured according to DDD principles, utilizing key concepts such as:
-
Entities: Represent core domain objects like Concert, Ticket, Order, and Customer.
-
Value Objects: Define small immutable objects such as TicketPrice and DateRange, which don't have a unique identity.
-
Aggregates: Control consistency within boundaries of related entities, ensuring proper domain logic across the system.
-
Repositories: Interface for interacting with the persistence layer, allowing us to retrieve or store domain objects like Concerts and Orders.
-
Services: Implement domain logic that cannot be naturally placed in entities or aggregates.
-
concert-catalog: Handles the management of concerts, including adding new concerts, editing details, and listing available shows.
-
order-management: Handles the ticket sales process, including placing orders, managing payments, and ticket availability.
-
shared-kernel: Contains reusable domain logic and value objects shared across different bounded contexts.