Model-View-Presenter (MVP) programı Android için faydalı mıdır?


34

Kullanıcı eylemleri (MVP'nin Presenter kısmı) üzerindeki tepkiler GUI öğelerini gösteren (MVP'nin bir kısmını görüntüle) aynı etkinliklere ayarlanırken, Android'de Görünüm ve Presenter'ın nasıl ayrılacağı.

"Model görünümü sunumcusunda Martin Fowler veya Michael Feathers [2] 'nin söylediği gibi, kullanıcı arayüzünün mantığı sunumcunun adı verilen bir sınıfa ayrılmıştır; bu, kullanıcının tüm girişlerini idare eder ve" aptal "görüşü ne ve ne zaman söyleyeceğini söyler. gösterimi "( buradan alıntı yapıldı ).

Şimdiye kadar, Android'in temel özelliklerinden birinin , eylemleri gerçekleştiren, bunlara tepki veren ve sonuçları gösteren akıllı Etkinlik olduğunu düşündüm . MVP şeması Android felsefesiyle çelişiyor mu? Android'de gerçekleştirmeyi denemek mantıklı mı? Eğer evet ise, nasıl yapılabilir?


2
+1 Güzel soru çünkü henüz android uygulama kaynaklarında mvp / mvvm görmedim. Mvp android örneklerini ve ne kadar kod / lib yükü ürettiklerini görmek ilginç olurdu. Tartışılmaması edildi Bu sorun Stackoverflow-yollar prodüksiyonu tavsiye-app-taşınabilir-arası-android-ve-diğer-platformlar
k3b

Belki Stackoverflow'a koyabilirim, yoksa kurallara aykırı olabilir mi?
Gangnus

Yöneticilerden, bu soruyu Soru kopyalarını çoğaltmak için kullanmalarını isteyebilirsiniz. İşte programmerssorulara daha tartışmalı bir soru var: "ne düşünüyorsun ... / ne iyi ya da kötü ..." varken stackoverflow"android mvp örnekleri var" gibi olur. Benim için her iki yerde iyi.
k3b

