Birden çok işlemi mükemmel şekilde destekleyen bileşenli bir çözüm

Başına yazın

Bileşen teknolojisi, çok kişili işbirliği gerektiren orta ve büyük projeler için uygundur.Tek kişilik bir projeyse ve geliştirici bileşenleştirme alıştırması yapmamışsa tavsiye edilmez.

Bileşenleştirmenin avantajları

1. İş yalıtımı, her iş modülünün diğer iş modüllerini önemsemeden kendi iş uygulamasına odaklanmasına olanak tanır.

2. Ayrı hata ayıklama, her modül bağımsız olarak çalışabilir, bu da geliştirme ve hata ayıklama için uygundur.

3. Bileşenlerin yeniden kullanılabilirliği, üst üste binen işlere sahip farklı uygulamalar için bileşenler doğrudan birleştirmek için kullanılabilir.

4. AOP için uygundur.

5. Grup üyelerinin kod değiştirme izinleri daha ayrıntılı bir şekilde ayarlanabilir.

DRouter: birden çok işlemi mükemmel şekilde destekleyen bileşenli bir çözüm

demo indirme

Çerçeve özellikleri

* Birden fazla işlem için mükemmel destek ve kullanıcıların AIDL hizmetini bağlamasını veya özelleştirmesini gerektirmez.

* Sayfa yönlendirme: Etkinlik için url tanımlamayı destekleyin, ardından url aracılığıyla Etkinlik'e atlayın, durdurucu eklemeyi destekleyin.

* Çapraz işlem olay veriyolu.

* Çapraz süreç API çağrılarını destekler.

* Modül ayırmayı, sayfa yönlendirmeyi, API çağrılarını ve olay veri yolunu tam olarak gerçekleştirin, hepsi çapraz modül kullanımını destekler.

* Modülün başlatılmasına ve sayfaların, engelleyicilerin ve sağlayıcıların otomatik kaydına rehberlik etmek için AOP'ye dayanmaktadır.

Nasıl yapılandırılır

1. BaseModule'a bağımlılık ekleyin:

2. Ek açıklama işlemcisinin bağımlılığını DRouter kullanması gereken diğer bileşenlere ekleyin:

3. Çok işlemli yapılandırma:

* Projenizin çok işlemli geniş alan yönlendirmesi kullanması gerekiyorsa, lütfen Uygulamanızın IMultiProcess arabirimini uygulamasına izin verin. Geniş alan yönlendirme varsayılan olarak devre dışıdır ve yalnızca bu arabirim uygulandığında etkinleştirilecektir.

* Uygulama modülünün build.gradle dosyasında ve eklentiyi uyguladıktan sonra derlenmiş RouterPlugin eklentisine başvurmalıdır: 'com.android.application', aşağıdaki gibi:

''

eklenti uygula: 'com.android.application'

eklenti uygula: "com.dovar.router.plugin" // eklenti uygulandıktan sonra olmalıdır: 'com.android.application', aksi takdirde AppExtension bulunamaz

buildscript {

kod depoları {

Google()

uzman {

url "https://plugins.gradle.org/m2/"

}

}

bağımlılıklar {

classpath "gradle.plugin.RouterPlugin: eklenti: 1.1.8"

}

}

''

nasıl kullanılır

Application.onCreate () içinde başlatmayı tamamlayın

DRouter.init (uygulama);

Sayfa yönlendirme

Eylem yönlendirme (API çağrısı)

Etkinlik veriyolu

Etkinliklere abone ol

Olayları yayınlayın (herhangi bir ileti dizisinde)

Aboneliği iptal etme etkinliği (subscribeForever () aracılığıyla abone olurken, zamanında abonelikten çıkmanız gerekir)

Bileşen başlatma girişi oluşturun (gerekli değildir)

DRouter'ın bileşenli uygulaması

Arayüz yönlendirme

Eylem yönlendirme

Etkinlik veriyolu

Bileşenleştirilmiş proje mimarisi diyagramı

APP Shell Engineering hakkında

Paketleme yapılandırmasını yönetmek ve bileşen referanslarını ayarlamak için kullanılır.

Uygulama bileşeni katmanı hakkında

İş bileşenleri ve işlevsel bileşenler dahil olmak üzere iş merkezi (işlevsel bileşenler özellikle kullanıcı arayüzü mantığı olmayan işletmelere atıfta bulunur, ayrıma dikkat edin, ağ talepleri, görüntü yükleme, bunlar temel çerçeve katmanına aittir).

Kamu hizmeti katmanı hakkında

Bileşenler arası çağrıları ve ortak kaynakları yönetin. Ayrıntılar için lütfen projedeki common_service bölümüne bakın.

Neden temel çerçeve katmanı ile uygulama bileşeni katmanı arasında bir kamu hizmeti katmanı oluşturmalı?

* Gelecekte üçüncü taraf kitaplıklarını değiştirme ihtiyacını kolaylaştırmak için temel çerçeve katmanı işlevi API'sine yapılan çağrıyı kapsülleyin. Birçok programcının üçüncü taraf kitaplıklarını (özellikle temel kitaplıkları) değiştirmenin acısını yaşadığına inanıyorum.

* Proje kendisini sarmaz ancak doğrudan üçüncü taraf API'ye başvurursa, değiştirmek istediğinizde değiştirilmesi gereken çok fazla kod olduğunu göreceksiniz.

* Genel kaynakları ve kodları depolayın, bunları üst düzey iş kullanımına maruz bırakın ve bu kaynakların temel çerçeve katmanına düşmesini önleyin, böylece temel çerçeve katmanındaki gereksiz güncellemeleri azaltın.

* Çok kişili işbirlikçi bir projede, temel çerçeve kararlı olmalıdır, bu nedenle temel çerçeve katmanına mümkün olduğunca az taahhütte bulunmayı umuyoruz.

Temel çerçeve katmanı hakkında

Ağ istekleri, görüntü yükleme, genel özel kontroller gibi işle ilgisi olmayan genel işlevsel modüller.

1. Bileşen atlaması

Etkinlik için yol tanımlama desteği, ardından yol boyunca Etkinlik'e atla ve atlama önleyiciyi ayarlama.

2. Bileşenler arasında süreç içi iletişim mekanizması

1. Hizmet sağlayıcı, hizmetleri diğer bileşenlere sunmak için DRouter ile Action kaydettirir.

2. Çoktan çoğa: LiveEventBus.

3. Çok süreçli iletişim mekanizması

1. Hizmet sağlayıcı, hizmetleri diğer işlemlere maruz bırakmak için DRouter ile Action kaydeder ve aktarılan parametrelerin serileştirilmesi gerekir, aksi takdirde DRouter tarafından filtrelenirler.

2. Çoktan çoğa: LiveEventBus.

4. Kaynak dosyası çakışması

1. AndroidManifest.xml birleştirme:

Her modülün kendi AndroidManifest bildirim dosyası vardır ve tüm modüllerin manifest dosyaları, uygulamanın derlenmesi sırasında sonunda tek bir dosyada birleştirilecektir.

Sentezlenen AndroidManifest dosyasını Uygulama olarak yapılandırılan modülün altındaki build / intermediates / manifests yolunda bulabilir ve birleştirme kurallarını ve çakışma işleme kurallarını kabaca analiz etmek için derlemeden önceki ve sonraki farkları karşılaştırabiliriz.

Aynı ada sahip kaynaklar birden çok modülde görünüyorsa (örneğin, android: label = "@ string / app_name") ve aynı ada sahip kaynaklara sentezlenmiş AndroidManifest.xml tarafından başvuruluyorsa, geçerli ApplicationModule kaynaklarının ilk olarak kullanılacağına dikkat edilmelidir.

2. R dosyası:

LibModule'daki R dosyasındaki id artık statik bir sabit değil, statik bir değişkendir, bu nedenle kaynak kimliğini değiştirmek için artık switch..case .. sözdizimini kullanamazsınız

3. Diğer kaynaklar:

2. Kaynakların bölünmesiyle ilgili olarak, bazı stillerin, ortak dizelerin, paylaşılan resimlerin, çizimlerin ve diğer kaynakların common_service'de depolanması önerilir. Farklı modüllere ait kaynaklar ilgili modüllerinde saklanmalıdır.

5. Modülü ayrı ayrı hata ayıklaması için nasıl yapılandırabilirim?

Adım 1: İlgili modülün isDebugMode gibi proje kök dizinindeki gradle.properties altında bağımsız olarak çalışıp çalışmadığının özelliklerini bildirin. Çünkü gradle.properties dosyasında bildirilen özelliklere her modülün build.gradle içinden doğrudan erişilebilir.

Adım 2: Kırmızı kutudaki üç parçayı modülün build.gradle dosyasına ekleyin:

Modül türünü ayarlayın:

''

if (isDebugMode.toBoolean ()) {

eklenti uygula: 'com.android.library'

} Başka {

eklenti uygula: 'com.android.application'

}

Uygulama kimliğini ayarlayın:

eğer (! isDebugMode.toBoolean ()) {

applicationId "com.dovar.router"

}

AndroidManifest'i vb. Yapılandırmak için sourceSets'i kullanın.

sourceSets {

ana {

if (isDebugMode.toBoolean ()) {

manifest.srcFile'src / debug / AndroidManifest.xml '

} Başka {

manifest.srcFile'src / release / AndroidManifest.xml '

}

}

}

''

Daha iyi bir uygulama şu şekilde olmalıdır: Örnekteki uygulama gibi çalıştırılabilir bir kabuk projesi ayarlayın Daha sonra kabuk projesinde bileşen bağımlılıklarını yapılandırın.

6. Bileşenleştirmeden sonra Git dağıtımı

Genel olarak, projemiz yalnızca bir Git deposuna karşılık gelir, bu nedenle tüm geliştirme üyeleri projedeki tüm kodlarda değişiklikleri düzenleyebilir ve gönderebilir.Ancak, proje yöneticileri olarak üyelerden, üyelerden kaçınmak için yalnızca sorumlu oldukları iş kodlarını göndermelerini istiyoruz. Geliştirme sürecinde, diğer üyelerin kodu yanlışlıkla değiştirildi ve hatalara neden oldu. Bileşenleştirmeden sonra, üye geliştirme sorumluluklarına göre kod değiştirme izinlerini sıfırlayabiliriz.

Varsayım: Temel çerçeve katmanı geliştirme süreci boyunca değişmeden kalır. A, modül_a'dan, B modül_b'den ve C, modül_c'den ve paketlemeden sorumludur. Hem A, hem de C ortak_hizmeti değiştirebilir. Bu yüzden module_a / module_b / module_c / common_service'i alt depolara ayırıyoruz, module_a depo yalnızca A için izinleri değiştirmek için açıktır, module_b depo yalnızca B için izinleri değiştirmek için açıktır ve module_c deposu yalnızca C izinlerini değiştirmek için açıktır, bu nedenle aşağıdaki şekil vardır. İzin dağıtımı:

Aralarından seçim yapabileceğiniz üç Git dağıtım yöntemi vardır:

Bileşen dönüşümü kademeli olarak nasıl gerçekleştirilir?

Komple bileşenleme ayrımı bir veya iki günde tamamlanamaz, ancak projelerimiz her zaman geliştirilmeyi bekleyen yeni gereksinimlere sahip olacaktır. Sürüm yineleme çalışması, bileşenleştirme için proje gereksinimlerini askıya almamız neredeyse imkansızdır.

Ardından, sürüm yinelemesi ve bileşenli bölme aynı anda gerçekleştirilmelidir.İşte önerilerim:

1. Hazırlanmaya başlayın:

* APP kabuk projesi eklendi, bu projedeki uygulama projesine başvurmanız önerilir.

* Projenizin mevcut uygulama projesini kamu hizmeti katmanı olarak kullanın (doğrudan aşağıda common_service olarak anılacaktır) Elbette, bileşen henüz bölünmediği için, aynı zamanda şu anda en büyük iş bileşenidir.

* Yeni bir bileşen ekleyin (daha sonra module_search ile temsil edilir) En bilindik veya nispeten basit olan bir iş modülüyle başlamanız önerilir.Örneğin, kendi şirket projemin arama modülünün yalnızca arama işlevleri ve diğer modüllerle çok az etkileşimi var, bu yüzden Seçim onunla başlar.

2. Bir bağımlılık zinciri oluşturun:

Kabuk projesi common_service'e bağlıdır.

