이 기사에서는 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)를 사용하면 공유 리소스를 보호하고 동시 액세스가 일관되지 않은 상태로 이어지지 않도록 보장합니다. 이 캡슐화는 여러 구성원이 동시에 시스템과 상호 작용할 수 있는 다중 사용자 환경에서 매우 중요합니다.
전체 코드를 살펴보고 다음 저장소의 추가 개선에 기여해 주세요.
Go의 하위 수준 시스템 설계 저장소에 오신 것을 환영합니다! 이 저장소에는 다양한 하위 수준 시스템 설계 문제와 Go로 구현된 솔루션이 포함되어 있습니다. 주요 목표는 실제 사례를 통해 시스템의 설계와 아키텍처를 보여주는 것입니다.
낮은 수준의 시스템 설계에는 시스템 아키텍처의 핵심 개념을 이해하고 확장 가능하고 유지 관리가 가능하며 효율적인 시스템을 설계하는 작업이 포함됩니다. 이 저장소에서는 Go를 사용하여 다양한 문제와 시나리오에 대한 솔루션을 다루려고 합니다.
이 저장소의 첫 번째 프로젝트는 주차장 시스템입니다. 이 시스템은 차량을 주차하고 주차 해제할 수 있는 주차장을 시뮬레이션합니다. 다음을 보여줍니다.
위 내용은 시스템 설계: 도서관 관리 시스템의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!