FlutterMobil

Flutter Clean Architecture & BloC Pattern Bölüm 2

Flutter Clean Architecture yazı dizimizin ikinci bölümünde kod örnekleriyle birlikte yapıyı pekiştirip, bir örnek üzerinden anlamaya çalışacağız. Bir önceki yazıda yapıyı genel olarak açıklayıp, neyi nasıl yaptığımızı anlatmıştım okumadıysanız okumanızı tavsiye ederim.

Bu yazı biraz uzun olacak ama tüm detaylarıyla özümseyerek takip ettiğinizde kafanızda herhangi bir soru işareti kalmadan yapının tüm detaylarını kavrayabileceksiniz. Şimdi ilk olarak basemodel’den bahsedelim.

BaseModel

BaseModel’in görevi, API tarafına gönderdiğimiz isteklerdeki ortak metotları bir arada tutmak ve NetworkManager yapısında kullanacağımız generic bir yapı oluşturmayı sağlamaktır.

CarsModel

Dummy data için Cars apisinden gelen response’u BaseModel’den extend edip, tanımladığımız zorunlu iki fonksiyonu override edip, içlerini dolduruyoruz.

CarRepository (Interface)

Burada ise fonksiyon tanımlamamızı yapıyoruz. Api’den çekeceğimiz verinin dönüş tipini de belirtip, gerekli soyutlamaları burada yapıyoruz. Yaptıktan sonra UseCase aşamasına geçebiliriz.

GetCarUseCase

Her servis isteğini ayrı usecase’ler içerisinde yapıp, soyutlamayı, kod okunabilirliğini ve test edilebilirliği arttırıyoruz. UseCase içerisinde de Either yapısı kullanıyoruz. Tupple gibi düşünebilir. İkili şekilde verileri tutmamıza olanak sağlayan yapıyı, eğer veri API’den başarılı bir şekilde geldiyse sağ tarafa, başarısız ise sol tarafa atarak kullanabiliyoruz. Bu kısım opsiyonel isterseniz gelen response datasını sol tarafa da atabilirsiniz.

CarRepositoryImpl

Burada ise soyut olarak tanımladığımız CarRepository sınıfından extend edip, repository’mizin içini dolduruyoruz. Buradaki RepositoryManager kısmına ayrıca değineceğim. Generic bir networkManager ve repositorymanager yapısı da var bu örnekte. Oraya da değineceğim.

RepositoryManager

Network isteklerimizi yönettiğimiz generic yapımız olan RepositoryManager’da get ve post istekleri için ayrı fonksiyonlar tanımlayarak modülerliği arttırmış olduk. Sınıfımıza Dio’yu parametre olarak alarak (DI) sınıf içerisinde yönetiyoruz. Gelen istekleri json formatına çevirip, BaseModel tipinde döndürüyoruz.

Presentation katmanına kadar olan tüm kısımları burada işlemiş olduk. Presentation katmanı View ve ViewModel’ı içerdiği için, BloC pattern kısmına burada giriş yapacağız o yüzden makalenin 3. bölümünde bundan bahsedeceğim. State yönetimini detaylı bir şekilde işleyip, API’den aldığımız veriyi View’a aktarıp göstereceğiz.

Github Repo

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu