GithubHelp home page GithubHelp logo

library's Introduction

図書館の司書業務を支援するソフトウェア

司書業務とアプリケーションの対象範囲

このアプリケーションは、公立図書館の司書業務をサポートするソフトウェアです。

主な対象業務

  • 貸出と返却 ◎
  • 書架の整理 △
  • 選書と受入 〇

このアプリケーションでは対象としない司書の業務

司書の役割や関心事を理解するための参考情報です。 アプリケーションの仕様を検討する時に、司書の業務の全体を理解することが役に立ちます。

  • レファレンスサービス(相談) △
  • リファレンスサービス(記録) -
  • イベント(企画・運営・評価) -

図書館業務の課題

サンプルアプリケーションの使い方

利用方法

  • RDRA 2.0 ハンドブックを入手
  • このリポジトリーをクローン
  • Gradleタスク bootRunを実行(アプリケーションの起動)
  • Gradleタスク jigReportを実行(設計ドキュメントの出力)

この実装例の内容を学ぶためのチュートリアルが公開されました。
図書館サンプルのチュートリアル

アプリケーションの内容

RDRA 2.0 ハンドブックのサンプル「図書館システム」の以下の業務を実装しています。

business-usecase

アプリケーションは、http://localhost:8080でトップ画面を表示できます。

RDRA 2.0 ハンドブックの図書館システムの実装例

モデルベースの要件定義手法 RDRA2.0 ハンドブックのサンプル「図書館システム」の実装です。

設計ドキュメント

JIGを使ってソースコードから設計ドキュメントを自動生成します。ドキュメントはbuild/jig に出力されます。
JIGドキュメントの生成には、 Graphviz のインストールが必要です。

実装の範囲

ビジネスルールを中心に実装しています。

RDRA 2.0で可視化した以下のビジネスルールと関連するユースケース、画面、テーブルを実装しています。

  • 貸出制限ルール
  • 予約の状態遷移

貸出業務と貸出制限ルール

composit-usecase-loan

restriction

予約の状態遷移

reservatoin-state

以下の業務は未実装です。

  • 蔵書管理(資料の注文と蔵書として登録する)
  • 会員管理(会員の登録)

要件定義・仕様化・実装の継ぎ目をなくす開発手法

この図書館サンプルは、以下の考え方とやり方で実装しています。

  • 三層構造 + ビジネスロジック
  • 仕様の記述にプログラミング言語(Java,SQL,HTML)を使う
  • 仕様の可視化にツール(JIG)を使う

三層構造+ビジネスロジック

layers ビジネスロジックを独立させるドメイン駆動設計のアプローチを採用しています。

ドメインオブジェクトを中心にしたアプリケーション構造

mapping RDRAの要件定義モデルと実装を、以下のように対応させています。

Spring MVCとMyBatisを使い、ドメインオブジェクトを中心に周辺の外部形式との双方向のマッピングを実現するアプリケーション構造を採用しています。

ドメインオブジェクトのモデル(ビジネスロジックの表現)

model

ソースコードから、JIGで自動生成したドメインモデルのパッケージ構成図です。
このモデルを中心に図書館アプリケーションを組み立てています。

CCSR: Continuous Concurrent Stepwise Refinment

開発手法として、要件定義・仕様化・実装の継ぎ目をなくすCCSR手法を採用しています。

この図書館サンプル実装は、CCSR手法の実践例として開発しています。

ccsr

参考記事: 要件定義・仕様化・実装の継ぎ目をなくすCCSR開発手法

RDRAアドイン

RDRA手法のモデリングツールとして、Enterprise ArchitectのRDRAアドインを使っています。

JIG (設計可視化ツール)

Javaで記述した内容を、俯瞰したり、一覧するためのツールです。

プログラミング言語で仕様を記述するCCSR手法を実践するために必須のツールです。

RDRA - CCSR - JIG 関係図

RDRA-CCSR-JIG

RDRAのモデル要素(左)、三層+ビジネスロジックの構造(**)、JIGの出力ドキュメント(右)の対応関係です。

ビジネスルール駆動

図の青背景でしめした、RDRAで可視化したビジネスルールをドメインモデルとして実装することが、このアプリケーションの中核です。

RDRA 2.0で可視化された内容と、実装された内容の対応は、以下のJIGドキュメントで確認できます。

  • ユースケース複合図
  • パッケージ関係図(depth4, depth5)
  • 区分図と区分使用図
  • メソッド呼び出し関係図

参考情報

library's People

Contributors

ecormaksin avatar irof avatar masuda220 avatar sammy7th avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

library's Issues

会員登録を行えるようにする

  • はじめて借りる場合、図書館カードを発行する必要がある。
  • 市内に住んでいる、もしくは市内の学校に在席している場合作成することが可能。

未準備の予約一覧に取置可否を表示する

予約一覧で、在庫があり取置可能な予約かどうかをわかるようにする。
同一の所蔵品目に複数予約が入っている場合、在庫数分の予約を先に予約されたものを取置可能とする。

所蔵品の貸出可否を提示する ユースケースの妥当性

貸出を登録する際には、本(所蔵品)の現物を持って窓口に来ているので、
所蔵品の貸出可否を判定するユースケースはないかと思いました。

