Mobile Application Development
Rorty Uygulaması ile Flutter Clean Architecture
Haziran 30, 2022
Giriş bölümünü okumaya devam etmeden önce doğrudan projeyi incelemek isterseniz, aşağıdaki bağlantıdan erişim sağlayabilirsiniz:
GitHub – developersancho/Rorty.Flutter
Flutter Clean Architecture in Rorty is a sample project that presents modern, approach to Flutter application…

Neden Flutter
Flutter, Google tarafından sağlanan, hızlı ilerleyen ve ilgi çekici platformlar arası (cross-platform) mobil uygulamalar oluşturmaya yönelik bir SDK’dir. Dart, Flutter uygulamaları için bir geliştirme dilidir. Flutter, Dart ile yazılmış tek bir kod tabanı kullanarak hem Android, iOS, Web hem de Masaüstü (Desktop) platformlarında kod derlemeyi destekler.
Neden Clean Architecture (Temiz Mimari)
MVVM/MVC/MVP/MVI mimarisi çoğu uygulama için yeterince iyidir. Ancak uygulama büyüdüğünde, devasa kod tabanının bakımını yapmak zorlaşır ve bazen her bir katmanın sorumluluklarını ayırmak için refactoring (kodu yeniden yapılandırma) çalışmaları gerekir; işte bu noktada clean architecture devreye girer.
Clean architecture’ın önemli bir hedefi, geliştiricilere kodu, iş mantığını (business logic) kapsülleyecek ancak bunu sunum mekanizmasından (delivery mechanism) ayrı tutacak şekilde organize etme yolu sunmaktır.
Giriş
Şimdiye kadar öğrendiklerimi pekiştirmek ve kendimi geliştirmek için bir Flutter Rorty Uygulaması (Rick And Morty) geliştirdim.
Rorty, Flutter kullanarak en iyi uygulamaları (best practices) takip ederek Dart dilinde yazılmış; ölçeklenebilirlik, test edilebilirlik ve sürdürülebilirlik üzerine odaklanmıştır.

Ne Geliştirdim
Proje, Dart ve Flutter ile en son teknoloji yığınını (tech-stack) kullanarak Flutter uygulama geliştirmeye modern bir yaklaşım sunmaktadır.
Projenin amacı en iyi uygulamaları göstermek, bir dizi kılavuz sağlamak, tek modüllü bir uygulama sunmak, ölçeklenebilir, sürdürülebilir ve test edilebilir olmaktır. Bu uygulama basit görünebilir, ancak daha büyük ekipler ve uzun uygulama yaşam döngüsü yönetimi için uygun olan, daha büyük bir uygulamanın sağlam temelini oluşturacak tüm bu küçük detaylara sahiptir.
Bu proje için Clean Architecture kullanmaya çalıştım. MVP Özellikleri:
- Splash (Açılış Ekranı)
- Home (Ana Sayfa)
- Characters List (Karakter Listesi)
- Character Detail (Karakter Detayı)
- Episodes List (Bölüm Listesi)
- Episodes Detail (Bölüm Detayı)
- Locations List (Lokasyon Listesi)
- Locations Detail (Lokasyon Detayı)
- Settings (Ayarlar)
- Abouts (Hakkında)
Ekran Görüntüleri




Uygulama Yapısı
Clean architecture’ın temel faydalarından birinin, uygulama genelinde ve kaynak kodda net bir navigasyon (gezinme) sağlaması olduğu varsayılır. Projenin kök klasörüne bakıldığında aşağıdaki yapı netleşmektedir.

