Book Management System (BMS)

要件定義

システム名: Book Management System (BMS)

このシステムは、ユーザーが書籍の情報を追加、更新、表示、削除するためのウェブアプリケーションです。

要件:

  1. 書籍の追加: ユーザーは新しい書籍をシステムに追加できます。必要な情報は、タイトル、著者、出版日、ISBN、ジャンルです。

  2. 書籍の検索と表示: ユーザーは書籍をタイトル、著者、ジャンルで検索し、一覧を表示することができます。

  3. 書籍の更新: ユーザーは既存の書籍情報を更新することができます。

  4. 書籍の削除: ユーザーは書籍をシステムから削除することができます。

  5. 検証機能: 本の情報(タイトル、著者名、ISBNなど)が適切な形式と内容であることを確認する。

  6. ビジネスルール: 特定のビジネスルール(例えば、同じISBNの本はシステムに1つしか存在できない)を適用する。

  7. バルク更新: 一度に複数の書籍の情報を更新する機能。この機能では、提供された書籍リストの各書籍に対して更新操作を繰り返す。

  8. 検索フィルター: キーワードリストを提供し、そのキーワードすべてにマッチする書籍を検索する機能。この機能では、キーワードリストの各キーワードに対して検索操作を繰り返す。

  9. レポート生成: 書籍のリストから特定の情報(例えば、各ジャンルの書籍数)を集計する機能。この機能では、書籍リストの各書籍に対して情報抽出と集計を繰り返す。

基本設計

システムは以下のコンポーネントを含むMVCアーキテクチャを持つ予定です:

  • Controller層

    • BookController: 書籍に関連するリクエストを処理します。

    • UserController: ユーザー関連のリクエストを処理します。このコントローラは、ユーザーが所有する書籍を管理するために BookService を利用します。

  • Service層

    • BookService: 書籍の基本的なCRUD操作に関連するビジネスロジックを提供します。

    • BookValidationService: 書籍の情報が適切な形式と内容であることを確認します。

    • BookBulkUpdateService: 一度に複数の書籍の情報を更新する機能を提供します。

    • BookSearchService: キーワードリストに基づいて書籍を検索する機能を提供します。

    • BookReportService: 書籍リストから特定の情報を集計する機能を提供します。

  • Repository層

    • BookRepository: 書籍に関連するデータの永続化を担当します。

  • Model層

    • Book: 書籍のデータモデルです。タイトル、著者、出版日、ISBN、ジャンルなどの情報を保持します。

それぞれのコンポーネントは、上記で定義した要件を満たすためのメソッドを持つことを想定しています。

例えば、BookController は新しい書籍を追加するためのメソッドや、既存の書籍を更新するためのメソッドを持つ予定です。同様に、BookService はビジネスルールを適用するためのメソッドや、一度に複数の書籍を更新するためのメソッドを持つ予定です。

詳細設計

Controller層

  • BookController

    • ResponseEntity<Book> addBook(Book book): 新規書籍を追加し、結果として追加された書籍を返します。

    • ResponseEntity<List<Book>> searchBooks(String keyword): キーワードに一致する書籍を検索し、結果として該当した書籍リストを返します。

    • ResponseEntity<Book> updateBook(Book book): 書籍を更新し、結果として更新された書籍を返します。

    • ResponseEntity<Void> deleteBook(Book book): 書籍を削除します。削除が成功したかどうかのみを返します。

    • ResponseEntity<List<Book>> bulkUpdateBooks(List<Book> books): 複数の書籍を一度に更新し、結果として更新された書籍リストを返します。

  • UserController

    • ResponseEntity<List<Book>> manageUserBooks(User user): ユーザーが所有する書籍を取得し、結果として該当した書籍リストを返します。

  1. Service層

    • BookService

      • Book saveBook(Book book): 書籍を保存し、結果として保存された書籍を返します。

      • List<Book> findBooks(String keyword): キーワードに一致する書籍を検索し、結果として該当した書籍リストを返します。

      • Book updateBook(Book book): 書籍を更新し、結果として更新された書籍を返します。

      • void deleteBook(Book book): 書籍を削除します。削除が成功したかどうかのみを返します。

    • BookValidationService

      • boolean validateBook(Book book): 書籍の情報を検証します。ISBNが13桁の数字である、タイトルと著者が空白でない等、基本的な検証を行い、その結果をboolean値として返します。

    • BookBulkUpdateService

      • List<Book> bulkUpdateBooks(List<Book> books): 複数の書籍を一度に更新し、結果として更新された書籍リストを返します。

    • BookSearchService

      • List<Book> searchBooks(List<String> keywords): キーワードリストに基づいて書籍を検索し、結果として該当した書籍リストを返します。

    • BookReportService

      • Map<String, Integer> generateReport(List<Book> books): 書籍リストからジャンル別の書籍数を集計し、結果をマップとして返します。キーはジャンル、値はそのジャンルの書籍数となります。

  2. Repository層

    • BookRepository

      • Book save(Book book): 書籍を保存し、結果として保存された書籍を返します。

      • Optional<Book> findById(Long id): 書籍をIDで検索し、結果として該当した書籍を返します。該当する書籍がない場合は空のOptionalを返します。

      • List<Book> findAll(): 全ての書籍を取得し、結果として書籍リストを返します。

      • void delete(Book book): 書籍を削除します。削除が成功したかどうかのみを返します。

  3. Model層

    • Book

      • String getTitle(): 書籍のタイトルを返します。

      • void setTitle(String title): 書籍のタイトルを設定します。

      • String getAuthor(): 書籍の著者を返します。

      • void setAuthor(String author): 書籍の著者を設定します。

      • Date getPublishedDate(): 書籍の出版日を返します。

      • void setPublishedDate(Date date): 書籍の出版日を設定します。

      • String getISBN(): 書籍のISBNを返します。

      • void setISBN(String isbn): 書籍のISBNを設定します。

      • String getGenre(): 書籍のジャンルを返します。

      • void setGenre(String genre): 書籍のジャンルを設定します。


この記事が気に入ったらサポートをしてみませんか?