Android proje modülerleştirmesini göz önünde bulundurmak
Yayınlanan: 2019-08-21Bir proje belirli bir ölçeğe ulaştığında, onunla tek bir modülde daha fazla çalışmak daha az etkili hale gelir. Modülerleştirme daha sonra etkili bir çözüm haline gelir.
Modülerleştirmenin 4 avantajı
Modülerleştirmeye karar vermeden önce, tam olarak neyin dahil olduğu konusunda net olmak iyidir. Modüler bir android proje yapısının avantajları şunları içerir:
Daha iyi kod izolasyonu
Her modül, genel API arabirimlerini açığa çıkarabilir ve uygulama ayrıntılarını gizleyebilir. Tek bir modülle, uygulamasının iyi gizlendiğinden tam olarak emin olamazsınız (özellikle paket görünürlük değiştiricisinin bulunmadığı Kotlin'de).
Daha kolay yeni teknoloji değerlendirmesi
Bir modül oluşturduğunuzda, diğer modülleri etkilemeden yeni mimari deseni veya yeni kitaplığı kontrol edebilirsiniz.
Azaltılmış proje oluşturma süresi
Bir modülün değiştirilmesi, o modülün ve ona bağlı olan diğerlerinin yeniden oluşturulmasını gerektirir. Bu belgeleri okuyarak tam olarak nasıl çalıştığını görün: Android geliştiricileri. Bağımlılık yapılandırmaları
Daha uygun iş
Daha küçük ve yalıtılmış kod parçalarını analiz etmek/hata ayıklamak/yeniden düzenleme yapmak daha kolay hale gelir. Ayrıca, yeni geliştirici katılımı daha hızlı olacaktır.
Bu avantajlar sizi modülerleştirme sürecini başlatmaya ikna etmeye yetecek gibi görünüyor, ancak nasıl başlayacaksınız?
#1: Modüllerinizi ve aralarındaki ilişkileri tanımlayın
Modüllerinizi tanımak için iki yaklaşım vardır: özelliğe göre ve katmana göre.
Özellik modülleri altında, uygulamanın kullanıcılara açık olan bazı alanlarını anlayabilirsiniz (örn. oturum açma, gösterge tablosu, profil vb.). Bu alanlar, tek bir ekrandan veya bazı işlemleri kapsayan ekranların akışından oluşabilir. Bu tipteki modüller aynı tipteki modüllere bağlı olamaz.
Özellikleri belirledikten sonra, kesinlikle birkaç hatta tüm modüllerin ihtiyaç duyduğu ortak işlevleri çıkarmanız gerekecektir. Bu modüller ayrı mimari katmanlardan (kalıcı depolama, ağ oluşturma, gezinme, UI bileşenleri gibi) veya bir dizi özellik tarafından kullanılan bazı verileri işlemenin iş mantığından sorumlu olabilir. Bu tür modüllere genellikle kütüphaneler denir. Kütüphane modülleri bağımlılık ağaçları oluşturabilir.
Özellik ve kitaplık modüllerinin yanı sıra, diğer modüller arasındaki yatay bağlantıları yönetmek için bir modüle ihtiyaç vardır (bununla ilgili daha fazla bilgi bir sonraki noktada). Bu modül, özel bir uygulama sınıfı ve bir bağımlılık enjeksiyonu kurulumu içerecektir. Başka hiçbir modül bu modüle bağlı olamaz, ancak bu modül projedeki diğer tüm modüllere bağlıdır.

Yukarıdaki tanımlar dikkate alındığında, modül hiyerarşisi şöyle görünebilir:
#2: Bağımlılık ekleme kurulumu
Proje modülleri arasındaki bağımlılıklara rağmen, hançer bağımlılıkları da kurmalısınız. Dagger, bağımlılığı bildirmenin iki yolunu sunar: alt bileşenler ve bileşen bağımlılığı .
Hançer alt bileşen bağımlılığı, ebeveynlerin tüm bağımlı çocukları beyan etmesini gerektirir. Proje modülleri arasında bu tür bir ilişki çalışmaz çünkü proje modülü bağımlılığının yönünü tersine çevirir. Ancak ayrı proje modülleri içinde kullanılabilir.

Hançer bileşeni bağımlılığı daha esnektir çünkü bir çocuk ebeveyne bağımlı olduğunu beyan edebilir. Bu, ayrı proje modülleri arasında bu tür bir bağımlılığın kullanılmasını mümkün kılar.
Bir noktada, bir modülün başka bir modül hakkında sınırlı bilgiye ihtiyaç duyduğunu görebilirsiniz. Bunun çok iyi bir örneği, özellik modülleri arasında gezinme olabilir. Bu tür bir ilişkinin sağlanmasına genellikle yatay bağımlılık denir. Ayrı modüller arasında bu iletişim kanalını oluşturmak için, bu iletişimi ve beyan edilen arayüzlere bir uygulamayı bağlayacak modülleri tanımlayan arayüzlere sahip ek modüller gereklidir.
Yatay bağımlılığı yönetmek için proje modülü bağımlılık kurulumu aşağıdaki resimde sunulmaktadır:

Bu tür ilişkiler için örnek kod, makalenin sonunda bir projede verilmiştir.
# 3: Gradle kurulumu
Her proje modülünün, eklenen bağımlılıklar ve eklentiler dışında hemen hemen aynı olan gradle.build'i vardır. Bu nedenle, proje dizini kökündeki bir gradle dosyasına tekrarlayan yapılandırmayı çıkarmak güzel. Böyle bir dosya, statik kod analizini yürütmek veya birim testini çalıştırmak için ortak gradle görevlerini de kaydedebilir.
Bu tür yaygın kurulumun kod parçacığı burada bulunur:
afterEvaluate { project -> def isAndroid = project.plugins.hasPlugin('com.android.library') || project.plugins.hasPlugin('com.android.application') setupModule(isAndroid) setupCommonTestDependencies(isAndroid) setupCommonTasks(isAndroid) } def setupModule(isAndroid) { if (isAndroid) { android { compileSdkVersion projectCompileSdk defaultConfig { minSdkVersion projectMinSdk targetSdkVersion projectTargetSdk } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } lintOptions { abortOnError true checkReleaseBuilds false checkAllWarnings true warningsAsErrors true def lintBaseline = file("quality/lint-baseline.xml") if (lintBaseline.exists()) baseline lintBaseline } } } else { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } } def setupCommonTestDependencies(isAndroid) { dependencies { testImplementation "junit:junit:${junitVersion}" testImplementation "org.assertj:assertj-core:${assertJVersion}" testImplementation "org.mockito:mockito-core:${mockitoVersion}" testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:${mockitoKotlinVersion}" if (isAndroid) { androidTestImplementation "androidx.test.ext:junit:${axTestJUnitVersion}" androidTestImplementation "androidx.test.espresso:espresso-core:${axEspressoLibVersion}" } } } def setupCommonTasks(isAndroid) { if (isAndroid) { tasks.register("unitTest") { task -> task.dependsOn(testDebugUnitTest) } } else { tasks.register("unitTest") { task -> task.dependsOn(test) } } }
Çözüm
Bu makale, bir Android projesini modüler hale getirmek için ayrıntılı veya eksiksiz bir kılavuz değildir. Ama bence proje modülerleştirmeye başlarken göz önünde bulundurmanız gereken yönleri ele alıyor.
Bağlantıda yatay bağımlılığı gösteren bir kod parçası bulunur.
Android için yerel bir uygulama oluşturmak ister misiniz? Miquido'yu seçin!