it-swarm.dev

MVVM, Birlik, Prizma, MEF, Caliburn - Ne kullanmalıyım?

Lütfen yardım edin - kayboluyorum!

Bazı kontroller ve bazı ekranlar içeren küçük bir masaüstü uygulaması yazıyorum. Bu daha sonra bazı ekranlara sahip, küçük bir web sitesi ile entegre edilmelidir. Buradaki fikir, kullanıcının videoları düzenlemesini ve görüntüleri seçmesini ve ardından sonuçlarını arkadaşlarıyla paylaşmasını sağlamaktır.

Masaüstü uygulaması C # WPF, web sitesi - ASP.Net MVC kullanıyor.

MVVM kullanarak uygulamanın birkaç ekrandan geçmesinin daha kolay olacağını okudum. Böylece Caliburn.Micro ve MVVM.Light'ı aramaya başladım. Bazı dersleri indirdim ancak malzemeye derinlemesine dalmaya hazırlanırken burada S.O'da buldum. Ayrıca Prizma, MEF, Birlik, ReactiveUI var - Bu çok fazla oluyor!

Yeni şeyler öğrenme konusunda berbatım - WPF ve ASP.Net MVC'yi incelemek yaşlarımı alıyor. Sadece daha sonra alakalı olmadığını anlamak için birçok yeni materyal çalışmak istemiyorum. Ve bana talimat verecek bir mimarım yok.

Öyleyse sorum şu: Bu çerçeveleri ve teknolojileri perspektife koyabilir ve hangisini çalışmaya ve kullanmaya odaklanmam gerektiğini önerebilir misiniz (özellikle Windows 8 ile daha sonra ne kullanılabilir?)?

27
Avi

Bir MVVM uygulaması (muhtemelen çeşitli avantajlar için yaptığınız) oluşturmak istiyorsanız, o zaman bir MVVM çerçevesi istiyorsunuz .

Caliburn.Micro 'yı tavsiye ederim, çünkü Caliburn.Micro dokümantasyon sayfasındaki örnekleri takip ederek uygulamak kolaydır. Ayrıca, yapılandırma mekanizması konusunda çok zorlayıcı bir kuralı var ve görünüm modellerine görünümden fiilleri (yöntemleri) çağırmak için bir Eylemler sistemi kullanıyor. Bu gördüğüm diğer tüm mekanizmalardan daha güçlü.

Prizma, uygulamaya yardımcı olmak için MVVM tasarım unsurlarını içeren ve özellikle bileşik uygulamalar (bir barındırma Kabuğundaki dekuplajlı bileşenlerden oluşan uygulamalar) oluşturmak için özel olarak tasarlanan unsurları içeren oldukça ağır bir çerçevedir.

MEF, uygulamadaki eklentileri veya uzantıları keşfetmeye ihtiyaç duyan bu uygulama türleri için kullanışlıdır (uygulama önyüklendikten sonra bile) ve Caliburn.Micro gibi bir MVVM çerçevesi ile birlikte kullanılabilir. MEF ayrıca, kontrolün tersine çevrilmesi için de kullanılabilir, ancak diğer kontrol konteynırlarının tersine çevrilen bazı temel özellikleri sağlamaz, bu nedenle yalnızca eklenti işlevselliğini uygulamak için kullanmaya karar verebilirsiniz.

Birlik bir IoC kabıdır ve genel uygulama altyapınıza bağımlılık enjeksiyonunu uygulamak için kullanılır. .NET alanında, bazıları gelişmiş performans, ek özellikler veya daha kolay bir API sunan pek çok IoC kabı vardır.

Kullanılmadığım için ReactiveUI'yi bilmiyorum.

WinRT'ye taşınmak için kod yeniden kullanımını en üst düzeye çıkarmaktan bahsediyorsanız, MVVM mükemmel bir seçimdir .

40
devdigital

PRISM zaten MEF ve MVVM mantığını içeriyor :)

Tamam burada biraz açıklama: 

MVVM, uygulamanızdaki mantıkanlamına gelir. Aslında Görünüm, Görünüm-Model ve Modelin ayrılma biçiminin zekice bir yolu. Bunu yapmak için en iyi (?) Çerçeveyi bilmiyorum - bunu kontrol edebilirsiniz Catel İsterseniz veya MVVM Light , ancak MVVM mantığını anlayan ve uygulamayı kolaylaştıran birinden sadece bir ton kod yazmanız yeterli. Sadece kendi MVVM çerçevenizi yazmayı deneyebilir ve 'orada gizli bileşen yok '- sadece aynı tekrar eden kod ve aynı sınıflar, vs. ... Aslında siz gerek yokMVVM'yi uygulamak için herhangi bir MVVM çerçevesine gerek yok.

