CodeBlanks Logo Icon CodeBlanks

Proje tasarımı

İleri seviye finali mini uygulamasının iskeletini tasarlarsın.

Proje tasarımı ve Task modeli

Bu projede küçük bir görev (task) API'si kuracağız. Önce Task modelini tanımlarız: id ve title alanları. final ile alanları sabit yapar, required ile kurucuda zorunlu kılarız.

Sonra abstract class TaskService arabirimini yazarız; List<Task> list() yöntemini bildirir. Arabirim, somut sınıfların uygulayacağı sözleşmedir. Böylece bellek içi, veritabanı veya sahte (fake) servisler aynı arabirimle değiştirilebilir. Bu, bağımlılık enjeksiyonunun (dependency injection) temelidir ve test edilebilir kod yazmayı kolaylaştırır.

InMemoryTaskService

InMemoryTaskService, TaskService arabirimini uygulayan bellek içi servistir. implements TaskService ile bildirilir. list() yöntemi sabit bir görev listesi döndürür.

Örnek: class InMemoryTaskService implements TaskService { @override List<Task> list() => [Task(id: 1, title: 'görev 1')]; }. @override arabirim yöntemini geçersiz kıldığını belirtir. Bu servis hızlı testler için kullanılır; veri kalıcı değildir. İlerleyen derslerde aynı arabirime veritabanı ve isolate tabanlı servisler ekleyeceğiz; main kodu değişmeden çalışmaya devam edecek.

Uygulama Task modeli ve servis

Task sınıfını yaz: final int id ve final String title alanları, Task({required this.id, required this.title}) kurucusu. abstract class TaskService yaz; içinde List<Task> list() bildir. InMemoryTaskService implements TaskService yaz; @override List<Task> list() => [Task(id: 1, title: 'görev 1')] yap. main içine final svc = InMemoryTaskService(); ve print('Tasarım: ${svc.list().length} görev') ekle.

Başlangıç kodu

main.dart
// Task sınıfını yaz (id, title)
// abstract TaskService ve InMemoryTaskService yaz

void main() {
  // görev sayısını yazdır
}

Örnek çözüm

main.dart
class Task {
  final int id;
  final String title;
  Task({required this.id, required this.title});
}

abstract class TaskService {
  List<Task> list();
}

class InMemoryTaskService implements TaskService {
  @override
  List<Task> list() => [Task(id: 1, title: 'görev 1')];
}

void main() {
  final svc = InMemoryTaskService();
  print('Tasarım: ${svc.list().length} görev');
}

Beklenen çıktı

Tasarım: 1 görev

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 TaskService neyi tanımlar?

  • Veritabanı
  • HTTP istemcisi
  • Servis arabirimi Doğru cevap
  • DOM

Açıklama: TaskService bir servis arabirimi (sözleşme) tanımlar.

2 implements arabirimi

Soru
class InMemoryTaskService implements ____ { @override List<Task> list() => []; }
Cevap
class InMemoryTaskService implements TaskService { @override List<Task> list() => []; }

Açıklama: InMemoryTaskService, TaskService arabirimini uygular.

3 Proje parçalarını eşleştir

Kavram Anlamı
Task Model
TaskService Arabirim
InMemoryTaskService Uygulama
list Liste yöntemi

İleri seviye bölümündeki tüm dersler