2009-02-27 21 views
1

Kullanmadan önce her UI denetimini devralması için kişisel bir kural yapıyorum. Önceki bir yaşamda bunu her zaman yapabildiğiniz daha az yararlı şeylerden biri olarak görüyordum çünkü gerekçelendirme her zaman “Tüm düğmelerdeki yazı tipini bir kerede değiştirmek istiyorum” gibi görünüyordu. ... bir kere ... hiç. Bununla birlikte, iki yeni proje uygulamaya dair fikrimi değiştirmiştir. İlk olarak, tutarlı bir "ValueChanged" etkinliğine ihtiyacımız vardı, böylece bir Textbox'ın "TextChanged" olayı veya bir ListBox'un "SelectedIndexChanged" vb. Arasında seçim yapmak için büyük bir anahtar ifadesi olmadan formlarımızda kolayca "kirli" bir bayrak uygulayabildik. sadece tüm kontrollerde dinlemek için tutarlı bir şey istedim ve yerleşik kontrollerin alt sınıflarını kolayca satın aldık.Denetim bağımlılıklarını yalıtmanın "doğru" yolu nedir?

İkinci projede, UI'nin oldukça basit olması bekleniyordu, çünkü baz kontrolleri almak için her türlü çaba harcanıyordu, ama birkaç ay içinde, artık sadece onları kesmeyecekleri belli oldu ve Telerik kontrol paketini satın aldık. Tüm kontrollerin başlaması için miras almış olsaydık, daha sonra türetilmiş kontrollerimizi Telerik kontrollerinden devralmak için değiştirmemiz, küresel olarak bizim için değişiklikleri uygulardı. Bunun yerine, tüm form tasarımcılarında bazı arama ve değiştirme yapmak zorunda kaldık.

Yani benim sorum: göreli güçlü ve

  1. zayıf yönleri Sadece bir Class ekleyerek ve bir denetimden devralan yapma nelerdir.
  2. Yeni bir "Özel Denetim" eklenmesi ve devralınması.
  3. Yeni bir "Bileşen" ekleme ve devralma.

Her üç sonuçta da aynı etkiye sahip olacaksınız, formlarınızı koymak için yeni bir Düğme türü elde edersiniz. Farklı insanların kullandığı üçünü gördüm ve herkes onların yolunun en iyisi olduğunu düşünüyor. Bu tartışmayı StackOverflow'a koymam gerektiğini düşündüm ve belki de bir konsensüsü, hangisinin “doğru” yol olduğuna dair bir topluluk olarak indirebiliriz.

Not: Zaten benim kişisel fikrim olan "doğru" var, ama dünyanın ne düşündüğünü görmek istiyorum.

cevap

1

Her ikisi de 1 & 2 miras alıyorsa, bunlar işlevsel olarak özdeştir, değil mi? Bunlardan biri kontrolünü kapsülleyen olmalıdır? Bu durumda ekleyeceğiniz çok sayıda pass-thru üyeniz var. Tavsiye etmem.

Peronal olarak, çok iyi bir neden olmadan ekstra bir miras eklemeyecektim ... örneğin, "değiştirilen olay" belki de bazı aşırı yüklenmelerle işlenmiş olabilir. C# 3.0 ile bu uzantı sayesinde daha da temizlenir

public static AddChangeHandler(
     this TextBox textbox, EventHandler handler) { 
    testbox.TextChanged += handler; 
} 
public static AddChangeHandler(
     this SomethingElse control, EventHandler handler) { 
    control.Whatever += handler; 
} 

ve sadece (uygun uzatma yöntemini çözmek için myControl statik türüne dayanarak) myControl.AddChangeHandler(handler); kullanın: - yöntemleri gibi şeyler olabilir yani. O sahiptir (UI temel bir şekilde modelini güncellemesine izin ve kendi nesne modeli mantığı var - Tabii

, bir adım geri almak ve kendi modeli değil UI olaylara dinleyebilirim kontroller ile ilgisi yok.

+0

Bizim örneğimizde, pasif bir görüntü MVP modeli kullanıyorduk, bu nedenle model düzeyinde dinleme bizim için işe yaramazdı. Yukarıdaki örnekler, sorunun kendisini kurmak için gerekli olan esasları vurmak için basitleştirilmiştir. 1 ve 2 işlevsel olarak özdeştir, ancak tasarımcı dosyası nedeniyle yapısal olarak farklıdır. – Mel

+0

Olayları kablolamak için uzatma yöntemi çözümünü beğeniyorum ve muhtemelen bunu gelecekte kullanacağım. Yine de ikinci sorun hala duruyor. Sonuç olarak, çoğu proje yerleşik kontrollerin artık yeterli olmadığı ve üçüncü taraf kontrollerine geçmek isteyeceğiniz bir noktaya çarptı. – Mel

+0

Görünüşe göre cevabın oylanmasının görünmez olmasına sebep oldu. Tekrar nötrleştirmeye çalışacağım ve herhangi bir ilginin olup olmadığını göreceğim. Cevabınızı daha sonra tekrar cevaplayacağım ... endişelenme. – Mel

0

Bileşimi kullanıyorum. Sadece yeni bir UserControl yaratıyorum ve ihtiyacım olan kontrolleri ekliyorum.Bu iyi çalışır, çünkü:

  • Bu pek çok özelliği bir daha kullanmam, bu nedenle geçiş yöntemleri en düşük düzeyde tutulur.
  • Saf bir yaklaşımla başlayabilir ve daha sonra hassaslaştırabilirim.
  • Görünüm ve his özellikleri, site genelinde tutarlı bir şekilde ayarlanmalıdır. Şimdi onları bir kez ve herkes için ayarlayabilirim.
İlgili konular