MVVM'yi öğrendikten ve yazdıktan sonra, hemen soru ile karşılaşırsınız - Nasıl NUnit'i ayrıştırma yöntemiyle test ederim (bu, örneğin Silverlight'ta önemsiz bir sorun değildir) - işte burada, tüm IOC/Enject çerçevesi devreye giriyor. Örneğin MEF. Enjeksiyon çerçevesiyle ilgili büyük bir resmi anlamak için aşağıdaki örneği düşünün:

'En az sınırlayıcı' olarak yazılmış 'Paylaşılan' projesi (örneğin Taşınabilir Kitaplık)

    public interface IAmSharedInterface
    {
        string SayHello();
    }

Proje 'Ana', yalnızca referans 'Paylaşılan' projesi

    public class IAmMainClass
    {
        [ImportingConstructor]
        public IAmMainClass(IAmSharedInterface SharedInterface)
        {
             SharedInterface.SayHello();
         }
    }

'Uygulayıcı' projesi, yalnızca referans 'Paylaşılan' projesi

   [Export(IAmSharedInterface)]
   public class IAmImplementor: IAmSharedInterface
   {
       public string SayHello()
       {
          return "Hello from implementator class to whoever using it";
       }
    }

Görüyorsunuz - 'Ana' ve 'Uygulayıcı' projeler arasında doğrudan bir referans yok - tüm 'sihir' MEF/Birlik inşa/çözme sürecinde oluyor. Böylece, 'Implementor' projesi ve 'Main' ile 'Implementor' kullanmadan NUnit testini Main'de kolayca yapabilirsiniz. Diğer projelerin, 'IAmSharedInterface'i özel olarak test amaçlı uygulayabileceği ve ihraç edebileceği bir senaryo da vardır.

Yani PRISM'e geri dönelim - hepsi bu (!). Hemen anlamanın kolay değilçerçeve olduğunu biliyorum ve basit 'Merhaba Dünya' programları için uygun değiluygun değil ama bir kez öğrendikten sonra - geri dönüş yok. Sadece tüm parçaları birbirine yapıştırıyor ve İstediğiniz herhangi bir moq çerçevesini kullanırken size büyük ölçüde özgürlük verin (örneğin, Rhino ).

Microsoft’ta gelişen prizma bu yüzden (umarım) yalnızca Windows 8’de değil, Windows 9’da ve gelecekteki tüm sürümlerde desteklenecektir.

İstediğin her şey içeride: MVVM, Enjekte, ayırma/eklentiler, okunması ve test edilmesi kolay

15
Jasper

Yukarıdaki ayrıntılı bilgilere ekleyerek, sizin için hayatı kolaylaştırmaya çalışacağım.

1) Şimdilik, IOC/Bağımlılık Enjeksiyonu/Eklenti mimarisini unutun. Basit bir uygulama oluşturduğunu söylüyorsun, şimdilik şimdilik bunu unut. Kodunuzu düzenli tutun ve gerekirse daha sonra uygulayabilirsiniz (bu iyi bir şey).

2) Listelenen çerçeveler dışında Caliburn.Micro'yu öneririm. Nispeten yalındır ve hafiftir. Ayağa kalkıp koşmanız uzun sürmez.

3) Modelinizi, hem windows uygulamanız hem de MVC web siteniz için kullanabileceğiniz ayrı bir Montajda oluşturun.

Basit tutun ve tüm teknolojilerle uğraşmayın.

11
pfeds

Bu cevap, Rockford Lhotka'nın Blog makalesi " adlı kısaltılmış parçalarını üretir. MVVM şablonunu kullanmak için bir çerçeve gerekir "başka bir cevapta .

Bu soruya bir tür meta-cevaptır (belirli bir öneri içermesine rağmen), ancak MVVM'deki bir çerçevenin rolünü ilk başta açıklamak çok yararlı görünüyordu.

Toplu olarak “M” desenleri olarak adlandırdığım üç popüler sunum katmanı tasarım deseni vardır: MVC, MVP ve MVVM. Bunun nedeni hepsinin “Model” için duran bir “M” ye ve bazı diğer yapılara sahip olmasıdır.

Tüm bu “M” kalıplarının olduğu şey, tipik geliştiriciler için kalıpların bir çerçevesiz faydasız olmasıdır. Kalıpları çerçevesiz kullanmak hemen hemen her zaman karışıklık, komplikasyon, yüksek maliyet, hayal kırıklığı ve nihayetinde umutsuzluğa yol açar.

Bunlar sonuçta sadece kalıplardır, uygulama değil. Ve onlar, başarının sağlanması için birlikte doğru çalışması gereken birkaç kavramı içeren büyük, karmaşık kalıplardır.

...

MVVM gibi bir şeyi çerçevesiz olarak yapmaya çalışmak çok büyük bir çalışmadır . Çift kod tonu, tekerleği yeniden icat ediyor ve insanları farklı düşünmeleri için yeniden eğitiyor.

En azından bir çerçeveyle, yinelenen koddan kaçınırsınız ve umarım tekerleği yeniden icat etmeniz gerekmez; bu da insanları yeniden eğitmeye odaklanmanıza izin verir. Yeniden eğitme kısmı genellikle kaçınılmazdır, ancak bir çerçeve işlemi kolaylaştıran sıhhi tesisat kodu ve yapısı sağlar.

MVC modelinin neden ASP.NET’te birkaç yıl önce popüler hale geldiğini kendinize sorabilirsiniz ...

Garip bir şekilde, MVC yalnızca ASP.NET MVC ortaya çıktığında Microsoft dünyasında yaygınlaşmaya başladı. Bu, Visual Studio'ya entegre takımlarla kapsamlı bir çerçevedir. Sonuç olarak. tipik geliştiriciler yalnızca modeller, görünümler ve denetleyiciler oluşturabilir. Bu noktadan önce, MVC çerçevesinin yaptığı her şeyi inşa etmek zorunda kaldılar - ki bu çok fazla kod. Ve sadece çok fazla kod değil, fakat işletme değeri ile kesinlikle hiçbir ilgisi olmayan ve yalnızca kalıbın kendisinin uygulanması ile ilgili olan kod.

...

Tipik geliştiriciler gerçekten model oluşturma, görünüm ve görünüm modellerine odaklanmak istiyor. Zayıf referans temelli olay yönlendiricileri, navigasyon modelleri, soyutlamaları görüntülemek ve bir çerçevenin yapması gereken diğer tüm şeyleri oluşturmak istemiyorlar.

...

Bu arada, Caliburn Micro orada en iyi MVVM çerçevesi gibi görünüyor - kesinlikle en çok kullanılanlar [2012'den itibaren] ...

(Metin, koruma nedeniyle satır içi kopyalandı.)

0
DaveInCaz