CodeBlanks Logo Icon CodeBlanks

Feature-based

Feature-based mimari öğrenirsin.

Feature-based

Feature-based yapı, kodu katmana göre değil özelliğe göre düzenler. Her özellik klasörü kendi modellerini, servislerini ve arayüzünü barındırır.

Örnek: lib/features/auth/ içinde login_page.dart, auth_service.dart, user_model.dart bir arada durur. Özellik dışa aktarılmadan başka özellikler içeriğini doğrudan kullanamaz.

Avantaj: bir özelliği silmek veya taşımak tek bir klasörü içerir. Özellikler arası bağımlılık azalır; ekip çalışması kolaylaşır. Her özellik kendi testlerini de içerir.

Özellik izolasyonu

Özellikler birbirleriyle doğrudan import yerine, iyi tanımlanmış arayüzler üzerinden konuşur. Bu, bir özelliğin iç yapısını değiştirdiğinde diğerlerinin etkilenmemesini sağlar.

Örnek: cart özelliği auth özelliğinin AuthService arayüzünü kullanır; iç implementasyonunu değil. Bu, auth'ü yeniden yazmayı güvenli yapar.

İyi izole edilmiş özellikler taşınabilir ve test edilebilirdir. Bir özelliği ayrı bir pakete çıkarmak da kolaylaşır; başka projelerde yeniden kullanılabilir.

Uygulama Feature sınıfı tanımla

Bir Feature sınıfı tanımla: final String name; final List<String> files; Feature(this.name, this.files); String describe() => 'feature: $name (${files.length} files)';. main içinde final auth = Feature('auth', ['login_page.dart', 'auth_service.dart']); yarat ve print(auth.describe()); ekle.

Başlangıç kodu

main.dart
void main() {
  // Feature sınıfını tanımla (name, files alanları; describe metodu)
  // bir auth özelliği yarat; describe ile yazdır
}

Örnek çözüm

main.dart
class Feature {
  final String name;
  final List<String> files;
  Feature(this.name, this.files);
  String describe() => 'feature: $name (${files.length} files)';
}

void main() {
  final auth = Feature('auth', ['login_page.dart', 'auth_service.dart']);
  print(auth.describe());
}

Beklenen çıktı

feature: auth (2 files)

Soru ve cevaplar

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

1 Özellik import'u

Soru
import 'features/____/auth_service.dart';
Cevap
import 'features/auth/auth_service.dart';

Açıklama: auth özelliği kendi klasöründe toplanır.

2 Feature-based yapıda her klasör ne içerir?

  • Kendi model, servis ve arayüzünü Doğru cevap
  • Yalnızca modelleri
  • Yalnızca testleri
  • Yalnızca yapılandırma dosyalarını

Açıklama: her özellik klasörü tüm parçalarını bir arada tutar.

3 Özellik parçalarını eşleştir

Kavram Anlamı
features/auth Kimlik özelliği
features/cart Sepet özelliği
auth_service.dart Servis dosyası
login_page.dart Arayüz dosyası

Uzman bölümündeki tüm dersler