SORU
25 Ocak 2011, Salı


Model-Görünüm-Sunum içinde Win

İlk defa MVP yöntemi, Win kullanarak uygulamak için çalışıyorum.

Her katmanın işlevi anlamaya çalışıyorum.

Benim program üzerine tıkladığınız zaman openfiledialog penceresi açar GUI düğmesi var.

Yani MVP kullanarak, GUI düğmesini tıklatın olay işleme ve sunum çağırır.() openfile;

Sunum içinde.openfile(), sonra da temsilci açılması söz konusu dosyanın modeli katman, ya da veri yoktur veya mantık işlemi, gereken sadece hareket isteği ve açık openfiledialog penceresi?

Güncelleme:Bu konuda daha fazla yardıma ihtiyacım var hissediyorum gibi bir ödül vermeye karar verdim, ve ben bağlam olması tercihen özel benim puan altında tasarlanmış.

Tamam, MVP üzerinde okuma sonra, Pasif Görünüm uygulamaya karar verdim. Etkili bir Sunum ve görevleri Modeli temsilci tarafından idare edilecek bir Winform kontrolleri(s) bir grup var. Benim belirli bir puan aşağıda

  1. Bu winform yüklendiğinde, bir ağaç görünümü elde etmek için vardır. Görünümü bu nedenle bir yöntem gibi aramak gerektiğini düşünüyorum, haksız mıyım: sunum.gettree(), bu gibi dönecek temsilci modeli, hangi verileri elde etmek için ağaç görünümü oluşturmak ve yapılandırmak, geri sunum, dönecek geçmek için Görünüm olacak sonra sadece atama için, diyelim ki, bir panel?

  2. Bu aynı zamanda bir datagridview gibi Winform üzerinde herhangi bir veri denetimi için aynı olurdu?

  3. Benim App, aynı Kurul ile modeli sınıfları bir dizi var. Ayrıca, başlangıçta yüklenmesi gereken eklentiler ile bir eklenti mimarisi. Görünüm sadece sırayla eklentileri yükler ve bilgiyi görüntüleyen bir yöntem diyebilir hangi sunum yöntemi, diyebilir? Tier sonra eklenti referansları kontrol eder. Görünüm onlara referans ya da sunum yapacağını?

  4. Görünüm sunum hakkında her şey, kılavuzunu boyutu için ağaç görünümü düğüm rengi, işlemesi gereken düşünce doğru, vb mıyım?

En korktuğum şey olduğunu düşünüyorum ve eğer akışı için bu nasıl anladıysam Tamam olacak sanırım.

CEVAP
27 Ocak 2011, PERŞEMBE


Bu MVP ve belirli konularda naçizane.

İlkbir kullanıcı ile etkileşim bir şey, ya da sadece gösterilecek, birgörünüm. Böyle bir bakış kanunlar, davranış ve özellikleri ile tanımlanırarayüzü. Bu arabirim olabilir kullanılarak uygulanan bir Win UI, bir konsol UI, web UI, hatta hiçbir UI (genellikle ne zaman test sunum) - somut uygulama sadece önemli değil sürece itaat yasaları kendi görüş arayüzü.

İkinciher zaman kontrollü bir görünümsunum. Böyle bir sunum yasa, davranış ve özellikleri de bir tarafından açıklanmıştırarayüzü. Bu arabirim beton görünümü arayüzü yasalarına itaat eder gibi uygulama olarak uzun ilgisi yoktur.

Üçüncübir sunum görünümü kontrolleri beri, bağımlılıkları en aza indirmek için onun gerçekten sunum görünümü hakkında hiçbir şey bilmek zorunda kazancı yok. Sunum ve görünüm arasında kararlaştırılmış bir sözleşme var ve bu görünüm arabirim tarafından belirtilen.

EtkileriÜçüncü

  • Sunum görünümü araması için herhangi bir yöntem yok, ama manzara sunum abone olan olaylar vardır.
  • Sunum görünümü bilir. Beton sunucu üzerinde yapıcı enjeksiyon ile bunu yapmak için tercih ediyorum.
  • Görünüm sunum kontrol hiçbir fikri yok; sadece asla herhangi bir sunum sağlanmış olacak.

Senin sorun için, yukarıda biraz basitleştirilmiş bu kod gibi görünebilir:

interface IConfigurationView
{
    event EventHandler SelectConfigurationFile;

    void SetConfigurationFile(string fullPath);
    void Show();
}

class ConfigurationView : IConfigurationView
{
    Form form;
    Button selectConfigurationFileButton;
    Label fullPathLabel;

    public event EventHandler SelectConfigurationFile;

    public ConfigurationView()
    {
        // UI initialization.

        this.selectConfigurationFileButton.Click  = delegate
        {
            var Handler = this.SelectConfigurationFile;

            if (Handler != null)
            {
                Handler(this, EventArgs.Empty);
            }
        };
    }

