Proje tasarımı
- Dart kursu
- İleri seviye
- Ders 79/83
- 6 dk
İ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
// 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
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
class InMemoryTaskService implements ____ { @override List<Task> list() => []; }
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 |