
Built a complete library system in plain Java
A complete library system (members, catalogue, loans, and fines) built from scratch in plain Java to practise clean architecture and solid object-oriented design.
Role
Solo Engineer
Organisation
Self-directed
Industry
Software Architecture · Education
Focus
Java · Architecture · OOP
/ Problem
A deliberate craft project: build a realistic system with real business rules (borrowing limits, overdue fines, different rules for books, CDs, and DVDs) without any framework to hide the design decisions. The point was to get the structure right by hand.
/ Solution
The code is organised into clear layers, each with one job: entities hold the rules, repositories store data, services coordinate, controllers handle the menus. Rules likely to change, like loan periods and fines, are isolated behind the Strategy pattern so they can be swapped without touching the rest. Data seeds from CSV into in-memory stores on startup.
With no external libraries, I wrote my own zero-dependency test framework for both unit and end-to-end tests. Building the tests myself forced me to design the code to be testable, which pushed me toward cleaner boundaries. Good architecture is not decoration: it is what lets you change one rule, or test one piece, without the rest of the system fighting back.