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
- zayıf yönleri Sadece bir Class ekleyerek ve bir denetimden devralan yapma nelerdir.
- Yeni bir "Özel Denetim" eklenmesi ve devralınması.
- 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.
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
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
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