Menu
Coddy logo textTech

Admin CLI Arayüzü

Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 103 / 107.

challenge icon

Görev

Kolay

Command Pattern'ı kullanarak Kütüphane Yönetim Sistemimiz için bir komut satırı arayüzü oluşturalım! Kitap ekleme, kullanıcı kaydetme ve ödünç alma işlemlerini yönetme gibi yönetici komutlarını temiz ve genişletilebilir bir mimari üzerinden işleyen bir CLI oluşturacaksınız.

Kodunuzu altı dosyaya ayıracaksınız:

  • book.go: Book, ID, Title, Author ve ISBN için JSON etiketlerine sahip Available yapınız. NewBook yapıcısını da ekleyin.
  • user.go: User, ID, Name ve Email için JSON etiketlerine sahip BorrowedBooks yapınız. NewUser yapıcısını da ekleyin.
  • library.go: Kitaplar ve kullanıcılar için eşlemelerin yanı sıra önceki derslerdeki Library, AddBook, AddUser ve Borrow yöntemlerine sahip Return yapınız.
  • commands.go: Command Pattern'ın hayata geçtiği yer burasıdır! Command ve Execute türünde args alan ve dize türünde bir sonuç döndüren *Library yöntemine sahip bir []string arayüzü tanımlayın. Ardından şu komut yapılarını uygulayın:
    • AddBookCommand: 4 argüman bekler: id, title, author, isbn. Kitabı ekler ve Book added: [title] döndürür.
    • AddUserCommand: 3 argüman bekler: id, name, email. Kullanıcıyı ekler ve User added: [name] döndürür.
    • BorrowCommand: 2 argüman bekler: userID, bookID. Başarılı olursa Borrowed: [bookID], başarısız olursa Error: [message] döndürür.
    • ReturnCommand: 2 argüman bekler: userID, bookID. Başarılı olursa Returned: [bookID], başarısız olursa Error: [message] döndürür.
    • ListBooksCommand: Argüman almaz. Her kitabın kimliğini ve başlığını ayrı satırlarda [id]: [title] biçiminde döndürür veya liste boşsa No books döndürür (kitapları ID'ye göre sıralayın).

    Bir komut yetersiz sayıda argüman alırsa Error: insufficient arguments döndürün.

  • cli.go: Bir CLI işaretçisi ve komut adlarını Library uygulamalarına eşleyen bir harita tutan Command yapısını oluşturun. Şunları oluşturun:
    • NewCLI yapıcısı, CLI'ı bir kütüphane ile başlatır ve tüm komutları kaydeder: addbook, adduser, borrow, return, listbooks
    • Bir girdi dizesi alan, bu girdiyi Run kullanarak ayrıştıran, komutu arayan ve çalıştıran strings.Fields yöntemi. Boş girdi için No command provided, tanınmayan komutlar için Unknown command: [name] döndürün.
  • main.go: Bir kütüphane ve CLI oluşturun, ardından girdiden komutları işleyin. Komut sayısını okuyun, sonra her komut dizesini ayrı bir satırda okuyun. Her komut için Run çağrısı yapın ve sonucu yazdırın.

Aşağıdaki girdiler sağlanacaktır:

  • Komut sayısı
  • Her komut, kendi satırında eksiksiz bir dize olarak

Örneğin, şu girdi verildiğinde:

6
addbook B001 Go-Programming Alan-Donovan 978-0134190440
addbook B002 Clean-Code Robert-Martin 978-0132350884
adduser U001 Alice alice@test.com
borrow U001 B001
listbooks
borrow U001 B001

Çıktınız şu şekilde olmalıdır:

Book added: Go-Programming
Book added: Clean-Code
User added: Alice
Borrowed: B001
B001: Go-Programming
B002: Clean-Code
Error: book not available

Şu girdi verildiğinde:

4
listbooks
addbook B100 Design-Patterns Gang-of-Four 978-0201633610
listbooks
invalidcmd test

Çıktınız şu şekilde olmalıdır:

No books
Book added: Design-Patterns
B100: Design-Patterns
Unknown command: invalidcmd

Şu girdi verildiğinde:

5
adduser U001 Bob bob@email.com
borrow U001 B001
addbook B001 Golang-Guide John-Smith 123-456
borrow U001 B001
return U001 B001

Çıktınız şu şekilde olmalıdır:

User added: Bob
Error: book not found
Book added: Golang-Guide
Borrowed: B001
Returned: B001

CLI'ın her işlemin ayrıntılarını bilmesine gerek olmadığına dikkat edin. CLI yalnızca komutu arar ve çalıştırmayı ona devreder. Bu, yeni komutlar eklemeyi, Command arayüzünü uygulayan yeni bir yapı oluşturup bunu CLI'a kaydetmek kadar basit hâle getirir!

Kendin dene

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	// Komut sayısını oku
	var n int
	fmt.Scanln(&n)

	// Tam satırları okumak için bir scanner oluştur
	scanner := bufio.NewScanner(os.Stdin)

	// TODO: Yeni bir Library oluştur

	// TODO: Kütüphane ile yeni bir CLI oluştur

	// TODO: Her komutu işle
	// n komutun her biri için:
	// - Komut satırını scanner.Scan() ve scanner.Text() kullanarak oku
	// - Komutu CLI üzerinden çalıştır
	// - Sonucu yazdır

	_ = scanner // scanner'ı kullandığınızda bu satırı kaldırın
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Go derleyicisi