    public void SetConfigurationFile(string fullPath)
    {
        this.fullPathLabel.Text = fullPath;
    }

    public void Show()
    {
        this.form.ShowDialog();        
    }
}

interface IConfigurationPresenter
{
    void ShowView();
}

class ConfigurationPresenter : IConfigurationPresenter
{
    Configuration configuration = new Configuration();
    IConfigurationView view;

    public ConfigurationPresenter(IConfigurationView view)
    {
        this.view = view;            
        this.view.SelectConfigurationFile  = delegate
        {
            // The ISelectFilePresenter and ISelectFileView behaviors
            // are implicit here, but in a WinForms case, a call to
            // OpenFileDialog wouldn't be too far fetched...
            var selectFilePresenter = Gimme.The<ISelectFilePresenter>();
            selectFilePresenter.ShowView();
            this.configuration.FullPath = selectFilePresenter.FullPath;
            this.view.SetConfigurationFile(this.configuration.FullPath);
        };
    }

    public void ShowView()
    {
        this.view.SetConfigurationFile(this.configuration.FullPath);
        this.view.Show();
    }
}

Yukarıdakilere ek olarak, ben genellikle bir baz görüşlerim genelde yarar Show() ve sahibi herhangi bir görünüm veya Görünüm adı zula yeri IView arayüzü var.

Sorularınız için:

1.Bu winform yüklendiğinde, bir ağaç görünümü elde etmek için vardır. Görünümü bu nedenle bir yöntem gibi aramak gerektiğini düşünüyorum, haksız mıyım: sunum.gettree(), bu gibi dönecek temsilci modeli, hangi verileri elde etmek için ağaç görünümü oluşturmak ve yapılandırmak, geri sunum, dönecek geçmek için Görünüm olacak sonra sadece atama için, diyelim ki, bir panel?

IConfigurationView.Show() doğru çağırmadan önce IConfigurationPresenter.ShowView(), IConfigurationView.SetTreeData(...) derim

2.Bu aynı zamanda bir datagridview gibi Winform üzerinde herhangi bir veri denetimi için aynı olurdu?

Evet, bunun için IConfigurationView.SetTableData(...) derim. Format için görünümü veri verdi. Sunum sadece tablo Verisi istediği manzara sözleşme uyar.

3.Benim App, aynı Kurul ile modeli sınıfları bir dizi var. Ayrıca, başlangıçta yüklenmesi gereken eklentiler ile bir eklenti mimarisi. Görünüm sadece sırayla eklentileri yükler ve bilgiyi görüntüleyen bir yöntem diyebilir hangi sunum yöntemi, diyebilir? Tier sonra eklenti referansları kontrol eder. Görünüm onlara referans ya da sunum yapacağını?

Eğer eklentileri görünümü ile ilgili, görüşlerini onların bilmesi gereken, ama sunum değil. Eğer veri ve model bütün bunlar, görünümün onlarla bir ilgisi olmamalı.

4.Görünüm sunum hakkında her şey, kılavuzunu boyutu için ağaç görünümü düğüm rengi, işlemesi gereken düşünce doğru, vb mıyım?

Evet. Veri ve veri alır ve bir CSS biçimlerini uygular görüşünü açıklayan bir sunum sağlayan XML olarak düşün. Somut olarak, sunucu IRoadMapView.SetRoadCondition(RoadCondition.Slippery) arayabilir ve ardından görünüm kırmızı renkli yol oluşturur.

Ne tıkladım düğümlerin veri?

5.Eğer zaman ı tıklatın treenodes, ben geçişine belirli bir düğüm için sunum ve bu sunum olurdu nasıl veri ihtiyacı ve sonra sorar modeli için veri sunmadan önce, geri görünüm?

Mümkünse tüm verileri tek seferde görünümünde ağaç sunmak için gerekli geçebilirim. Ama eğer bazı veriler çok büyük olduğu için geçti başından itibaren ya da eğer dinamik doğası ve ihtiyaçları "son anlık" modeli () sunum), sonra ben bir şey eklemek gibi event LoadNodeDetailsEventHandler LoadNodeDetails görünüm arayüzü, böylece sunum yapabilir abone olmak için, fetch ayrıntıları düğüm LoadNodeDetailsEventArgs.Node (muhtemelen üzerinden KİMLİK falan) modeli, böylece görüntüleyebilir güncelleştirme gösterilen düğüm ayrıntılar için olay işleyicisi temsilci verir. Bu zaman uyumsuz desenler verileri alma iyi bir kullanıcı deneyimi için çok yavaş olabilir eğer gerekli olabileceğini unutmayın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Eric Magidson

    Eric Magidso

    4 Ocak 2009
  • Jonathan Morrison

    Jonathan Mor

    24 Mart 2010
  • Peyton

    Peyton

    28 Aralık 2008