2010-08-09 13 views
5

Üzerinde bir WinForm ve bazı özellikler var.
Örneğin: Ad, Adres Form üzerinde kabul edilir.Refactoring Form.ShowDialog() kodu MVP'ye göre

mevcut uygulama

frmName frmView = new frmName(); //frmName is WINFORM 
frmView.Name= "ABC"; //any valid string or read this from file 
frmView.Address="SomeAddress"; //any valid address or read this from file 

if (frmView.ShowDialog() == DialogResult.OK) 
{ 
    //OK CLICK PROCESS and 
    // get new values edited by user 
    string name = frmView .Name; 
    string address = frmView.Address; 
    doProcessing(name,address); 
} 
else{ 
    //Ignore cancel click.. 
} 

biraz benzer
(Örnekte daha birçok özellikleri) nasıl MVP göre Winform uygulama için bu dönüştürme yoktur.
Ayrıca işleme (Bilmiyorum tam olarak nerede bunu yapmak için) Sunucu/Model
için ShowDialog() yapılan gözden geçirmeniz gerekebilir?
Ayrıca, formun kendisinde kod yazmaktan kaçınmanız gerekir (Pasif görünüm)

Teşekkürler. Hala farklı MVP ile deniyorum

cevap

5

kendim yaklaşır ama şu anda bunu yapıyorum yolu böylece gibidir: Sen kendi üzerindeki herhangi bir kod yazılmasını önlemek için istediğini söylüyorsun

frmName frmView = new frmName(); 

if (frmView.ShowDialog() == DialogResult.OK) { 
    presenter.RequestProcessing(frmView.Name, frmView.Address); 
} else { 
    //Ignore cancel click.. 
} 

ama Bu benim için mantıklı değil. Passive View'da, tüm uygulamaya özgü istekleri denetleyiciye veya sunum yapan kişiye iletirsiniz.

Bu örnekte görünüm, görünümle ilgili mantığı yönetir. İletişim kutusunu açmak, başka herhangi bir şeyin (sunucu gibi) bilgilendirilmesi gereken bir kullanıcı eylemi değildir. Bir içerik menüsü açmak gibi, bir diyalog kutusu bu belirli görüntünün kullanıcıya uygulamaya özel istekleri sunmayı nasıl seçtiğinin bir parçasıdır. Kullanıcı aslında onunla devam edene ve isteği gönderene kadar, sunucunun hiçbir şey bilmesine gerek yoktur.

İletişim kutusundaki hataların üstesinden gelebilmem için bazı durumlarda, iletişim kutusunun yapıcısına IPresenter nesnesini geçirdim. Daha sonra, örneğin "Tamam" düğmesine tıklandığında uygun sunucu isteğini kendisi yapabilir ve bir hata durumunda kapanmak yerine bir mesaj kutusu gösterebilir.

MVP'de birçok varyasyon var, ama umarım bu yardımcı olur. Kurmak için iyi şanslar. Yanıt için

+0

. Ayrıca, hataların işlenmesini açıklayabilir misiniz? (3. paragraf .. "Bazı durumlarda ....") – Amitd

+0

@Amitd: Cevabımdaki kod örneğinde, kullanıcı isteği sunucuya yönlendirilir iletişim kutusunun * kapatılması *. Ya bu istek bir hatayla sonuçlanırsa? Örneğin, aynı ad ve adres zaten işlenmiş ve bir yere kaydedilmiş. Hatayı iletişim kutusundan görüntülemek ve yeniden denemek için * yeni * iletişim kutusunu açmak yerine kullanıcının adlarını veya adreslerini değiştirmesine izin vermek daha iyi görünebilir. Sunucuyu iletişim kutusuna ileterek, isteği kendisinin yapmasını sağlayarak ve yalnızca bir hatayla sonuçlanmadığında * kapatabilirsiniz. – Rich

+0

@Rich: Oh tamam. Bu yüzden, sunum yapan kişiyi, görünüm içinde yeni sunum yapmak yerine, görüntünün bir özelliği olarak tutmam gerekecek mi? – Amitd