it-swarm.com.de

Angular.js und ASP.NET MVC 4

Ich habe ein ASP.NET MVC 4-Projekt und bin bei der Entscheidung, welches JavaScript-Framework oder welche JavaScript-Bibliothek Angular.js oder Knock.js verwendet. Ich neige derzeit dazu, Angular.js anstelle von Knockout.js zu verwenden, möchte aber nicht in der Mitte der Projektentwicklung herausfinden, dass ich einen Fehler gemacht habe.

Hier einige Hintergrundinformationen:

  • Wir benötigen eine bidirektionale Modelldatenbindung
  • Wir brauchen die Fähigkeit, Ansichten zu testen. Ich möchte End-to-End-Tests durchführen können. Außerdem setzen wir auf kontinuierliche Integration.
  • Funktionalität "Änderungen speichern". D. h., wenn ein Benutzer Änderungen auf einer Seite vornimmt, müssen wir die Möglichkeit haben, Änderungen zu erkennen und den Benutzer aufzufordern, die Änderungen zu speichern, bevor er von der Seite weg navigiert
  • "Notifications" -Funktionalität. d.h. der Benutzer wird ca. 8 Stunden angemeldet und muss über Änderungen anderer Benutzer (Fehler, Änderungen des Datenstatus und dergleichen) informiert und aktualisiert werden.
  • Wir müssen unsere Bewerbung "zukunftssicher" machen. Derzeit hat die Geschäftseinheit nicht entschieden, ob wir mobile Geräte unterstützen müssen, aber ich weiß, dass es nur eine Frage der Zeit ist.
  • Unser Team besteht aus Entwicklern mit unterschiedlichen Erfahrungsstufen, von sehr jungen bis zu erfahrenen Entwicklern.
  • Derzeit sind unsere Modelle kompliziert und werden möglicherweise noch komplizierter
  • Wir müssen auch RAD, Wiederverwendung von Code und Wartbarkeit berücksichtigen

Ich habe die ausgezeichnete Antwort gelesen hier und mir das Interview von Scott Allen über Angular hier angesehen

Da wir nicht in der Lage sind, von unserer aktuellen ASP.NET MVC 4-Architektur zu wechseln, um etwas auf der Serverseite wie die Web-API zu verwenden, habe ich einige Bedenken beim Versuch, Angular.js mit MVC 4 zu implementieren Sollen wir zwei Modelle haben, eines auf dem Server und eines auf dem Client?

Ich bin nicht auf der Suche nach einer besseren Diskussion über Angular und Knockout, weil ich denke, dass beide ihre Vor- und Nachteile haben. Ich suche nach aktuellem Code für die Implementierung eines JavaScript-Frameworks oder einer Bibliothek in eine ASP.NET MVC 4-Anwendung Ich benötige eine Lösung, mit der ich in mehr als 2 Jahren leben kann :)

Irgendwelche Ideen oder Vorschläge? Vielleicht lautet die Antwort nicht "Knock" oder "Angular", sondern ein anderes JavaScript-Framework?

73
Que

Ich bin froh zu sehen, dass diese Fragen für die Community von Interesse waren;) Der Vollständigkeit halber habe ich Folgendes getan:

Ich habe mich für AngularJS und ASP.NET MVC 4 entschieden und war froh darüber. Obwohl Angular hat eine steile Lernkurve, aber es lohnt sich wegen der Kraft der Direktiven.

  • Wir benötigen eine bidirektionale Modelldatenbindung. In einigen Fällen musste ich einige vom MVC-Controller stammende Anfangswerte festlegen. Ich habe das ng-init-Attribut verwendet, um dies zu erreichen.
  • Wir brauchen die Fähigkeit, Views zu testen - ich habe die AngularJS docs zum Testen befolgt
  • "Save Changes" -Funktionalität - Ich habe dies mit einer Direktive in Angular implementiert
  • "Notifications" -Funktionalität - Ich habe dies mit toastr.js und und Direktiven implementiert (schweet)
  • Wir müssen unsere Anwendung "zukunftssicher" machen - ich kenne die Pläne von Google für AngularJS nicht, aber nachdem ich mit AngularJS gearbeitet habe, sehe ich nicht, dass sie irgendwann irgendwohin geht und erwarte, dass sie weiter verbreitet wird :)
