Ich habe ein ASP.NET MVC 4-Projekt und bin bei einer architektonischen Entscheidung festgefahren, welches JavaScript-Framework oder welche Bibliothek Angular.js oder Knock.js verwenden soll. Ich neige derzeit dazu, Angular.js über Knockout.js zu verwenden, möchte aber nicht herausfinden, dass ich während der Projektentwicklung einen Fehler gemacht habe.
Hier einige Hintergrundinformationen:
- Wir brauchen eine bidirektionale Modelldatenbindung
- Wir brauchen die Fähigkeit, Ansichten zu testen. Ich möchte in der Lage sein, End-to-End-Unit-Tests durchzuführen. Außerdem verwenden wir die kontinuierliche Integration.
- Funktion "Änderungen speichern". Wenn ein Benutzer Änderungen an einer Seite vornimmt, muss er in der Lage sein, Änderungen zu erkennen und den Benutzer aufzufordern, seine Änderungen zu speichern, bevor er von der Seite weg navigiert
- "Benachrichtigungen" -Funktionalität. Das heißt, der Benutzer wird ungefähr 8 Stunden lang 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 dies nur eine Frage der Zeit ist.
- Unser Team besteht aus Entwicklern mit unterschiedlichen Erfahrungsstufen, von sehr jungen bis zu älteren 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 hier gelesen und Scott Allens Interview über Angular hier gesehen
Da wir nicht von unserer aktuellen ASP.NET MVC 4-Architektur wechseln können, um etwas auf der Serverseite wie die Web-API zu verwenden, habe ich einige Bedenken beim Versuch, Angular.js mit MVC 4 zu implementieren. Wird dies dazu führen, dass wir zwei Modelle haben? der Server und einer auf dem Client?
Ich suche keine "was besser ist" -Diskussion über Angular und Knockout, weil ich denke, dass beide ihre Vor- und Nachteile haben. Ich suche nach aktuellem Code zum Implementieren eines JavaScript-Frameworks oder einer JavaScript-Bibliothek in einer ASP.NET MVC 4-Anwendung. Ich brauche eine Lösung, mit der ich in 2+ Jahren leben kann :)
Irgendwelche Ideen oder Vorschläge? Vielleicht lautet die Antwort nicht Knock oder Angular, sondern ein anderes JavaScript-Framework?
Antworten:
meine 2 Cent wert.
Präambel - Ich habe sowohl mit Winkel als auch mit Knockout gearbeitet. Ich bin auf meinem 3. nicht trivialen Frontend, das mit einer MVVM / MVC-Bibliothek erstellt wurde.
Ich habe mit Knockout begonnen, weil die MVVM der wpf / silverlight-Mechanik sehr ähnlich ist. Und es funktioniert gut. Die Tutorials und Dokumentationen sind erstklassig. Alle Ihre Codierer können innerhalb von Tagen mit knockout.js arbeiten, oder wenn sie mvvm unter .net verwendet haben, innerhalb von Stunden.
In diesen Tagen verwende ich jedoch Angular und werde mich wahrscheinlich aus folgenden Gründen daran halten.
eckig ist ein komplettes Gerüst - beim 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. Dies ist perfekt, um
Verspottungen zum Testen hinzuzufügen und Ihrem Code Struktur zu verleihen.
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 eckiger Fan, ich denke immer noch, dass sie mehr auf die MVVM-Architektur als auf die "funky" MVVM / MVC-Hybridarchitektur umsteigen könnten, die sie derzeit haben.
Das größte Problem mit Winkel ist die Dokumentation. Im Vergleich zum Knockout ist es traurig. Dies erhöht die Zeit und die Kosten, um Ihre Codierer auf den neuesten Stand zu bringen. Sobald sie dort sind, ist es derzeit meiner Meinung nach die beste Wahl.
quelle
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, dass ich das getan habe. Angular hat zwar eine steile Lernkurve, aber es lohnt sich aufgrund der Macht der Anweisungen.
quelle
Ich habe nicht viel Input zu AngularJs, möchte aber einige Gedanken zu Knockout machen.
Knockout ist in erster Linie eine Datenbindungsbibliothek zum Verbinden von Ansichten mit dem Ansichtsmodell, bietet jedoch nicht wirklich viele Funktionen darüber hinaus. Ich würde nicht empfehlen, Knockout alleine als Hauptbibliothek zu verwenden, um eine komplexe Client-basierte Website zu erstellen.
Sie haben nicht erwähnt, ob Sie Spa-ähnliche Funktionen implementieren (z. B. Hash-Tag-Navigation) oder ob Sie hauptsächlich serverseitige MVC-Ansichten verwenden (z. B. Razor). Wenn Sie nur nach einer schnellen Datenbindung pro Seite suchen, würde ich das sogar noch einmal überdenken. Für mich sind beide (Angular oder Knockout) darauf ausgelegt, die clientseitige Entwicklungserfahrung zu verbessern - weniger ein serverseitiger Ansatz wie MVC.
Wenn Sie einen SPA-Ansatz in Betracht ziehen, möchten Sie wahrscheinlich auch ein Framework, das ein gewisses Maß an Kontrolle über den Lebenszyklus der Ansichtsaktivierung bietet.
In Bezug auf Datenbindungskraft und Zuverlässigkeit glaube ich an Knockout. Ich habe es ausgiebig benutzt und es sehr gemocht. Wenn Sie das Gefühl von Knockout mögen, sollten Sie sich Durandal ansehen . Durandal ist ein anständiges Framework, das die Anforderungen vieler "Spa" -Webprojekte erfüllen kann. Es ist ein clientseitiges Framework, das auf mehreren bewährten Bibliotheken basiert, 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 mit Knockout in Verbindung mit einer zusätzlichen Fassade, um die Entwicklung zu vereinfachen, und die Integration mit ASP.Net MVC ist unkompliziert. Ich empfehle nicht, das serverseitige Knockout-Material zu verwenden, das es gibt. Ich finde das nur, um die wahre Leistung des MVVM-Musters zu begrenzen.
quelle