Design a Domain Model for a Library Loan System (Java)
Overview
What this challenge is about.
Implement, in Java 21, an Item type hierarchy (Book, AudioBook, Periodical, EquipmentLoan — each with sub-type-specific rules), Member with eligibility logic, Loan as an aggregate root with state transitions (active → returned, active → overdue → fined), and value objects for Money, ISBN, LoanPeriod. Apply: encapsulation (no public setters on aggregates), polymorphism on Item-type rules, and the Builder pattern where useful. Provide a domain-event mechanism (LoanCreated, ItemReturned, FineIssued). Deliver: Maven project, JUnit 5 test suite with 85 percent coverage, 6-page design doc with UML, and a 1-page domain glossary.
The Brief
What you'll do, and what you'll demonstrate.
Design and implement a rich OO domain model for a library loan system with polymorphic Item types and an aggregate-root Loan.
Earning criteria — what you'll demonstrate
- Model a non-trivial domain with rich OO abstractions
- Apply aggregate roots, value objects, and polymorphism in Java
- Implement domain events without coupling consumers to producers
- Document a domain with UML and a glossary
Program Fit
Where this fits in your program.
Sharpens the same skills your degree expects you to demonstrate.
Skills
Skills you'll demonstrate.
Each one shows up on your verified credential.
Careers
Roles this prepares you for.
Real titles. Real skill bridges. Pick the one closest to your trajectory.
Career mappings coming soon.