thought-works: Object oriented design for a library to borrow and renew books
A typical library has a set of books which the users can borrow for a certain period of time and return back. Users may choose to renew the return date if they feel they need to more time to read the book. We are trying here to design an online library.The typical user actions with this online library would be
- sign in/register
- search books
- borrow books
- renew the return date for any of the books borrowed
- view his profile(check his details, list of books he borrowed )
The online library should support all the above actions. It must keep track of the different books in the library currently available for users to borrow and also the books already borrowed bu users. Put it simply the inventory should be managed.
Going through the above description we can think of these components in the system:
- User
- Book
- BorrowTxn -> record for the event for book b is borrowed by user u
- InventoryManager -> manages the books in the library. Adds new books, remove books and respond to book search requests
- LibraryManager-> Allows user interaction with the library like logging in, borrowing, renewal and return.
Below is the class diagram which depicts how these components inter-operate
The Library Manager(LibManager) interacts with the inventory manager for responding to user search queries. Each borrow operation would result in the creation of a BorrowTxn which encapsulates the book details, borrowing user details and the return date. The inventory state is updated accordingly(i.e. the borrowed book is no longer available for borrowing). Similarly when a book is returned the inventory state is updated.
When the book return date is renewed the inventory state is not changed but the borrow transaction is updated accordingly.
Read full article from thought-works: Object oriented design for a library to borrow and renew books