21
Que

meine 2 cent wert.

präambel - Ich habe sowohl mit angular als auch mit Knockout gearbeitet. Ich bin auf meinem dritten nicht trivialen Frontend, das mit einer MVVM/MVC-Bibliothek erstellt wurde.

Ich habe mit Knockout begonnen, weil seine MVVM der wpf/silverlight-Mechanik sehr ähnlich ist. Und es funktioniert gut. Die Tutorials und Dokumentationen sind erstklassig. Alle Ihre Programmierer werden in der Lage sein, innerhalb von Tagen mit knockout.js zu arbeiten, oder wenn sie mvvm unter .net verwendet haben, innerhalb von Stunden.

In diesen Tagen verwende ich jedoch angular und werde wahrscheinlich aus den folgenden Gründen daran festhalten.

  • angular ist ein komplettes Framework - bei Knockout geht es wirklich nur um die 2-Wege-Bindung. Sie benötigen noch andere Bibliotheken wie backbone.js/jquery, um den Rest Ihrer Arbeit zu erledigen.

  • winkel hat Abhängigkeitsinjektion. Das ist perfekt zum Hinzufügen
    Verspotten zum Testen und Strukturieren Ihres Codes.

  • angular behandelt normale JS-Variablen als Observable innerhalb seines $ scope-Objekts. Das bedeutet, dass Sie sie nicht auf besondere Weise deklarieren müssen

Ich bin kein angular Fanboy, ich denke immer noch, sie könnten mehr auf die MVVM-Architektur umsteigen als auf die "funky" MVVM/MVC-Hybrid-Architektur, die sie derzeit haben.

Das größte Problem bei angular ist die Dokumentation. Im Vergleich zum Knockout ist es bedauerlich. Es erhöht den Zeit- und Kostenaufwand, um Ihre Codierer auf den neuesten Stand zu bringen IMHO die beste Wahl.

57
Anton

Ich habe nicht viel Input zu Angulars, möchte aber ein paar Gedanken zu Knockout machen.

Knockout ist in erster Linie eine Datenbindungsbibliothek zum Verbinden von Ansichten mit dem Ansichtsmodell, bietet jedoch darüber hinaus nicht wirklich viele Funktionen. Ich würde nicht empfehlen, Knockout allein als Hauptbibliothek für die Erstellung einer komplexen clientbasierten Website zu verwenden.

Sie haben nicht erwähnt, ob Sie eine Spa-ähnliche Funktionalität (d. H. Hash-Tag-Navigation) implementieren oder ob Sie hauptsächlich serverseitige MVC-Ansichten (z. B. Razor) verwenden. Wenn Sie nur nach einer schnellen Datenbindung auf Seitenebene suchen, würde ich das sogar noch einmal überdenken. Beides (Angular oder Knockout) wurde für mich entwickelt, um die clientseitige Entwicklungserfahrung zu verbessern - nicht so sehr ein serverseitiger Ansatz wie MVC.

Wenn Sie einen SPA-Ansatz in Betracht ziehen, möchten Sie wahrscheinlich ein Framework, das eine gewisse Kontrolle über den Lebenszyklus der Ansichtsaktivierung bietet.

Was die Datenbindungsleistung und -zuverlässigkeit angeht, glaube ich an Knockout. Ich habe es ausgiebig benutzt und es sehr gemocht. Wenn Sie das Gefühl des Ausscheidens mögen, sollten Sie sich mit Durandal befassen. Durandal ist ein anständiges Framework, das in der Lage ist, die Anforderungen vieler "Spa" -Webprojekte zu erfüllen. Es ist ein clientseitiges Framework, das auf mehreren bewährten Bibliotheken aufbaut, einschließlich Knockout. Es ist etwas (viel) leichter als Angular und möglicherweise einfacher zu bedienen.

Wir erstellen eine ziemlich große ASP.Net MVC-Website mit Durandal und Knockout in Verbindung mit einer zusätzlichen Fassade, um die Entwicklung zu beschleunigen. Die Integration mit ASP.Net MVC ist unkompliziert. Ich empfehle nicht, das serverseitige Knockout-Zeug zu verwenden, das es gibt. Ich finde das nur, um die tatsächliche Leistung des MVVM-Musters zu begrenzen.

12
Joseph Gabriel