窓口、もしくはWebで、所蔵品目から保有する全ての所蔵品の貸出可否を問い合わせて、
「予約もしくは貸出」という業務の方がありそうに思います。

/**
* 所蔵品の貸出可否を提示する
*/
public ItemLoanability 所蔵品貸出可否提示する(ItemNumber itemNumber) {
ItemStatus 所蔵品状態 = itemQueryService.status(itemNumber);
Itemりたい所蔵品 = itemQueryService.findBy(itemNumber);
ItemWithStatusりたい所蔵品とその状態 = new ItemWithStatus(借りたい所蔵品, 所蔵品状態);
return ItemLoanability.貸出可能かどうか(借りたい所蔵品とその状態);
}

image

図書館 延滞問題についての参考リンク

図書館 延滞問題

延滞の状況の数値データが具体的な資料

軽度な延滞の対応方法や、延滞の予防的な取り組みが具体的な資料

  • 督促・お知らせメールサービス :: 長崎大学附属図書館
    • 督促メールサービス
      • 毎週月曜日13時の時点で延滞されている場合メールでお知らせ
    • 返却日事前通知
      • 返却期限2日前にメールでお知らせ
  • 米原市立図書館の資料の返却督促および貸出制限基準
    • 返却期日から30日以上経過で督促
    • 督促をうけながら返却期日から60日以上経過する遅滞者に対して督促状を送付
      • 電話、電子メール、はがき
    • 遅滞者不在時に、書名・著者名などは伝えない
    • 郵便の督促時、書名・著者名は掲載しない
      • 遅滞者の読書の秘密を守るため
    • 遅滞者に対しては、資料が返却されるまでの期間は貸出停止・予約受付停止
  • 図書館資料延滞者を減らす取り組みについて(案)
    • 督促
      • 返却期日が過ぎた時点で電話・窓口で督促、14日以上未返却で督促はがきを送付
      • 2ヶ月以上の長期延滞で封書を送付
  • 図書資料延滞者に対する貸出し制限等について
    • 毎月2回、直前2週間前の返却期限までに資料未返却の利用者に対してハガキで督促
    • 返却期限が過ぎた時点でまず電話で督促
    • メールアドレスが登録してある利用者について、返却期限から2週間経過した時点で督促メールを送信
      • 年4回、前年度以前3年分も併せて送信
    • 返却期限から30日経過で貸出・予約停止
      • 罰則開始の2週間前にハガキ・メールで通知

重度な延滞についての統計や取り組みの資料

図書館員が予約を取り消すことができるようにする

なんからの事情で資料が用意できなかった場合に、図書館員が予約を取り消すことができるようにする。

・図書館員が予約を取り消す
・予約履歴を取り消す
・会員に、資料が準備できなかった旨を通知する

図書館事業や図書館業務の基礎知識の参考リンク

業務

遅延罰則

大阪市

市の条例で規定。

公立図書館の事業

役割・目的

予算(コスト構造)

貸出統計・蔵書統計

司書インタビューや生の声

参考書籍

取置番号を発行する

現在、取置を予約番号で識別しているが、取置番号を発行して識別するように変更する。

ミニマムの認証・認可の追加

検索して予約する画面:登録会員専用
貸出・返却:図書館スタッフ専用

というのを、Spring Security( with Spring Bootで、可能な限りミニマムの設定で実装する

  • システムコンテキストのアクタ(ロール)をソフトウェアで表現するサンプルとして
  • 認証・認可の実装技術のミニサンプル(Spring Security+Spring Bootのデフォルトできるだけシンプルに)
  • 遅滞などの状況に関連するユースケースの実装をより具体的にするため

現在の、会員テーブルとは別に、UserDetail用のテーブルを用意するか検討する

シナリオテストを充実させる

アプリケーション層の機能にたいして、データベース操作まで含めたテストを作成する。
テストシナリオは、もっとも重要なシナリオ(最低1,多くても3)。

個人の貸出履歴・予約履歴を残さない設計に変更する

目的

図書館は利用者の秘密(個人情報)を守る必要があり、個人の貸出履歴・予約履歴を残すことができない。

そのため、履歴の持ち方を変更する必要がある。

設計方針

基本は、

  • 個人の貸し出し記録は返却時に削除
  • 本の貸し出し履歴は残す

という設計にする。

延滞者の把握ができるようにする

  • 図書館館長は毎月末日に遅滞者の把握を行う。
  • 督促は、窓口、電話、電子メール、はがき等で行う。
  • 予約がはいっている資料については、返却期日が過ぎた時点で電話で速やかに督促を行う。
  • 返却期日から60日以上経過する遅滞者に対して、督促を行う。
  • 通知内容は、図書館カード番号、資料の番号および返却期限日。
  • 個人情報保護の観点から、書名・著者名は本人が希望しない限り通知しない。

LibraryDBTestアノテーションを削除できそうであれば削除する

現在、全テストにLibraryDBTestアノテーションをつけている。
テストレイヤー毎にアノテーションを作成する方針にしたい。

  • シナリオテスト用のアノテーションを作成する
  • シナリオテスト用の設定ファイル (application-test.properties)を作成する
  • シナリオテストをトランザクションとロールバック不要な形に修正する

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.