CodeBlanks Logo Icon CodeBlanks

Birleştirme

Tüm katmanları birleştirerek çalışan bir mini servis yazarsın.

App sınıfı ile birleştirme

Son adımda tüm parçaları birleştiririz. App sınıfı, bir TaskService alır ve summary() yöntemiyle tüm hizmetlerin özetini döndürür. Bu, bağımlılık enjeksiyonunun son halkasıdır.

Örnek: class App { final TaskService svc; App(this.svc); String summary() { return 'Birleştirme: ${svc.list().length} görev, fib(10): ${fib(10)}'; } }. App, servis ve hesap fonksiyonunu bir araya getirir. main içinde App(InMemoryTaskService()) ile oluşturulur. Bu proje zincirinde Shelf API, sqflite veritabanı ve Isolate hesabını aynı arabirim altında topladık; her parça bir öncekinin üzerine eklendi.

summary yöntemi

summary() yöntemi, uygulamanın durumunu tek bir dize olarak döndürür. svc.list().length ile görev sayısını, fib(10) ile hesap sonuçunu birleştirir. Bu, entegrasyonun doğrulandığı noktadır.

Örnek: String summary() { return 'Birleştirme: ${svc.list().length} görev, fib(10): ${fib(10)}'; }. main içinde print(app.summary()) ile yazdırılır. Çıktı Birleştirme: 1 görev, fib(10): 55 olur. Bu deterministiktir; her çalıştırmada aynı sonuçu verir. Proje boyunca kurduğumuz katmanlar (model, servis, API, veritabanı, isolate) burada tek bir özette birleşir.

Uygulama App sınıfı ve birleştirme

class App yaz; içinde final TaskService svc alanı, App(this.svc) kurucusu ve String summary() yöntemi olsun. summary içinde return 'Birleştirme: ${svc.list().length} görev, fib(10): ${fib(10)}'; yap. main içine final app = App(InMemoryTaskService()); ve print(app.summary()) ekle.

Başlangıç kodu

main.dart
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';
import 'package:sqflite/sqflite.dart';
import 'dart:isolate';

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')];
}

Response taskHandler(Request req, TaskService svc) {
  return Response.ok('görevler: ${svc.list().length}');
}

class SqliteTaskService {
  final Database db;
  SqliteTaskService(this.db);

  Future<List<Task>> all() async {
    final rows = await db.query('tasks');
    return rows.map((r) => Task(id: r['id'] as int, title: r['title'] as String)).toList();
  }
}

int fib(int n) {
  if (n < 2) return n;
  return fib(n - 1) + fib(n - 2);
}

Future<int> heavyCompute(int n) {
  return Isolate.run(() => fib(n));
}

// App sınıfını yaz (TaskService al, summary yöntemi)
// main'de App oluştur ve summary yazdır

void main() {
  // App ile özet yazdır
}

Örnek çözüm

main.dart
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';
import 'package:sqflite/sqflite.dart';
import 'dart:isolate';

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')];
}

Response taskHandler(Request req, TaskService svc) {
  return Response.ok('görevler: ${svc.list().length}');
}

class SqliteTaskService {
  final Database db;
  SqliteTaskService(this.db);

  Future<List<Task>> all() async {
    final rows = await db.query('tasks');
    return rows.map((r) => Task(id: r['id'] as int, title: r['title'] as String)).toList();
  }
}

int fib(int n) {
  if (n < 2) return n;
  return fib(n - 1) + fib(n - 2);
}

Future<int> heavyCompute(int n) {
  return Isolate.run(() => fib(n));
}

class App {
  final TaskService svc;
  App(this.svc);

  String summary() {
    return 'Birleştirme: ${svc.list().length} görev, fib(10): ${fib(10)}';
  }
}

void main() {
  final app = App(InMemoryTaskService());
  print(app.summary());
}

Beklenen çıktı

Birleştirme: 1 görev, fib(10): 55

Soru ve cevaplar

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

1 App servis alanı

Soru
class App {
  final ____ svc;
  App(this.svc);
}
Cevap
class App {
  final TaskService svc;
  App(this.svc);
}

Açıklama: App sınıfı bir TaskService alır.

2 Birleştirme parçalarını eşleştir

Kavram Anlamı
App Uygulama
summary Özet
TaskService Servis
fib Fibonacci

3 App.summary ne yapar?

  • Şifreler
  • Sıkıştırır
  • Özet döndürür Doğru cevap
  • Serileştirir

Açıklama: App.summary uygulamanın özetini döndürür.

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