ホームページ  >  記事  >  バックエンド開発  >  システム設計: 図書館管理システム

システム設計: 図書館管理システム

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-01 10:01:30371ブラウズ

Go でライブラリ管理システムを構築する

この記事では、Go に実装されたライブラリ管理システム (LMS) について調べて、その中核的な機能、設計上の決定事項、主要なコード スニペットに焦点を当ててみましょう。

図書館管理システムの主要な機能

  • 書籍管理

このシステムは各書籍の複数部数をサポートしており、在庫の効率的な追跡と管理が可能です。各書籍には、ID、タイトル、著者、発行年、個々のコピーを表す BookItem のスライスなどのプロパティがあります。

type Book struct {
    ID            int
    BookItem      []BookItem
    Title         string
    Author        string
    PublishedYear string
    mu            sync.RWMutex
}
  • メンバー管理

会員は本を借りることができ、システムはその貸し出し履歴を追跡します。各メンバーには貸出ノルマがあり、いつでも限られた冊数の本を借りることができます。

type Member struct {
    ID              int
    Name            string
    ContactInfo     string
    CurrentBorrowed []*BookItem
    BorrowHistory   []*BookItem
}
  • 本の貸し出しと返却

借用メカニズムは利用可能なコピーをチェックし、それに応じてステータスを更新します。このシステムにより、会員は書籍を返却し、書籍のステータスを更新し、会員の貸出履歴で取引を追跡することができます。

func (m *Member) AddBorrowedBook(bookItem *BookItem) {
    m.CurrentBorrowed = append(m.CurrentBorrowed, bookItem)
}

func (l *Library) BorrowBookByMember(memberID int, bookID int) *BookItem {
    // Logic to borrow a book
}
  • 同時実行制御

Go の同時実行機能を利用して、システムは複数の借用リクエストと返却リクエストを同時に処理します。 sync.RWMutex を使用すると、書籍の利用可能性のチェックと更新がスレッドセーフになり、競合状態が防止されます。

func (b *Book) IsBookAvailable() bool {
    b.mu.RLock()
    defer b.mu.RUnlock()
    for _, bookCopy := range b.BookItem {
        if bookCopy.Status == Available {
            return true
        }
    }
    return false
}
  • 延滞図書の管理

システムは、借りた書籍が延滞していないかどうかをチェックし、メンバーに通知し、場合によっては罰金を請求するビジネス ルールを実装します。

func (bi *BookItem) IsOverdue() bool {
    if bi.Status != Borrowed {
        return false
    }
    return time.Since(bi.LastBorrowed) > time.Hour*24*7
}

設計上の決定

なぜ行くのですか?
Go が選ばれたのは、そのシンプルさ、効率性、そしてライブラリ設定で複数のリクエストを処理するために重要な同時実行性のサポートが組み込まれているためです。強力な型指定とコンパイル時のチェックにより、バグが削減され、コードの保守性が向上します。

ライブラリ インスタンスのシングルトン パターン
システムは、シングルトン パターンを使用してライブラリの単一インスタンスを管理します。この設計により、すべての操作 (書籍の追加、メンバーの管理) が集中化され、リソース管理が簡素化されます。

var (
   libraryInstance *Library
   once            sync.Once
)

func GetLibraryInstance() *Library {
   once.Do(func() {
       libraryInstance = &Library{books: make(map[int]*Book), members: make(map[int]*Member)}
   })
   return libraryInstance
}

カプセル化とデータ保護
ミューテックス (sync.RWMutex) を使用すると、共有リソースが保護され、同時アクセスによって不整合な状態が発生しないことが保証されます。このカプセル化は、複数のメンバーが同時にシステムと対話する可能性があるマルチユーザー環境では非常に重要です。

次のリポジトリで完全なコードを探索し、さらなる機能強化に貢献してください:

System Design: Library Management System テサルツリー / 低レベル設計-golang

Golang での低レベルのシステム設計問題の解決策

Go での低レベルのシステム設計

Go での低レベル システム設計 リポジトリへようこそ!このリポジトリには、Go で実装されたさまざまな低レベルのシステム設計の問題とその解決策が含まれています。主な目的は、実際の例を通じてシステムの設計とアーキテクチャを実証することです。

目次

  • 概要
  • 駐車場システム
  • エレベーターシステム
  • 図書館管理システム

概要

低レベルのシステム設計には、システム アーキテクチャの中核概念を理解し、拡張性、保守性、効率性の高いシステムを設計することが含まれます。このリポジトリは、Go を使用したさまざまな問題やシナリオの解決策をカバーしようとします。

駐車場システム

このリポジトリの最初のプロジェクトは、駐車場システムです。このシステムは、車両を駐車および駐車解除できる駐車場をシミュレートします。以下を示します:

  • 駐車場インスタンスを管理するためのシングルトン設計パターン。
  • さまざまな種類の車両 (乗用車、トラックなど) を扱います。
  • 複数のフロアにわたる駐車スペースの管理。
  • 駐車車両の支払い処理

特徴

  • 追加と削除…


GitHub で表示


以上がシステム設計: 図書館管理システムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。