Dokunulmazlığım için çok üzgünüm ama şu ana kadar yöneticilere bağlanmanın bir yolunu bulamadım :-(
Gangnus

Bu soru Yığın Taşması için uygun DEĞİLDİR . BTW - "bayrak" bağlantısını kullanarak gönderinizi işaretleyerek moderatörlerle iletişim kurabilirsiniz.
ChrisF

Yanıtlar:


15

Android uygulamaları temelde Model-View-Controller (MVC) üzerine kuruludur - MVP daha önce de duymamıştım ama aynı şey gibi geliyor. (Eğer rağmen Faaliyetleri Kontrolör rolü doldurmak XML Görüntüleme adından anlaşılacağı gibi sadece edebilirsiniz - bu XML bunu yapmak için daha kolay ve basittir Etkinliğinizde programlı bunları inşa) ve Model kendini yazın. Yani evet, bu model oldukça pratik.

Bu tasarım modeli hakkında fazla bir şey duymamış olmanızın olası bir nedeni, Android çerçevesinin sizi ayrılmaya zorlamasıdır. Mobil cihazlardaki uygulama küçük olma eğiliminde olduğundan, insanlar tam MVC kullanma eğiliminde değildir; eylem katmanının modelin (küçük) işinin çoğunu yaptığı katmanlar görüntüleme ve eylem katmanlarına yönelirler.

Çapraz platform uygulaması yazıyorsanız, dört katmanlı bir yaklaşıma bakmak isteyebilirsiniz: Görüntüleme, Eylem, İş Mantığı ve Model. Business Logic ve Model değişmezken, View ve Action katmanları platforma özgü olacaktır. Temel olarak, sunum yapan kişi ile kullanıcı etkileşimini, kullanıcının istediği eylemi gerçekleştirmek için İş Mantığı katmanını çağıran Eylem katmanına bölersiniz.


1! Lütfen, iyi metinlere bir iki referans verebilir misiniz?
Gangnus,

4
MVP'nin Action(= Sunum) katman platformunu da bağımsız tutma fırsatı sunduğunu düşündüm - en azından farklı platformlarınız benzer UI yetenekleri sunduğunda.
Doktor Brown,

@DocBrown Teoride, evet. Uygulamada bunun mümkün olacağından emin değilim, çünkü kullanıcı etkileşimleri hem görünüme hem de sunum yapan kişiye isabet edebilir. Örneğin, Android'de silme işlemleri etkinlik tarafından gerçekleştirilir, ancak web sayfalarında görünüm (tarayıcı) tarafından ele alınır.
Michael K,

12
“Android uygulamalar temelde Model-View-Controller” üzerine kuruludur ”- bu sadece birçok seviyede yanlış, üzgünüm. Android çerçeve mimarisi, View / Controller mantığının darmadağın olduğu God Classes etrafında inşa edilmiştir.
Igor Filippov

2
@ IgorFilippov'un yorumunu bir kereden fazla oylayabilmeyi isterdim. Android uygulamalarının MVC'yi tasarımla uyguladığı fikri yaygın bir yanılgıdır. İOS'un aksine hiçbir GUI mimarisi, endişelerin net bir şekilde ayrılması ve izole edilmiş, kolayca test edilebilir bir Model oluşturulmasına izin veren Android tarafından uygulanmaz. Kendinizi sağlamalısınız, MVP, MVC veya başka bir şey.
Piovezan

6

Android programlaması hakkında hiçbir tecrübem yok, ancak bazı tanıtıcı Android programlama derslerine kısa bir bakış attığımda, MVP'nin diğer etkinlik odaklı bir çerçevede olduğu kadar az kullanışlı olması için bir neden göremiyorum. ActivitySınıf çok farklı değil Dialogya Formsizin uygulamanın herhangi Etkinlik alt sınıf için bir "activitity Sunucu" sınıfı oluşturmak ve orada çekirdek mantığı koymak kolay olmalı, böylece diğer çerçeveler içinde.

"Etkinlik" inize gönderilen etkinlikler, sunucunuza verilmelidir ve sunucunuz etkinlikleri kendi kendine gönderecekse veya sisteme bağlı diğer özellikleri arayacaksa, Faaliyetiniz sunum yapan kişi ile paylaştığı arayüz aracılığıyla ilgili işlevleri sağlamalıdır. Fakat bu temelde bildiğim diğer GUI çerçevelerindekiyle aynı.


+1 zaman ayırdığınız için teşekkür ederim. Fakat başka bir cevaptan gördüğünüz gibi, Android'de benzer, ancak farklı model kullanılmıştır. “50 yıl boyunca nesirle konuştum ve bunu bilmiyordum!” Şimdi modellerin farklılıklarına bakmaya çalışacağım.
Gangnus

4
@Gangnus: MVP özel bir MVC şeklidir, burada codebetter.com/jeremymiller/2007/07/26/… daha fazla bilgi bulabilirsiniz. Ve bunun "MVC veya MVP" meselesi olmadığından eminim. Faaliyetler bir "denetleyici" şekli olabilir, ancak platforma bağımlılar. UI mantığını her etkinlik için platformdan bağımsız bir sunucu sınıfına ayırmak muhtemelen onları daha kolay test edilebilir ve daha taşınabilir hale getirecektir.
Doktor Brown,

5

MVP, Android için kesinlikle faydalıdır. Kodunuzu organize etmek ve birim sınamasına yardımcı olur. Ve en iyi bölüm, kodunuzu okuyan yeni kişilerin kodu anlayabilmesi ve nereye gitmesi gerektiğini bildikleri anda katkıda bulunmaya başlamasıdır. MVP'yi örneklerle anlamak için çok yararlı bir bağlantı .

MVP'nin üç bileşeninin tamamı için kısa bir açıklama:

Görünüm

Android MVP'de, görünüm iki şey içerir Aktivite - android kaynak Görünümü - java arayüzü Etkinlik Görünümü uygular ve sunum yapan kişinin, görünüm arayüzünü kullanarak etkinlikle konuşabilmesi için sunum yapan kişiye kendisini (Görüntüleme arayüzü) enjekte eder. Diyagramın ilk üç bloğu Görünüm ve Sunucu arasındaki iletişimi gösterir.

sunucu

Presenter, Görünüm ve Veri / Model arasında orta katman görevi görür. Görünüm (Etkinlik), sunum yapan kişiye bir şey sunması için komut verir ve sunum yapan kişi veri tabanından / Modelinden veri alır ve sunum yapılabilen veri formunu Görünüm'e geri verir. Ardından Görüntüle, bu verileri ekranda göstermeye özen gösterir. Ve Presenter'ın sade bir java sınıfı olduğunu ve android bileşenlerin hiçbirini içermemesi gerektiğini unutmayın, aksi takdirde sunum biriminin test edilmesini zorlaştıracaktır.

Sunucuda veritabanı kullanmak istiyorsanız, o zaman etkinliğin bir veritabanı örneği oluşturmasını ve sunucuya enjekte etmesini sağlayın. Bu, ünite testi sırasında veritabanını alaymanıza yardımcı olacak ve iş mantığını test etmenizi sağlayacaktır.

model

MVP'deki model veri kaynağınızdan başka bir şey değildir. Görünüm, verilerle doğrudan konuşmaz; Presenter'a, bunun için verileri işlemesini ve herhangi bir değişiklik yapmadan görüntülenebilecek bilgileri geri vermesini emreder.


1
Bilgi yararlıdır, teşekkür ederim, fakat kötü bir şekilde verildi. Sadece bir siteyi değil, kendi sitenizi bile belirtmemeli, burada bilgi vermelisiniz. Referans cevaplarına izin verilmez. Bunun yerine yorumları kullanın. Yalnızca sitenizdeki yararlı bilgiler nedeniyle işaretlemiyorum. Lütfen bir yorumu yapın veya cevabınıza, sorunun yapısına cevap veren bazı kilit bilgileri yazın. O zaman kesinlikle sadece benim artımı değil, cevap kontrolünü bile alacaksın.
Gangnus

@Gangnus Cevapta gerekli bilgiyi verdim, çünkü tüm içeriği koymak cevabı çok büyük yapacak.
Ajit Singh

1
Aslında iki tür MVP var. Pasif Görünüm (burada neyi açıklarsınız) ve görünümün modele doğrudan veri paylaşımına olanak sağlayan Supervising Presenter (MVVM ve birçok web MVC çerçevesi gibi).
RubberDuck
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.