Bütün kodların Activity veya Fragment sınıflarının içerisine yazılması

Android geliştirmeye ilk başladığım zamanlarda benimde yaptığım gibi neredeyse bütün methodlar vs. Activity veya Fragment sınıflarının içerisine koyulması genel olarak çoğu geliştiricinin yapmış olduğu en temel hatalardan birisidir. Açık olarak söylemek gerekir ki, bu aşamalardan bende geçtim. Tabi ki bunun sonucunda birbirine girmiş bir codebase ortaya çıkmaktadır.

Şimdi çözüm yollarından bahsetmekte yarar var. İnternette yer alan uygulama mimarileri hakkında ki yazıları okuyacak olursanız temel olarak dikkat etmeniz gereken noktalar olduğunun farkına varacaksınızdır.

Genel olarak çoğu uygulama mimarisinde uygulayabileceğiniz bir yöntemden bahsetmek istiyorum. Burada mimari isimlerinin de çok önemli olduğunu düşünmüyorum. Projenin geliştirilmesi sırasında ki ana amacınız şu şekilde olmalıdır. Activity veya Fragment sınıfları içerisinde yer alan kod parçaları tamamen arayüzde gösterilmesi veya gösterilmemesi gereken widget durumunun ayarlanmasını koordine edecek şekilde olmalıdır. Bütün bu koordinasyon işlemini yapabilecek Presenter sınıfları oluşturarak bu işlemleri kontrol edebilirsiniz. Presenter ve Activity-Fragment sınıfları arasında ki işlemlerinin koordinasyonunu ise, iletişimi sağlayacak olan bir tane View arayüzü üzerinden koordine edebilirsiniz.

Canlı bir örnek üzerinden yapılacak olursa, Dolap: İkinci el modauygulaması içerisinde yer alan Ödeme sayfasını yaparken oluşturduğum sınıf yapılarından örneklendirebilirim.

İlk olarak işleme bir adet PaymentActivity sınıfı oluşturarak başladım. Bu sınıf içerisinde tamamen Android platforumuna ait olan widget’ ların durumlarının kontrolü veya adapter sınıflarının veri listelerinin doldurulması amacı taşıdım. Ayrıca herhangi bir business logic kontrolü içeren kod yazımından da uzak durmaya çalıştım diyebilirim. Bütün bu arayüzün oluşturulması işlemlerini yöneten bir tane OrderRequestPresenter isimli Presenter sınıfı oluşturdum. Bu sınıf içerisinde ise Dolap API’ sine atılan istek sonucunda dönen datalara göre arayüzde gösterilecek olan görsel elemanları kontrol edilmekte ve gerekli yönelendirmeler yapılmaktadır.

Örneğin API’ ye yapılan istek sonucunda API bize ödeme sırasında kullanılacak olan kuponların listesini dönecektir. Burada eğer kullanılabilecek olan kuponlar var ise, ekranda kuponların listesinin bulunabileceği bir Recyclerview olacak, eğer aktif olarak kullanılacak kuponlar yok ise, bunun yerine ekranda başka bir görünüm oluşacaktır.

İlk olarak API’den bize dönen kupon listesini, loadCouponsInfoLoadmetoduna parametre olarak gönderdik.

scription">Kod:
loadCouponsInfoLoad(orderCreateResponse.getCoupons());
Daha sonra bu metot içerisinde basit olarak listenin boyunu kontrol edilecek Activity içerisinde ki işlemlerin kontrolü için yazmış olduğumuz metotları kullanıyoruz.

description">Kod:
if (CollectionUtils.isNotEmpty(coupons)) {
    orderRequestView.couponsInfoLoaded(coupons);
} else {
    orderRequestView.noCouponsInfoList();
}
OrderRequestPresenter ve PaymentActivity arasında ki işlemlerinin iletişimini sağlayacak olan bir tane interface oluşturdum. Bu interface içerisinde arayüz işlemlerinin durumlarını ifade eden metotlar bulunmakta.

Kod:
void couponsInfoLoaded(List<CouponResponse> couponList);
void noCouponsInfoList();
Bu Interface içerisinde yer alan metotları PaymentActivity içerisinde implement ettikten sonra gerekli arayüz işlemlerini yaparak, süreci tamamlıyoruz.

Kod:
@Override
public void couponsInfoLoaded(List<CouponResponse>couponResponseList) {
}
@Override
public void noCouponsInfoList() {
}
İlk bakışta çok fazla sınıf veya interface yazılıyormuş gibi bir izlemine kapılabiliriz. Ancak ana hedef noktamız yazmış olduğumuz kodların Single Responsibility kuralına uygun olarak yazılması.

Burada bir uyarı da bulunmak istiyorum. Daha fazla araştırma yaparken fark edeceksiniz ki bahsetmiş olduğum metodun daha da ilerisinde kullanılacabilecek yapılar var. MVVM-Databinding gibi yöntemler kullanılarak da bir uygulama mimarisi oluşturabilirsiniz. Tabi bu ayrı bir yazı konusu. Yakın zamanda Dolap uygulamasında Databinding ile ilgili denemeler yapmaya başlıyor olacağım. Bu konuda ki edindiğim tecrübeleri ayrı bir blog yazısında yayınlayabilirim.

Android uygulama geliştirme temelinde yazdığım blog yazılarına aşağıdaki linkten ulaşabilirsiniz.

MuratCanBur