Flutter Clean Architecture (2)
https://medium.com/p/c41890edce1c
Temiz mimari serimizin ikincisinde repository pattern’in flutter nasıl kullanacağımızı göreceğiz.
Interface Nedir?
Buraya tıklayarak ilgili yazıya ulaşabilirsiniz. “Arayüz (Interface)” başlığı olayı özetler nitelikte ama yazını tamamını okumanızı tavsiye ederim.
Repository’mizi oluşturmadan önce model sınıfımızı oluşturarak başlayalım.
Post model sınıfımızı oluşturuyoruz.
Dart dilinde interface sınıfı oluşturamıyoruz. Onun yerine abstract sınıflar oluşturarak ihtiyacımı karşılayabiliriz.
PostRepository’mizi oluşturuyoruz.
Interface imiz de uygulama içerisinde ilgili repoda ihtiyaç duyduğumuz metotları ekliyoruz. Ardından bunuda sınıfımıza implement ediyoruz.
Repository sınıfını singleton olarak tanımlarsak ve içerisinde veri tutmasını sağladığımızda farklı ekranlardan bu sınıfı erişerek aynı servise istek atmadan verileri kullanabiliriz. Ya da db ye kaydettiğimiz veriyi servise gitmeden gösterip daha sonra servisten çektiğimiz veriyle güncelleye biliriz. Kısacası veri deposu olarak kullanabiliriz.
Örnek İl ilçe bilgisine eriştiğimiz servisimizin olduğunu düşünelim her seferinde bu verileri çekmemize gerek yok ilk istek atıldığında il verisini çekip liste değişkenine eklersek tekrar ihtiyaç duyduğumuzda servise gitmemize gerek kalmaz. İlçe içinde map list oluşturup il id sini key olarak tanımlarsak ilçeleride cache de tutmuş oluruz.
Neden interface ten türettik?
Örneğimiz basit bir örnek olduğu için bu şekilde geliştirilmesi gereksiz gözükebilir yazımızın devamında bununla ilgili geliştirmeler yapacağız. Yinede merakınızı gidermek adına bir kaç örnek yazmak istiyorum. Repomuzun verileri web service üzerinden aldığı bir örnekte test kodu yazarken gelecek verilerin değişkenliği testimizi bozacağı için mock data source kullanmamız gerekebilir. Bu durumda interface imizden türettiğimiz yeni bir sınıfla bu kodları test edebiliriz.
Bonus: Tüm repolarımda kullanacağım temel metotlar için CrudRepository oluşturup Create,Read, Update, Delete işlemlerini bundan türetebilirim. Burası daha çok ihtiyaca yönelik hazırlanmalı.
Artık view model imizde repository mizi kullanabiliriz. Önceki yazımızın devamı niteliğinde olduğu için BaseViewModel’in ne olduğunu biliyorsunuz.
MaterialAppimizde oluşturduğumuz HomeView modelin constructor ına Repository mizin implement edilmiş halini ekliyoruz.
View modele erişip işlemlerimizi artık yapabiliriz. Bu örnekte viewModel in fonksiyonları tetiklenerek listeye elemen ekleme ve çıkarma işlemleri yapılıyor.
Sonraki yazımızda Dependency Injection inceleyeceğiz.