# Maddington Library Management System
Projects 1 / 2
3 min read
Table of Contents
๐๏ธ Architecture Overview
The system follows a layered architecture with clear separation of concerns:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Presentation Layer (CLI) โโ Menu โ MenuHandlers โ ConsoleUI โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Business Logic Layer โโ Controllers โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Data Access Layer โโ Repositories โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Data Storage Layer โโ DataStore โ JSON Files โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโDesign Principles
- Single Responsibility: Each class has one clear purpose
- Separation of Concerns: UI, business logic, and data access are isolated
- DRY (Donโt Repeat Yourself): Shared functionality is extracted to helpers
- MVC Pattern: Models, Controllers, and Views (CLI) are separated
๐ Folder Structure
maddington_library/โโโโ app.php # Application entry pointโโโ composer.json # Dependencies configurationโโโ composer.lock # Locked dependency versionsโโโ phpunit.xml # PHPUnit configurationโโโ README.md # Project documentationโโโโ architecture/ # Architecture diagramsโ โโโ cover.gifโ โโโ POP_Diagram.pngโโโโ Core/ # Application coreโ โโ โโโ CLI/ # Presentation Layerโ โ โโโ Menu.php # Main menu navigationโ โ โโโ ConsoleUI.php # UI helper utilitiesโ โ โโ โ โโโ Handlers/ # Menu action handlersโ โ โโโ BookMenuHandler.phpโ โ โโโ MemberMenuHandler.phpโ โ โโโ OtherResourceMenuHandler.phpโ โ โโโ BorrowTransactionMenuHandler.phpโ โโ โโโ Controllers/ # Business Logic Layerโ โ โโโ BookController.phpโ โ โโโ MemberController.phpโ โ โโโ OtherResourceController.phpโ โ โโโ BorrowTransactionController.phpโ โโ โโโ Models/ # Domain Modelsโ โ โโโ LibraryResource.php # Base class for resourcesโ โ โโโ Book.php # Book entityโ โ โโโ Author.php # Author entityโ โ โโโ OtherResource.php # Other resource entityโ โ โโโ Member.php # Member entityโ โ โโโ BorrowTransaction.php # Transaction entityโ โโ โโโ Repositories/ # Data Access Layerโ โ โโโ DataStore.php # Generic JSON file handlerโ โ โโโ BookRepository.phpโ โ โโโ MemberRepository.phpโ โ โโโ OtherResourceRepository.phpโ โ โโโ BorrowTransactionRepository.phpโ โโ โโโ data/ # Data Storage (JSON files)โ โโโ books.jsonโ โโโ members.jsonโ โโโ otherResources.jsonโ โโโ transactions.jsonโโโโ tests/ # Test Suiteโ โโโ Unit/ # Unit Tests (isolated)โ โ โโโ Models/โ โ โ โโโ BookTest.phpโ โ โ โโโ MemberTest.phpโ โ โ โโโ BorrowTransactionTest.phpโ โ โโโ Repositories/โ โ โโโ DataStoreTest.phpโ โโ โโโ Integration/ # Integration Tests (full workflow)โ โโโ Controllers/โ โโโ BookControllerTest.phpโโโโ vendor/ # Composer dependencies (auto-generated) โโโ autoload.php # Composer autoloader โโโ phpunit/phpunit/ # PHPUnit testing framework โโโ php-school/cli-menu/ # Interactive CLI menus โโโ symfony/console/ # Console output stylingInstall Project Dependencies
cd /path/to/maddington_librarycomposer install๐งช Running Tests
Install PHPUnit
PHPUnit is included in the composer.json as a dev dependency. Install it with:
composer install --devOr if you already installed dependencies:
composer updateRun All Tests
Or using Composer:
composer testThen open coverage/index.html in your browser.
Test Structure
tests/โโโ Unit/ # Unit tests (isolated tests)โ โโโ Models/โ โ โโโ BookTest.phpโ โ โโโ MemberTest.phpโ โ โโโ BorrowTransactionTest.phpโ โโโ Repositories/โ โโโ DataStoreTest.phpโโโโ Integration/ # Integration tests (full workflow) โโโ Controllers/ โโโ BookControllerTest.phpStarting the Application
php app.phpDependencies
- php-school/cli-menu: Interactive CLI menus
- symfony/console: Console output styling and formatting