İyi bir Android uygulaması nasıl geliştirilir? — Package yapısının kurulması
Android projelerinin geliştirilmesi ve bu projelerin markette yayınlandıktan sonra oluşan bug’ ların giderilmesi, yeni özelliklerin uygulamaya eklenmesi, kod yapısını sürekli güncel tutulmaya çalışılması gibi süreçler en kaba tabiriyle yazılım geliştirme döngüsünün bir parçası olarak görülebilir.
Yukarı da tanımlamış olduğum bu kodlama sürecinin en temel noktalarından bir tanesini de belirlenen proje gereksinimlerine en uygun olan bir package yapısının oluşturulması işlemidir. Bu yazıda temel hatlarını belirleteceğim proje package yapısı bütün proje türlerine uygun olmayabilir ama genel olarak bakıldığında ise kendi durumunuza özel olarak değişiklikler ile kolaylıkla adapte edebilirsiniz.
Projenizin package yapısını oluştururken size önereceğim model ise MVP yapısının uygulanmasıdır. Bu yapıya göre proje gereksinimleri şekillendirilebilir, bussiness logic ve uygulama arasında ki ilişki kolaylıkla kurulabilir hale gelecektir.
MVP Nedir?
İlk olarak MVP kavramının açıklanması ile olaya başlamak en doğru yaklaşım olacaktır. MVP ile ilgili internet ortamında pek çok makale bulabilirsiniz. Kısaca benim bu kavramdan ne anladığımdan bahsedecek olursam, MVP uygulamanız içerisinde yer alan presentation katmanı ile business logic katmanının birbirinden ayrılması olarak özetleyebilirim.
Android uygulamanızda kurmanız gereken mimariyi tasarlarken ilk olarak düşünmeniz gereken adım, uygulamayı katmanlara ayırmak olacaktır. Bu tarz bir yaklaşım hem geliştirme aşaması hem de daha sonrasında yer alacak olan uygulamanın bakımı ve yeni özelliklerin geliştirilmesi aşamaları için ayrı bir önem taşımaktadır. Bu yazı içerisinde ben sizlere kendi bakış açıma göre önemli olarak gördüğüm katmanları anlatıyorum. İnternet ortamında yer alan makaleleri veya sunumları incelediğiniz takdirde bu katmanların uygulamaların ve projelerin özelliklerine göre ne kadar farklı olabileceğini ve bunların ne kadar özelleştirilebileceğini göreceksinizdir.
Domain Layer
İlk olarak düşünmemiz gereken layer uygulamamızın business logic’ ini ekleyeceğimiz Domain layer olarak isimlendireceğimiz katmandır. Bu katman uygulamanın diğer katmanlarından tamamen ayrı bir yapıda olacaktır. Yine internet ortamında yer alan makaleleri incelediğiniz takdirde göreceksiniz ki burada genel anlamda bir isimlendirme standartı bulunmaktadır. Bu layer içerisinde usecase olarak isimlendirdiğimiz, uygulamanın business logic’ ini temsil eden interface’ ler ve bu interface’ leri implement etmiş olan usecase sınıfları bulunmaktadır. Kısaca burada yazdığımız bütün interface’ ler ve sınıflar uygulamanın hangi mantığa ve anlayışa göre çalıştığını anlatacaktır.
public interface GetPopularTitlesUsecase extends Usecase {
void getPopularTitles();
void onPopularTitlesReceived(ArrayList<Title> title);
void sendToPresenter();
}
Model layer
Benim bakış açıma göre, Android uygulamanız içerisinde kesinlikle bir adet model katmanı olmalıdır. Bu katman içerisinde temel olarak sizin REST veya veritabanı ile alakalı işlemlerinizi gerçekleştirebileceğiniz sınıflar, arayüzler, data model sınıfları vb. bulunmalıdır.
Presentation or App Layer
Bu katman ise en temel ve bütün katmanlar arasında en çok bilinendir. Bu katman Android uygulamasının kendisini ifade eder.
View
View temel anlamda UI parçalarını temsil etmektedir.
public interface PopularTitlesView extends MVPView {
void showTitles(List<Title> titleList);
void showLoading();
void hideLoading();
}
Presenter
Presenter ise view ile model arasında kalan bir köprü görevini ifade etmektedir.
public interface RadioListPresenter extends Presenter {
void loadRadioList();
void onRadioListLoaded(RadioWrapper radioWrapper);
}
gelelim asıl meseleye
Yazının bu parçasına gelene kadar genel olarak bir Android projesini oluştururken kullanılabilecek olan bir yaklaşımı sizlere anlatmaya çalıştım. Şimdi bu projenin temel anlamda nasıl bir package yapısına sahip olmalı ondan bahsetmek istiyorum. Oluşturmuş olduğum proje de ben temel anlamda başlangıç aşamasında bir anlam ifade edecek olan bir package yapısı oluşturdum. Tabi ki bu projenin ilerleyen aşamalarında değişiklik gösterebilir ya da sizin kendi proje yapınıza bağlı olarak daha farklı uyarlanabilir.
Burada di dependency injection işlemlerinin tanımlandığı, domain uygulamanın business logic’ inin gösterildiği, model yukarıda da bahsettiğim gibi data modellerinin tanımladığı ve bunun yanı sıra database ve REST ile alakalı adımların işlendiği, mvp view ve presenter mantığının kurgulandığı, ui ise activity, adapter, fragment veya custom view’ lerin oluşturulduğu, son olarak utils ise util sınıflarının yer aldığı bir alan olarak düşünülebilir.
Bu şekilde geliştirilecek Android uygulamalarının ciddi manada düzgün bir yapıya sahip olacağına inanıyorum .Aşağıda bu yazı dizisi için geliştireceğim örnek uygulamanın Github reposuna erişebilirsiniz. Proje ile alakalı önerileriniz veya yanlış olduğunu düşündüğünüz alanlar mevcut ise PR gönderebilirsiniz. Geliştirmiş olduğumuz “Dolap: İkinci el moda” uygulamasında da benzer bir package yapısı bulunmakta.
Kaynaklar :
https://medium.com/mobiwise-blog/android-basic-project-architecture-for-mvp-72f4b33252d0#.tzgr9s7id