Skip to content

Code2Work/fullstack-backend-project-5

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kütüphane Ödünç Sistemi

Amaç

Java Collections (List, Set, Map, TreeSet) ile SOLID prensiplerini bir arada uygulayacaksın. Kitap/üye/yazar modelini ayrı sorumluluk sınıflarına (repository + service) bölerek temiz, genişletilebilir bir tasarım kuracaksın. Süre: ~5-7 saat.

Öğrenme Hedefleri

  • List<Book>, Set<Member>, Map<Writer, List<Book>> bir arada kullanımı
  • TreeSet<Book> + Comparable ile yayın yılına göre sıralı koleksiyon
  • equals/hashCode business key üzerinden (Book: ISBN, Member: id, Writer: ad)
  • SOLID — SRP: her sınıf tek sorumluluk (BookRepository, MemberRepository, BorrowService ayrı)
  • SOLID — DIP: Repository<T> interface'ine bağımlılık, somut sınıfa değil
  • Generic interface (Repository<T>)
  • Servis katmanının repository'leri orkestra etmesi

Mimari

Repository<T> (interface — DIP)
  ├── BookRepository implements Repository<Book>    → kitap CRUD + booksOf(writer) + booksSortedByYear()
  └── MemberRepository implements Repository<Member> → üye CRUD + findById + contains

BorrowService → borrow / returnBook / borrowedBy / isBorrowed (repository'leri kullanır)
Library       → tüm parçaları birleştiren facade

Book (Comparable, yıla göre) | Member | Writer  → POJO entity'ler

Başlamadan Önce

  • Java 17+ kurulu (java -version).
  • IDE: IntelliJ IDEA Community veya VS Code + Java Extension Pack.
  • src/ altındaki dosyalardaki // TODO N: yorumlarını sırayla çöz. Main.java demo amaçlı hazır.

Adım Adım Görevler

  1. Entity'ler (Book, Member, Writer): equals/hashCode business key üzerinden; Book ayrıca Comparable (yayın yılı).
  2. Repository interface: generic CRUD sözleşmesi.
  3. BookRepository / MemberRepository: Repository<T> implement et; özel sorgular (findByIsbn, booksOf, booksSortedByYear, findById).
  4. BorrowService: ödünç alma/iade mantığı — bir kitap aynı anda tek üyede olabilir.
  5. Library: repository + service'i birleştiren üst seviye API.

TODO numaraları her dosyanın içinde sırasıyla açıklanmıştır.

💡 Best Practice İpuçları

  • SRP: "Repository veriyi saklar, Service iş kuralını uygular" — borrow mantığını repository'ye koyma.
  • DIP: Library somut BookRepository'ye değil, mümkünse Repository<Book> soyutlamasına bağlansın.
  • Program to interface: List<Book> x = new ArrayList<>().
  • TreeSet'te compareTo 0 dönerse eleman atlanır — yıl eşitliğinde ISBN ile ikincil ayrım düşün.
  • equals/hashCode çiftini birlikte override et.

Test Senaryoları (Kendini test et)

  1. Aynı ISBN'li kitabı iki kez ekle → tekil kalmalı.
  2. Bir kitabı ödünç al → isBorrowed true, başka üye aynı kitabı alamamalı.
  3. İade et → tekrar ödünç alınabilir olmalı.
  4. booksSortedByYear() → yayın yılına göre sıralı dönmeli.
  5. Bir yazarın kitaplarını sorgula → sadece o yazarın kitapları gelmeli.

Testler ve Skor

Projede 22 JUnit testi var (tests/LibrarySystemTest.java). Testleri çalıştırınca skorun otomatik Kaizu paneline işlenir.

1. Öğrenci numaranı gir. student_id.txt dosyasına Kaizu öğrenci numaranı yaz. (Bir kez.)

2. Testleri çalıştır.

  • macOS / Linux: ./run-tests.sh • Windows: .\run-tests.ps1

İlk çalıştırmada JUnit kütüphanesi (~6 MB) lib/'e iner. Başlangıçta testler kırmızı; TODO'ları çözdükçe yeşile döner.

3. Skor otomatik gider. Tüm testler geçince (22/22) panelde yeşil tik gelir.

Bonus (Opsiyonel)

  • Üyenin aynı anda en fazla 3 kitap alabilmesi kuralı (BorrowService).
  • overdueBooks() — son iade tarihi geçmiş kitaplar (tarih alanı ekle).

Çözüm

Takılırsan proje sayfasındaki "Çözümü Göster" butonunu kullan (proje verildikten 3 gün sonra açılır). Önce en az 1 saat kendin uğraş.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors