Android geliştiricilerinin zorlu yolculuğunu geri sayın: o yıllarda hepimizin yaptığı hatalar

Bu makale dizisinin amacı, bir Android uygulama mimarisi oluştururken karşılaşabileceğimiz sorunları ana hatlarıyla belirtmektir. Android uygulama mimarisini uygulama süreci ne kadar zor olursa olsun, bunların her harika uygulamanın temeli olması gerektiğini anladım.

Her teknolojinin kendine ait Doğal evrim . Daha doğrusu, topluluğu evrimsel bir süreç geçirmiştir. Yeni bir bilgisayar dilini veya çerçevesini ilk benimseyenler meraklılardır, sadece teknolojide uzmanlaşmayı ve bazı işleri mümkün olan en kısa sürede tamamlamayı umuyorlar. Genellikle, yeni topluluk küçüktür ve geliştiriciler arasında bilgi aktarımı potansiyeli sınırlıdır, yani herkes kendi hatalarından öğrenir çünkü mimari yönergeler mevcut değildir.

Önsöz

İlk Android'lerin sıkıntılı noktaları: Google bunu önemsiyor mu?

Farklı teknolojiler konusunda çok deneyime sahip birçok kıdemli kişi olduğunu ancak hiç kimsenin standartları önerecek vakti olmadığını söyleyebilirsiniz. Eh, ille de değil. Teknolojinin arkasında para kazanmak isteyen güçlü bir şirket varsa, onların müjdecileri size bu yeni dilin ne kadar havalı olduğunu, pek çok şeyi yapabileceğini, öğrenmesi kolay, ölçeklenebilir ve milyonlarca kullanıcıyı tatmin edebileceğini söyleyecektir.

Microsoft bu tür şeyleri yapmak için genellikle teknolojisini kullanır. Öte yandan, Google Android'i satın aldığında, gerçekten onu önemsiz bir proje olarak ele aldıklarını düşündüm. Android dünyasına Android'in doğumundan bu yana girdiyseniz, Google'ın hayal kırıklığınızı umursamadığını unutmamalısınız. Ekstra deneyime, yeteneklere ve topluluğa yardım etmeye istekli olan bu birkaç kişi artık Android süper yıldızları veya büyük tanrılardır. Jake Wharton .

"Google Android'i satın aldığında, gerçekten ona başka bir yan proje gibi davrandıklarını düşünüyorum."

(Android) Çerçevesi bunu sizin için yaptığı için çok fazla mimari ve kod organizasyonu hakkında düşünmek zorunda olmadığınızı söyleyebilirsiniz. Android sizi, Arayüzü Aktivite'ye, yeniden kullanılabilir arayüze, Servis'teki arka plan hizmetine koymaya ve diğer bileşenlerle iletişim kurmak için Yayın Alıcısını kullanmaya zorlar. Bu hayatınızı daha iyi hale getirebilir, değil mi? Hayır.

Her şeyden önce, gerçekten iyi olan ve teknolojiyle (platform) ilgisi olmayan bazı iyi uygulamalar ve ilkeler var. Örneğin, tek sorumluluk ilkesi, bağımlılığı tersine çevirme ilkesi, arayüz odaklı programlama, küresel durumu öldürme, tüm durumları ortadan kaldırmaya çalışma vb.

Çerçeve nadiren sizi ilkelere uymaya zorlar. Aksine, bu en iyi uygulamaları ve ilkeleri mümkün olan en kötü şekilde ihlal ederler. Bağlamı, her yerde kullandığınız Tanrı nesnesini, çeşitli tekil yöneticileri, yaşam döngülerine sahip parçaları (bu ne tür bir kabus) ve genellikle doğru şekilde uygulanmayan AsyncTask'ı düşünün. uygulamanın kanı.

Rehberlikten yoksun yeni bir geliştirici, bir uygulama yerine kolayca bir canavar yaratabilir. Bunu bir spagetti canavarı gibi düşünün - bu iyi bir canavar, ancak iyi bir uygulama değil.

Çevirmenin Notu: Spagetti benzeri canavar bir kod karmaşası anlamına gelir

Son olarak, teknoloji ve Çerçeve, uygulamanın amacını gizler. Tamam, bu bir Android uygulaması, ancak bu ne tür bir Android uygulaması? Spiker? müzik çalar? Dil öğrenme programı? Hava durumu uygulaması? Belki bir program. Her şey Framework tarafından sağlanan sınıflar halinde paketlenmişse, (bu uygulamanın ne olduğunu) söyleyemezsiniz.

Bob Amca olarak da bilinen Robert Martin'in dediği gibi, "Mimariniz uygulamanın ne yaptığını haykırmalı." Daha teknik olarak, iş mantığı açıkça ayrılmalıdır ve Çerçeve'den bağımsız olmalıdır.

Android mimarisinin dört altın yasası

Umarım, özellikle Android kodu yazarken, kodunuzu temiz ve düzenli tutmak için Framework'e güvenmemeniz gerektiğini açıkça belirtmişimdir. Bunu uzun zaman önce fark ettik, ancak harika çözümler üretecek deneyime sahip değildik. Mimari başarısızlığın ortaya çıkması çok zaman alır ve tüm mimari projenin ortasında değiştirilemez. Eski projeleri yeni, havalı, (olmak isteyen) en iyi mimarilere dönüştürmek için zamana sahip olmak imkansızdır. Bu nedenle, mimarimizi bir projeden diğerine yavaş yavaş inşa ederek, hatalarımızdan ders alarak aşamalı bir yaklaşım benimsiyoruz. Yaklaşımımızı test etmek için kriterler olan mimarimizin birkaç hedefi karşılaması gerektiğine inanıyoruz. İyi bir mimari şunları yapmalıdır:

  • Birçok paydaşın ihtiyaçlarını karşılayın
  • Endişelerin ayrılmasını destekleyin
  • Gerçek dünyadan kaçış (Android, DB, İnternet ...)
  • Bileşenlerinizi test edilebilir hale getirin
  • 1. Birçok paydaşla tanışın

    Paydaşlar (bu makalede), uygulama geliştirmenizle ilgilenen kişilerdir. Geliştirmeye ek olarak, görsel tasarımcılar, etkileşim tasarımcıları, proje yöneticileri, veritabanı yöneticileri, testler ve daha fazlası var.

    Elbette kodunuzu belirli bir şekilde düzenleyemezsiniz.Örneğin, bir etkileşim tasarımcısı bir proje açabilir ve her şeyi anında anlayabilir ve hatta bazı değişiklikler yapabilir. Bu bir tek boynuzlu at.

    Seni kastediyorum Yapabilmek Kodunuzu, etkileşim tasarımcısıyla arabirim oluşturan programcının yalnızca etkileşimle ilgili kodla ilgilenmesi gerekecek şekilde düzenleyin. Bu nedenle, tüm etkileşimler, etkileşimden sorumlu olan sınıflara / modüllere / bileşenlere / her neyse (bileşenlere) ayrılır.Uygulamanın etkileşimli kısmıyla uğraşırken, yalnızca bu bileşenlerin kullanılması gerekir.

    Çevirmenin Notu: Paydaşları şimdilik anlayamıyorsanız sorun değil, bu dizinin üçüncü bölümünü okuduktan sonra anlayacaksınız

    2. Endişelerin ayrılmasını destekleyin

    Az önce söylediğim, endişelerin ayrılmasına bir örnek. Bu özel yöntemi destekliyoruz çünkü ekip organizasyonunu ve proje aşamasının koordinasyonunu ifade edebiliyor.Genel olarak, mimariniz de endişelerin ayrılmasını desteklemelidir. Kaygıların ayrılması veya tek sorumluluk ilkesi, her bileşenin değişim için yalnızca bir nedeni olması gerektiği anlamına gelir.

    3. Gerçek dünyadan kaçış (Android, DB, İnternet ...)

    Gerçek dünyadan kaçış kuralından daha önce bahsedilmişti. Bir keresinde uygulamanın gerçekte ne yaptığını haykırmak istediğimizi söylemiştik, işte bu. İş mantığını vurgulamak ve Çerçevenin ayrıntılarını gizlemek istiyoruz. Bu kural daha katı olmalıdır: Yalnızca Çerçevenin ayrıntılarını değil, aynı zamanda dış dünyayla ilgili tüm ayrıntıları da gizleyin.

    Sensörler, bildirim mekanizmaları, ekran detayları, veritabanı erişimi, internet erişimi vb. Gibi tüm kirli Android şeyleri.

    4. Bileşenlerinizi test edilebilir hale getirin

    Uygulamanızı mümkün olduğunca birim test etmelisiniz ve mimariniz bunu yapmanıza izin vermelidir. Her şeyi test edemezseniz, en azından iş mantığınızı kapsamalısınız. Gerçek dünyadan ayrılarak bu kolaylıkla yapılabilir. İş mantığınız uygulamanın geri kalanından açıkça izole edilmişse, test etmesi kolaydır.

    İlk yineleme-Tanrı Etkinliği

    public final class UsersActivity, ListActivity { @Override korumalı void onCreate (Bundle registeredInstanceState) { super.onCreate (SavedInstanceState); // ... new ListUsers (). execute (); } özel son sınıf ListUsers AsyncTask'ı genişletir < Void, Void, Void > { @Override korumalı Void doInBackground (Void ... boşluklar) { // final SQLiteOpenHelper sqLiteOpenHelper = ... // JsonObjectRequest jsObjRequest = new JsonObjectRequest // (Request.Method.GET, url, null, new Response.Listener < JSONObject > () { // MySingleton.getInstance (this) .addToRequestQueue (jsObjRequest); // showData (kullanıcı); boş döndür; } } }

    Böyle bir kodu "Antik Çağ" da görmüş olabilirsiniz. Değilse, çok gençsin. Ama bu kod parçasının nesi yanlış? Cevap, her yerde sorunlar olduğudur.

    Veritabanını işlemek, ağa erişmek, verileri ayrıştırmak, iş parçacıkları değiştirmek ve verileri işlemek için bir Aktivitemiz var. Tüm paydaşlar bu kategoriye bakıyor, hiçbir kaygı ayrı değil, test edilemez, iş mantığı ve Android şeyler birbirine karışıyor.

    Çevirmenin Notu: Yukarıdaki resmin sol tarafındaki kırmızı etikete dikkat edin. Her etiket altın bir kurala karşılık gelir ve kırmızı, memnuniyetsizliği gösterir. SRP, tek sorumluluk ilkesine, yani endişelerin ayrılmasına atıfta bulunur.

    İkinci yineleme-MVP

    İlk yöntem açıkça işe yaramıyor. Denediğimiz ilk şey MVP veya model-görünüm-sunumcuydu. Herkes MVP'ye aşinadır. En popüler mimari desenlerden biridir. Şöyle görünüyor:

    Burada, aslında Android Fragmanı olan Görünümü ayırdık, işimizi temsil eden (etki alanı) modelimiz var ve son olarak her şeyi koordine eden Sunucumuz var. Bu kesinlikle daha iyi. Bazı endişelerin ayrılmasıyla, paydaşların kafası artık o kadar karışık değil ve ayrıca bazı birim testleri de yazabilirsiniz. Bununla birlikte, Presenter veri tabanını ve her şeyi doğrudan manipüle ettiği için, biz hala gerçek dünya ile karışmış durumdayız. Sunucu, Tanrı'nın bir nesnesi haline geldi. Modeli işler, görünüme veri gönderir, iş mantığına sahiptir (iş mantığı bu dişlilerdir :)), veri tabanına ve ağa erişir, sensör verilerini alır vb. Yani daha iyi, ama daha iyi olabilir.

    Çevirmenin Notu: Sarı etiket daha iyi anlamına gelir

    Üçüncü yineleme-MVP + yöneticileri

    Hükümet ne yapacağını bilmediğinde ne yapacak? Bir ajans kurar. Geliştiriciler ne yapacaklarını bilmediğinde ne yapacaklar? Bazı Yöneticileri tanıttılar. Buna mutlaka "* Yönetici" demeniz gerekmez. Bu sınıfların birçok adı vardır: uitl'ler, yardımcılar, fooBarBuzz-ator vb. Biz de müdürü tanıttık.

    Dürüst olmak gerekirse, bu biraz bile işe yarıyor. İş mantığı, Yöneticide bulunur. Paydaşlar nereye bakacaklarını bilirler. Endişeler bir dereceye kadar ayrılır, ancak daha iyi yapılabilir. Daha fazla test yazabilirsiniz, ancak yine de doğrudan Android'e dokunursunuz, bu nedenle Android test durumları yazmalı ve veritabanını önceden doldurmalısınız. İş mantığını test edin, tek kelime: rahatsız.

    Evet, Yöneticinin bir dev olma eğilimi vardır ve bakımı hızla zorlaşır. Daha karmaşık hale gelmeyeceğini ve daha basit bir mimari ile daha hızlı kod sağlayabileceğinizi iddia edebilirsiniz, ancak yine de bu şekilde birçok hata olacak ve sürdürülebilirlik yok edilecektir.

    Çevirmenin Notu: Yönetici Bu ve Yönetici arasındaki etikete dikkat edin.

    sonuç olarak

    Bu makalede, pratik olarak kullanılabilir bir Android mimarisi oluşturmanın zorluğunu yaşadık. İyi bir Android mimarisi birçok paydaşın ihtiyaçlarını karşılamalı, endişelerin ayrılmasını desteklemeli, iş mantığını vurgulamalı, Çerçevenin ayrıntılarını gizlemeli ve tüm bileşenlerinizi test edilebilir hale getirmelidir. Dizinin ikinci bölümünde, bizim için yararlı olan fonksiyonları nasıl yönettiğimizi size göstereceğiz. Bundan önce, uygun bir Android iş akışının nasıl oluşturulacağına dair herhangi bir öneriniz var mı? Ya da herhangi bir sorunla karşılaştın mı?

    Son olarak şunu söylemek istiyorum: Programcılar için öğrenilmesi gereken çok fazla bilgi içeriği ve teknoloji var. Çevre tarafından ortadan kaldırılmak istemiyorsanız, kendinizi sürekli geliştirmelisiniz. Bize uyum sağlamak için çevreye değil, her zaman çevreye uyum sağlıyoruz!

    İşte yukarıdaki teknik sistem şemasıyla ilgili düzinelerce set Tencent, Toutiao, Ali, Meituan ve diğer şirketlerden 19 yıl içinde mülakat soruları , Teknik noktaları video ve PDF olarak düzenledi (aslında beklenenden çok daha fazla enerji harcadı), Bilgi bağlamı + birçok ayrıntı , Sınırlı alan nedeniyle, işte resim şeklinde bir parçası.

    Size birçok kazanç getireceğine inanıyorum:

    [Android gelişmiş öğrenme videosu], [Android mülakat hilelerinin tam seti PDF], [Android geliştirme temel bilgi notları] özel mesajla [Android] ücretsiz olarak elde edilebilir!

    Programcı olmak kolaydır. İyi bir programcı olmak sürekli öğrenmeyi gerektirir. Genç programcıdan kıdemli programcıya, küçük mimardan kıdemli mimara veya yönetime, teknik müdürden teknik direktörlüğe kadar her aşamada Farklı yeteneklere hakim olmanız gerekiyor. İşinizde ve yetenek gelişiminizde akranlarınızdan kurtulmak için kariyer yönünüzü erkenden belirleyin.

    Android Orta Düzey ve İleri Düzey Mülakat Soruları Sürekli Destek: Android Bağlayıcı Mekanizmasını Gösterme
    önceki
    Android Bilgi Notları: 2 "yanlış anlaşılan" Android bilgi puanını kaydedin
    Sonraki
    Görüşme sırasında hangi konulara dikkat edilmelidir? İşte programcı iş görüşmelerinin 66 detayı
    Android röportajları için temel bilgi noktaları: Android'de Handler hakkında sekiz önemli sorunun bir özeti
    Yıl ortasında Ali'ye tekrar katılmak için iyi bir zaman, Ali'ye katılmak istersem ne yapmalıyım?
    Android programcıları: İyi bir iş bulmak ve salgın krizi kırmak için mülakata nasıl hazırlanılır?
    "Bir günde röportaj için nasıl hazırlandım ve Tencent teklifini nasıl aldım?"
    Muhabir: Temel java nasıl? Çok iş parçacıklı okuma mutlaka çok iş parçacıklı güvenlik sorunlarına neden olur mu?
    Yılbaşı tarım ürünleri siparişleri 200 milyonu aştı, Pinduoduo markalı tarım ürünlerini şehirlere ve kırsal alanlara tanıtıyor
    Didi, 62 tren istasyonunda çevrimiçi araç çağırma için özel toplama noktaları ve kanallar oluşturuyor
    Marka yükseltme ve geliştirme Wanrun Group, 2020'de yeni bir sayfa açıyor
    Yeni Land Rover Discovery Sport neden Discovery ailesinin spor şampiyonu oldu?
    Ağır! Chengdu: İlkokul 13 Nisan'da başlıyor! Lise giriş sınavı orta derecede gecikti
    Uzman ve malzeme gönderen Çin, bunun gibi Asyalı kardeşleri destekliyor
    To Top