Data (Veri Katmanı)
Data katmanı, domain katmanı için uygun veri kaynağını seçmekten sorumludur. Domain katmanında bildirilen repository’lerin (depoların) uygulamalarını (implementations) içerir. Data katmanının bileşenleri şunları içerir:
model:
- dto: Kullanıcı arayüzü (ui) modelinin dto’sunu tanımlar, ayrıca domain, response ve entity modelleri arasında veri dönüşümünü gerçekleştirir.
- local: SQLite veritabanının şemasını tanımlar.
- remote: Ağ yanıtlarının POJO yapısını tanımlar.
local:
Floor kullanarak önbelleğe alma (caching) işlemlerini gerçekleştirmekten sorumludur.
remote:
Retrofit/Dio kullanarak API uç noktalarını (endpoints) tanımlamak gibi ağ işlemlerini gerçekleştirmekten sorumludur.
repository:
Verileri domain katmanına sunmaktan sorumludur.
Domain (İş Mantığı Katmanı)
Bu, uygulamanın çekirdek katmanıdır. Domain katmanı diğer katmanlardan bağımsızdır, bu nedenle domain iş mantığı diğer katmanlardan bağımsız olabilir. Bu, diğer katmanlardaki değişikliklerin domain katmanı üzerinde hiçbir etkisinin olmayacağı anlamına gelir; örneğin ekran arayüzü (presentation katmanı) veya veritabanının değiştirilmesi (data katmanı), domain katmanı içinde herhangi bir kod değişikliğine yol açmaz.
Domain katmanının bileşenleri şunları içerir:
- usecase: Bir veritabanından veri almak veya bir servise istek göndermek gibi tek bir eylemi barındırırlar. Yapmaları gereken eylemi çözmek için repository’leri kullanırlar.
Presentation (Sunum Katmanı)
Presentation katmanı, kullanıcıya bilgi gösterilmesinde yer alan bileşenleri içerir. Bu katmanın ana parçası Views (widget’lar) ve ViewModel’lerdir. showing information to the user. The main part of this layer are the Views(widgets) and ViewModels.
Teknoloji Yığınları (Tech Stacks)
Bu proje, flutter ekosisteminin popüler kütüphanelerinin, eklentilerinin ve araçlarının birçoğunu kullanır.
- Stacked — Flutter’da MVVM’den ilham alan bir mimari için mimari yapı ve widget’lar sağlar.
- Provider — InheritedWidget’ın kullanımını daha kolay ve daha yeniden kullanılabilir hale getiren bir sarmalayıcıdır.
- Get It — Dependency Injection kütüphanesidir.
- Retrofit — source_gen kullanan, Chopper ve Retrofit’ten ilham alan bir dio istemci üreticisidir.
- Dio — Interceptor’ları, FormData’yı, İstek İptalini, Dosya İndirmeyi, Zaman Aşımını vb. destekleyen Dart için güçlü bir HTTP istemcisidir.
- Go Router — Navigation 2 tabanlı, derin bağlantıları (deep linking), veri odaklı rotaları ve daha fazlasını destekleyen Flutter için deklaratif bir yönlendiricidir (router).
- Flutter Native Splash — Flutter’ın varsayılan beyaz yerel açılış ekranını arka plan rengi ve açılış resmi ile özelleştirir. Karanlık modu, tam ekranı ve daha fazlasını destekler.
- Shared Preferences — Basit anahtar-değer çiftlerini okumak ve yazmak için Flutter eklentisidir. iOS’ta NSUserDefaults, Android’de SharedPreferences yapılarını sarmalar.
- Easy Localization — Flutter Uygulamalarınızı kolay ve hızlı bir şekilde uluslararasılaştırma ve yerelleştirme aracıdır.
- Url Launcher — Bir URL’yi başlatmak için Flutter eklentisidir. Web, telefon, SMS ve e-posta şemalarını destekler.
- Floor — Flutter uygulamalarınız için tip güvenli (typesafe), reaktif ve hafif bir SQLite soyutlamasıdır.
- Logger — Güzel loglar yazdıran, küçük, kullanımı kolay ve genişletilebilir log kaydedicidir.
Code Analyze Tools
- Lints — This package contains a recommended set of lints for Flutter apps, packages, and plugins to encourage good coding practices.
Kod Analiz Araçları
- Lints: Bu paket, iyi kodlama uygulamalarını teşvik etmek amacıyla Flutter uygulamaları, paketleri ve eklentileri için önerilen bir dizi lint kuralı içerir.
Sonuç
Flutter, Android ve iOS uygulamaları için aynı kod tabanına sahip olması nedeniyle öğrenmesi kolaydır; her iki mobil işletim sisteminde de aynı anda uygulamaları yayına almak için kullanabilir, ayrıca Android ve iOS’ta tüm özelliklere yerel (native) olarak erişilebilen bir uygulama geliştirebilirsiniz.
Tam Proje
Projenin kaynak koduna aşağıdaki bağlantıdan erişebilirsiniz.
GitHub – developersancho/Rorty.Flutter
Flutter Clean Architecture in Rorty is a sample project that presents modern, approach to Flutter application…
Teşekkürler 🚀
Umarım size yardımcı olur. Sizin için faydalı olduysa bu makaleyi alkışlayabilir ve bu tarz makaleler için beni takip edebilirsiniz.
Mutlu ve sağlıklı kodlamalar!
Yazar: Mesut Genç