Bir Android uygulamasının sürdürülebilir olması, hataların hızlıca çözülebilmesi, kodların daha anlaşılır bir yapıyla yazılması ve yeni özelliklerin zorluk çekmeden eklenebilir olması geliştirici için oldukça önemli bir konudur. Bu doğrultuda uygulama mimarisini doğru tasarlayabilmek ve işlevsel bir package yapısı oluşturabilmek gerekmektedir.
Package yapısı uygulamanın özelliklerine göre değişebileceği gibi farklı mimarilerde de değişim gösterebilmektedir. Bu yazıda benim tercihen kullandığım package yapısına ve diğer geliştiricilerin kullandıkları yapılara değineceğim.
Genel olarak kullanılan 2 tür yapı var. Bunlardan birisi özellik tabanlı diğeri ise işlevsel tabanlı
Özellik tabanlı kullanılan yapı, uygulamaya yeni bir özellik eklemek istediğinizde yeni bir package oluşturup onunla ilgili tüm dosyaların o package altında toplanmasıdır.
Üstte gördüğünüz üzere her özellik için bir package tanımlanmıştır ve içerisinde örneğin presenter, view, model, activity, adapter, fragment vs. gibi klasörler yapılmıştır.
Bir diğer yapı ise benim sıklıkla kullandığım işlevsel tabanlı package yapısıdır.
Bu şekilde kullanıldığında ise her bir package yapısı yapacağı işlemlere göre gruplayıp onların altına özellikler eklenebilir.
1 2 3 4 5 6 7 8 9 10 11 12 |
com.example.project ├─ di ├─ event ├─ model ├─ mvp ├─ presenter ├─ base ├─ createaccount ├─ login ├─ view ├─ ui └─ util |
Üstte oluşturulan yapı MVP(Model – View – Presenter) mimarisini kullanan ve işlevsel tabanlı olarak tanımladığım yapı kullanılmıştır.
Burada;
di : Dependency injection işlemlerinin yapıldığı Dagger2 ile Module, Component, Scope classlarının tanımlandığı kısımdır.
event : Bus ile veri gönderimi yaparken kullanılacak olan event classlarının yer aldığı kısımdır.
model : Bu kısım uygulamanın model katmanını tanımlar içerisinide uygulamanın gidişatına göre local, remote, api, entity şeklinde gruplamalar yapılabilir.
mvp : Model – View – Presenter mimarisini kullanan uygulamanın presenter ve view classlarının yer aldığı kısımdır.
ui : Activity, fragment, adapter classlarının yer aldığı package yapısıdır.
util : Uygulama içerisinde kullanılacak içerisinde static metodları barındıran Util classlarının yer aldığı kısımdır.
widget : Uygulamanıza özel yazdığınız custom viewleri barındıran kısımdır.
Sizde uygulamanıza göre kendi package yapısını oluşturabilir ve daha rahat kod geliştirmenize yardımcı olmasını sağlayabilirsiniz.
Umarım faydalı olmuştur. Bir başka yazıda görüşmek üzere…