it-swarm.com.de

MVVM, Unity, Prism, MEF, Caliburn - Was soll ich verwenden?

Bitte helfen Sie - ich verliere mich!

Ich schreibe eine kleine Desktop-Anwendung, die einige Steuerelemente und einen Bildschirm hat. Dies sollte später in eine kleine Website integriert werden, die auch einige Bildschirme enthält. Die Idee ist, die Benutzerin Videos bearbeiten und Bilder auswählen zu lassen und dann ihre Ergebnisse mit ihren Freunden zu teilen.

Die Desktop-App verwendet C # WPF, die Website - ASP.Net MVC.

Ich habe gelesen, dass es mit MVVM einfacher wäre, die Anwendung über einige Bildschirme hinaus zu vergrößern. Also fing ich an zu suchen und entdeckte Caliburn.Micro und MVVM.Light. Ich habe einige Tutorials heruntergeladen, aber als ich mich gerade darauf vorbereitete, in das Material einzutauchen, fand ich hier auf S.O . dass es auch Prisma, MEF, Einheit, ReactiveUI gibt - das wird zu viel!

Ich kann es nicht leiden, neue Dinge zu lernen. Ich brauche Ewigkeiten, um WPF und ASP.Net MVC zu lernen. Ich möchte nicht viel neues Material studieren, nur um später herauszufinden, dass es nicht relevant ist. Und ich habe keinen Architekten, der mich unterrichtet.

Meine Frage lautet also: Könnten Sie diese Frameworks und Technologien in die richtige Perspektive rücken und vorschlagen, worauf ich mich beim Lernen und Verwenden konzentrieren sollte (insbesondere, was später mit Windows 8 verwendet werden kann)?

27
Avi

Wenn Sie eine MVVM-Anwendung erstellen möchten (was Sie wahrscheinlich für verschiedene Vorteile tun), dann Sie möchten ein MVVM-Framework .

Ich würde Caliburn.Micro empfehlen, da es einfach ist, die Beispiele auf der Caliburn.Micro-Dokumentationsseite zu implementieren. Es hat auch eine sehr überzeugende Konvention über den Konfigurationsmechanismus und verwendet ein Actions - System zum Aufrufen von Verben (Methoden) in Ihren Ansichtsmodellen aus der Ansicht. Dies ist stärker als jeder andere Mechanismus, den ich je gesehen habe.

Prism ist ein recht umfangreiches Framework, das Elemente des MVVM-Designs enthält, um die Implementierung zu unterstützen und insbesondere auf das Erstellen zusammengesetzter Anwendungen (Anwendungen, die aus entkoppelten Komponenten in einer Host-Shell aufgebaut sind) zugeschnitten sind.

MEF ist nützlich für diese Arten von Anwendungen, die Plugins oder Erweiterungen der Anwendung ermitteln müssen (auch nachdem die Anwendung Bootstrapping durchgeführt hat) und kann zusammen mit einem MVVM-Framework wie Caliburn.Micro verwendet werden. MEF kann auch zum Implementieren der Invertierung von Steuerelementen verwendet werden, bietet jedoch nicht einige der Kernfunktionen, die bei anderen Invertierungen von Kontrollcontainern zu finden sind. Daher können Sie diese Option nur zum Implementieren von Plug-In-Funktionen verwenden.

Unity ist ein IoC-Container und würde verwendet werden, um die Abhängigkeitsinjektion für Ihre allgemeine Anwendungsinfrastruktur zu implementieren. Im .NET-Bereich gibt es jedoch viele IoC-Container, von denen einige entweder verbesserte Leistung, zusätzliche Funktionen oder eine benutzerfreundlichere API bieten.

Ich weiß nichts über ReactiveUI, da ich es nicht benutzt habe.

Wenn Sie über die Maximierung der Wiederverwendung von Code für einen Wechsel zu WinRT sprechen, ist MVVM eine gute Wahl .

40
devdigital

PRISM enthält bereits MEF- und MVVM-Logik :)

Ok, kleine Erklärung hier: 

MVVM steht in Ihrer Anwendung für logic. Tatsächlich clevere Art, View, View-Model und Model zu entkoppeln. Ich kenne kein bestes (?) Framework, um es zu tun - Sie könnten Catel überprüfen, ob Sie wollen oder MVVM Light , aber es ist einfach eine Unmenge Code von jemandem, der die MVVM-Logik versteht und einfach macht einfach umzusetzen Sie könnten tatsächlich versuchen, Ihr eigenes MVVM-Framework zu schreiben und zu sehen, dass "es keine geheimen Bestandteile gibt" - nur den gleichen sich wiederholenden Code und dieselben Klassen usw. ... Eigentlich benötigen Sie brauchen nicht irgendein MVVM-Framework, um es zu implementieren MVVM.

Sobald Sie MVVM lernen und schreiben, stoßen Sie sofort auf die Frage: Wie teste ich NUnit auf entkoppelte Weise (dies ist in Silverlight beispielsweise kein triviales Problem) - hier kommen alle IOC/Inject-Frameworks zum Tragen. Zum Beispiel MEF. Betrachten Sie das folgende Beispiel, um ein umfassendes Bild des Inject-Frameworks zu erhalten:

Projekt 'Shared', geschrieben in 'leastimimiter' (zum Beispiel Portable Library)

    public interface IAmSharedInterface
    {
        string SayHello();
    }

Projekt 'Main', nur Referenz 'Shared' Projekt

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

