2016-07-13 19 views
10

Kullanıcı arabirimindeki tıklamaları işlemekle sorumlu olan MVP düzeninde?
E.g. MVP kullanmaMVP'de, Görüntüle veya Sunum Yapan kişinin sorumluluğu var mı?

counterButton.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     totalClicks++; 
     counterTextView.setText("Total clicks so far: "+totalClicks); 
    } 
    }); 

onClickPresenter sorumluluğundadır: olmayan MVP yaklaşım gibi bir şey olurdu? Ya da View bunu halledebilir mi?
Birisi bunu açıklayabilir mi lütfen?

cevap

17

OnClick bir Presenter yöntemini çağırmalıdır. Sunucunuzda işinizi yapmalısınız ve kullanıcı arayüzünü güncellemeniz gerekiyorsa, View'unuzda bir yöntem tanımlamanız ve sunucudan çağırmanız gerekir.

Sen View eski için bir yöntem gerekir:

public void showCounterCount(final int totalClicks){ 
    counterTextView.setText("Total clicks so far: "+totalClicks); 
} 

Ayrıca size Presenter bir yöntem ve bir değişken gerekir:

int totalClicks = 0; 

public void onCounterButtonClicked(){ 
    totalClicks++; 
    mView.showCounterCount(totalClicks); 
} 

Ve böyle kodunuzu refactor:

counterButton.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     mPresenter.onCounterButtonClicked(); 
    } 
    }); 
mimari daha karmaşık ve temiz için

Eğer kullanım örneğini yapabilirsiniz Anlaşmalı işletmelerde. Bir interaktör tanımlayabilir ve orada sayaç değeri artırmak için

(sayaç değerini artırma için örnekte uygulama için bir kullanım-durumdur).

CounterInteractor:

public CounterInteractor{ 
    public int incrementCounter(int currentCounter){ 
     return currentCounter+1; 
    } 
} 

Ve planı ayrı senin sunum aşağıda gibi: Bu yaklaşımla

int totalClicks = 0; 
CounterInteractor mCounterInteractor = new CounterInteractor(); 

public void onCounterButtonClicked(){ 
    totalClicks = mCounterInteractor.incrementCounter(totalClicks); 
    mView.showCounterCount(totalClicks); 
} 

Eğer sunucuların tamamen iş mantığı ayırmak ve kod çoğaltma olmadan kullanım-case kavramlarını kullanan yeniden sunum. Bu daha temiz bir yaklaşımdır.

Ayrıca farklı MVP Yaklaşımlar için bu git repo kontrol edebilirsiniz. https://github.com/googlesamples/android-architecture/tree/todo-mvp-clean/

iyi şanslar.

Düzenleme:

İşte benim hafif wikipedia istemci proje kaynağıdır: Ben MVP uygulamaya çalışıyorum https://github.com/savepopulation/wikilight

. (MVP + Dagger2 + RxJava)

+1

, dürüst olmak gerekirse o MVP yaklaşım ise, gerçekten orijinal pasajı daha bir iyileştirme olarak görmüyorum. Biz sadece 1 soyutlama/yönlendirme ekledik ama fayda nerede? – Jim

+1

biz uygulamayı üç katmana ve ui'den ayrı iş mantığına bölüyoruz. faaliyetler ve fragmanlar yalnızca kullanıcı arayüzünün güncellenmesinden sorumludur ve sadece sunum yapan kişinin aradığı arayüz yöntemlerini içerir. Örneğiniz çok basittir, bu yüzden faydaları görmek zor ama büyük uygulamalarda daha net görebilirsiniz. Ayrıca UI testi için de yararlıdır. Bu bağlantıyı kontrol edebilirsiniz. http://antonioleiva.com/mvp-android/ – savepopulation

+4

Önemli bir fayda sınamaktır.Yukarıdaki örnekte, Android çerçevesine herhangi bir bağımlılık olmadan Presenter'da 'onCounterButtonClicked()' yöntemi için bir birim testi yazabilirsiniz. Bu tür testler JVM'de çalışabilir. Ben bir kenara ben gibi daha az sıkıca Görünüm katmanı – Jahnold

İlgili konular