Kabuk projesi module_search'e bağlıdır.

module_search, common_service'e bağlıdır. (uygulama bağımlılığı)

3. DRouter'ı tanıtın:

Yukarıdaki DRouter talimatlarına bakın.

4. Kamu hizmeti katmanını ve altyapı katmanını ayırın (gerekli değildir):

Projeniz daha önce iş katmanını ve altyapı katmanını ayırmadıysa, şimdi altyapıyı common_service'den çıkarmanız önerilir.

5. Bileşenleri kademeli olarak bölün:

İlk bileşeni ayırın:

* Daha önce module_search ekledik, bu yüzden şimdi arama modülünün kodunu common_service'den çıkarmamız ve arama bileşenine koymamız gerekiyor. Şu anda, arama bileşeni hala doğrudan kamu hizmeti katmanının koduna başvurabilir, ancak kamu hizmeti katmanı yalnızca geçebilir Yönlendirme, arama işlevini kullanır.

* Ana hat için yeni gereksinimler geliştirirken, yeni eklenen kaynak dosyalarının ilgili bileşen projesine yerleştirilmesi tavsiye edilir.Önceki kaynak dosyaları geçici olarak kamu hizmeti katmanında tutulabilir, her bileşen projesinin sonraki taleplerini mümkün olduğunca az bekleyerek Bekleme listesi, kamu hizmeti katmanındadır.

* İzinler, dört ana Android bileşeni ve benzersiz üçüncü taraf kitaplık referansları, vb. Karşılık gelen bileşen Modülünde belirtilmeli ve temel çerçeve katmanı bir yana, kamu hizmeti katmanına girmemelidir.

İkinci bileşeni ayırın, üçüncü ...

(İlk bileşen başarıyla bölündükten ve piyasaya sürüldükten sonra, geri bildirim iyiyse, diğer bileşenleri ayırmaya devam edebilirsiniz)

Bileşen bölünmesinin ayrıntı düzeyi, iş modülü bölümünüze ve ekip üyelerinizin geliştirme sorumluluklarının bölünmesine bağlıdır.Çok fazla bileşeni bölmemeniz önerilir.

Yukarıdaki öğrenme talimatları için kendi yüksek çözünürlüklü düşünme yönü haritamız var ve mimarların kendi mimari video paylaşımları var (gelişmiş kullanıcı arayüzü, performans optimizasyonu, mimar kursları, NDK, hibrit geliştirme: ReactNative + Weex ve diğer Android teknik bilgileri dahil) Yapılandırma video verileri ve çeşitli e-kitap okuma), video veri toplama yöntemi: izleyin + ileri + özel mesaj yanıtlama "Android verileri" ücretsiz!

IROS 2016 | Robot, Samsung'un gözünde hangi zorluklarla karşılaşıyor?
önceki
Hellboy, hem çizgi roman okuyucular hem de film hayranları bu süper kahramandan çok etkilenecek
Sonraki
Model oyun kontrolü: eski GSB 1:60 AGX-04-A1 kırmızı wildebeest
3D görüntü uygulamaları olgunlaştı, OPPO yeni ürünleri TOF 3D lens ile donatılacak
Kapak yıldızı değişiklikleri Menting "NBA 2K18" yeni bir kapak başlatacak
190417 Benzersiz Cazibe + Hayranlar için Sınırsız Sevgi Bu nedenle, BTS bugün elde edilebilir!
Analog oynatma kontrolü: 1:60 sahne, Genaku'da MK2
"Özel" SBI agresif bir şekilde saldırıya uğradı ve Japon dijital para piyasasının modeli aniden değişti
IROS 2016 | Toyota: Bu bedenin ejderhayı öldürme yeteneği var ama bu her zaman beklenmedik
Model oyun kontrolü: püskürtme gibi el boyası Zhagu
Amazon, Microsoft, Google, devler küresel bulut pazarıyla "savaşıyor"
"Liddy ve Sur'un Stüdyosu" bir önceki role katılacak
Amerikan draması "The Goldman Family" çete kavgalarından bahsediyor ve alışılmadık bir şekilde insanların kalp atışlarını hızlandırıyor
Activity zıpladığında ve uzun yıllar bekar olan yaşlı bir adamla karşılaştığında
To Top