Projekt 'Implementor', nur Referenz 'Shared' Projekt

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

Sie sehen - es gibt keinen direkten Bezug zwischen 'Main'- und' Implementator'-Projekten - alles 'Magie' geschieht im MEF/Unity-Build/Resolution-Prozess. So können Sie den NUnit-Test problemlos auf Main ausführen, ohne das 'Implementor'-Projekt und' Implementor 'mit' Main 'zu verwenden. Es gibt auch ein Szenario, in dem ein anderes Projekt 'IAmSharedInterface' speziell für Testzwecke implementieren und exportieren kann.

Also zurück zu PRISM - es hat alles (!). Ich weiß, dass es nicht einfach Framework sofort zu verstehen ist und nicht für einfache 'Hello World'-Programme geeignet ist, aber sobald Sie es gelernt haben, gibt es keinen Weg zurück. Sie kleben einfach alle Teile zusammen und geben Ihnen große Freiheit bei der Verwendung des von Ihnen gewünschten moq-Rahmens (zum Beispiel Rhino ).

Prism in Microsoft entwickelt (so hoffe ich) wird es nicht nur in Windows 8 sondern in Windows 9 und in allen zukünftigen Versionen unterstützt.

Was auch immer Sie gefragt haben, es ist alles drin: MVVM, Inject, Entkopplung/Plug-Ins, einfach zu lesen und zu testen

15
Jasper

Um das Hinzufügen der detaillierten Informationen zu speichern, versuche ich, Ihnen das Leben leichter zu machen.

1) Vergessen Sie vorerst die Architektur von IOC/Dependency Injection/Plugin. Sie sagen, dass Sie eine einfache App erstellen, also vergessen Sie dies erst einmal. Halten Sie Ihren Code aufgeräumt und Sie können diesen Code bei Bedarf später implementieren (es ist gutes Zeug).

2) Aus den von Ihnen aufgeführten Frameworks würde ich Caliburn.Micro vorschlagen. Es ist relativ einfach und leicht. Sie brauchen nicht lange, um aufzustehen und zu laufen.

3) Erstellen Sie Ihr Modell in einer separaten Assembly, die Sie sowohl für Ihre Windows-App als auch für Ihre MVC-Website verwenden können.

Halten Sie es einfach und lassen Sie sich nicht mit all den Technologien aufhalten.

11
pfeds

Diese Antwort reproduziert einige gekürzte Teile von Rockford Lhotkas Blogartikel " Die Verwendung des MVVM-Musters erfordert ein Framework " , das in einer anderen Antwort zitiert wurde .

Es ist eine Art Meta-Antwort auf diese Frage (obwohl sie eine bestimmte Empfehlung enthält), aber es schien sehr nützlich zu sein, die Rolle eines Frameworks in MVVM zu erklären.

Es gibt drei ziemlich Beliebte Präsentationsschicht-Entwurfsmuster, die ich zusammenfassend "M" -Muster nenne: MVC, MVP und MVVM. Dies liegt daran, dass alle ein „M“ für „Model“ sowie einige andere Konstrukte haben.

Die Sache mit all diesen "M" -Mustern ist, dass für typische Entwickler die Muster sind ohne Framework nutzlos. Die Verwendung der Muster ohne Rahmen führt fast immer zu Verwirrung, Komplikationen, hohen Kosten, Frustration und letztendlich Verzweiflung.

Dies sind nur Muster, keine Implementierungen. Und es handelt sich um Große, komplexe Muster, die einige Konzepte enthalten, die Richtig zusammenarbeiten müssen, um Erfolg zu haben.

...

Etwas wie MVVM ohne Framework zu machen, ist eine große Menge An Arbeit. Tonnenweise doppelter Code, Neuerfindung des Rades und Umschulung von Menschen, um anders zu denken.

Zumindest mit einem Framework vermeiden Sie den doppelten Code und müssen hoffentlich Das Rad nicht neu erfinden - Sie können sich also auf die Umschulung von Personen konzentrieren. Der Umschulungsteil ist im Allgemeinen unvermeidbar, aber ein Rahmen Enthält Code und Struktur der Installation, die den Prozess erleichtern.

Sie fragen sich vielleicht, warum das MVC-Muster erst vor wenigen Jahren in ASP.NET populär wurde ...

Seltsamerweise wurde MVC erst in der Microsoft-Welt Zum Mainstream, als ASP.NET MVC auftauchte. Dies ist ein umfassendes Framework Mit in Visual Studio integrierten Werkzeugen. Als Ergebnis. typische Entwickler können nur Modelle, Ansichten und Controller erstellen. Vor Diesem Punkt mussten sie auch alles erstellen, was das MVC-Framework tut - . Das ist viel Code. Und nicht nur viel Code, sondern Code, der hat Absolut nichts mit dem geschäftlichen Wert zu tun, und bezieht sich nur auf die Implementierung des Musters selbst.

...

Typische Entwickler möchten sich wirklich auf das Erstellen von Modellen, Ansichten, Und Ansichtsmodellen konzentrieren. Sie möchten keine schwachen referenzbasierten Ereignisrouter, Navigationsmodelle, Ansichtsabstraktionen und alle anderen Dinge erstellen, die ein Framework ausführen muss.

...

In der Zwischenzeit scheint Caliburn Micro das beste MVVM-Framework Zu sein - sicherlich das am weitesten verbreitete [Stand 2012] ...

(Text wurde aus Gründen der Aufbewahrung inline kopiert.)

0
DaveInCaz