ASP.NET MVC und Rails haben einen ähnlichen Verwendungsbereich und basieren auf derselben Architektur. Beide Frameworks sind relativ neu und Open Source.
Als Rails-Programmierer würde ich gerne wissen, was ASP.NET MVC kann und was Ruby on Rails nicht und umgekehrt?
ruby-on-rails
comparison
asp.net-mvc
Nikita Barsukov
quelle
quelle
Antworten:
Ich habe sowohl mit Rails als auch mit ASP.NET MVC echte Anwendungen entwickelt, aber diese Antwort bringt eine erhebliche Einschränkung mit sich: Ich habe mit Rails vor Version 2 gelernt und entwickelt Schienenwissen.
Abgesehen davon glaube ich nicht, dass es irgendetwas gibt , das mit dem einen gemacht werden kann, aber nicht mit dem anderen. Wenn Sie eine Reihe von Anforderungen für eine Webanwendung haben, sollten Sie in der Lage sein, diese App - wahrscheinlich ebenso effizient - mit Rails oder ASP.NET MVC zu erstellen.
Es gibt ein paar nette Dinge, die meines Wissens in ASP.NET MVC hauptsächlich aufgrund von Aspekten von C # /. NET verfügbar sind. Beispiel: Wenn ich eine Seite habe, die ein gesendetes Formular enthält, wird in einer Aktion geprüft, ob es sich um ein GET oder einen POST handelt, um zu entscheiden, was zu tun ist:
Dies ist ein triviales Beispiel dafür, aber das
if request.post?
Muster ist in Rails äußerst verbreitet. In nicht trivialen Fällen kann der Aktionscode groß und unübersichtlich werden, und häufig würde ich mir wünschen, dass ich ihn sauber in separate Methoden umgestalten könnte. In ASP.NET MVC kann ich das tun:Ich denke, dass es in der Lage ist, die Behandlung von GET- und POST-Anfragen sauber zu trennen. Ihr Kilometerstand kann variieren.
Die andere Sache, die ASP.NET MVC macht, ist super cool (wieder meiner Meinung nach) und hat auch mit der Handhabung von Formular-POSTS zu tun. In Rails muss ich den
params
Hash für alle meine Formularvariablen abfragen . Nehmen wir an, ich habe ein Formular mit den Feldern 'Status', 'Gonkuliert', 'Invertiert' und 'Disposition':Mit ASP.NET MVC kann ich jedoch alle meine Formularwerte als Parameter für meine Action-Methode abrufen:
Das sind die beiden Dinge, die ich an ASP.NET MVC oder Rails wirklich geliebt habe. Sie sind kein ausreichender Grund für einen vernünftigen oder kompetenten Entwickler, ein Framework vor dem anderen zu wählen.
quelle
public ActionResult Edit(Foothing foothing)
, dh die ModelBinder-Features waren noch ordentlicher.Ein Vorteil von ASP.NET MVC gegenüber Rails besteht darin, dass Sie eine neue Anwendung über eine vorhandene Datenbank erstellen müssen. ActiveRecord von Rails ist sehr besorgt darüber, wie Tabellen strukturiert werden sollten (Tabelle muss eine und nur eine Ganzzahlspalte als Primärschlüssel mit der Bezeichnung 'id' usw. haben). Wenn Ihre vorhandenen Tabellen also nicht den ActiveRecord-Einstellungen entsprechen, ist es schwierig, ActiveRecord zu erstellen Arbeit. Aber die Entwicklung einer neuen App mit neuer Datenbank mit ActiveRecord und Rails geht schnell!
ASP.NET MVC verfügt nicht über Standard-ORM. Sie können eine Datenzugriffsstrategie auswählen, die Ihren Anforderungen entspricht. Einige ORMs wie nhibernate unterstützen ältere Datenbanken. Sie können guid Primärschlüssel usw. haben.
Es gibt eine Alternative zu Rails ActiveRecord namens DataMapper , die ich jedoch nicht ausprobiert habe.
quelle
Nachdem Sie beide verwendet haben, lautet die Antwort IMO, dass ASP.NET MVC flexibler als Rails ist, wenn Ihre Anwendung mehr als nur Lesen / Schreiben aus einer Datenbank ausführen muss. Meiner Erfahrung nach geht Rails schnell und schwer kaputt, sobald Sie der Anwendung eine Komplexität oder Logik einführen, die über die sehr triviale CRUD-Logik hinausgeht. ASP.NET MVC ist von dieser Einschränkung nicht betroffen, da die Möglichkeiten "offener" sind.
Alles andere ist gleich in einer typischen "Web 2.0" CRUD App. Es gibt nichts, was man anders machen kann, aber für eine kompliziertere Anwendung, die einen Workflow oder unterschiedliche Datenquellen benötigt, oder um mit einer anderen Anwendung zu interagieren oder so das ist kein typisches CRUD, ASP.NET kann viel mehr und ist nicht so restriktiv wie Rails.
quelle
Ich habe noch nie mit Ruby on Rails gearbeitet, daher bin ich für die Beantwortung dieser Frage nicht besonders qualifiziert, aber eine Sache, die ich an ASP.NET MVC sehr mag, ist die Typensicherheit. Das kommt in die Quere. Adam Crossland und rmac haben es in ihren Kommentaren kurz angesprochen, aber ich möchte darauf hinweisen, dass bei einer Controller-Methode wie der folgenden jeder Parameter stark typisiert wird. Dadurch wird der Code in der Edit-Methode wesentlich übersichtlicher, da Sie sich nicht um die Konvertierung von Zeichenfolgendarstellungen in ordnungsgemäß typisierte Variablen kümmern müssen.
Die andere Stelle, an der diese Art der Sicherheit angezeigt wird, befindet sich in Ansichten und Teilansicht, wo eine Ansicht der Teilansicht einem einfachen alten C # -Objekt zugeordnet werden kann, das als Modell für diese Ansicht oder Teilansicht dient. Dies erleichtert das Leben erheblich, insbesondere wenn Sie eine Hierarchie von Ansichten erstellen möchten, die andere Ansichten enthalten.
Wenn
Infinity.ViewModels.Site
der Namespace eine Klasse enthält, die aufgerufen wirdContactViewModel
, platzieren Sie für Razor-Ansichten eine Zeile wie die folgende oben in der Ansicht:Für ASPX-Ansichten deklarieren Sie die Ansicht folgendermaßen:
Sie verknüpfen die tatsächliche Instanz des Modellobjekts mit der Ansicht in der Controller-Aktionsmethode und greifen dann über die
Model
Eigenschaft der Ansicht auf die Instanz des Modellobjekts in der Ansicht zu.Diese starke Typisierung ist für mich super cool. Das Team, das ASP.NET MVC erstellt hat, hat große Anstrengungen unternommen, um die drei Bereiche Modell, Ansicht und Controller stark zu typisieren.
Ich bin mir nicht sicher, ob Ruby-on-Rails dies hat, aber ich würde es hoffen.
quelle
Sie sind sich sehr ähnlich und sie können meistens alle "die gleichen Dinge tun", nur einige Dinge sind einfacher und schwieriger als andere.
Ich habe ASP.NET MVC für die ursprüngliche Version verwendet und es war definitiv ein Rails-Klon ohne Activerecord. Rails hat also mit ziemlicher Sicherheit ein viel größeres Feature-Set und ein viel größeres Plugin / Gem-Ökosystem.
quelle
Nach meiner begrenzten Erfahrung besteht der Hauptvorteil von ASP.NET MVC darin, dass es sich um eine kompilierte Sprache handelt. Auf diese Weise können Sie einige Programmierfehler erkennen, die bereits beim Kompilieren aufgetreten sind. Ruby muss diese dann beim Testen von Einheiten erkennen.
Die Tatsache, dass es kompiliert wurde, ermöglicht erweiterte Refactoring-Tools, z. B. das Ändern des Namens einer Eigenschaft an einer Stelle, und alle Verweise auf die Eigenschaft werden geändert. Dies ist zumindest in TextMate, das viele Rails-Entwickler verwenden, nicht möglich.
Andererseits ist der Hauptvorteil von Ruby on Rails, dass es sich um eine interpretierte Sprache handelt. Die Art von Ruby, wie Sie ein beliebiges Objekt im Speicher ändern oder eine Klasse mit Affen patchen können, kann zu einigen sehr eleganten Lösungen führen. Schauen Sie sich das Buch Eloquent Ruby für einige Beispiele an. Ein großer Teil des Rails-Frameworks selbst basiert auf dieser Fähigkeit.
Die Möglichkeit, eine Methode jederzeit an einem beliebigen Objekt zu ersetzen, hat mir auch beim Schreiben von Komponententests sehr geholfen. In .NET sind Dependency Injection- und IOC-Container praktisch Voraussetzungen für die Erstellung von testbarem Code. Das ist in Ruby nicht nötig.
Bearbeiten:
Nachdem wir darüber nachgedacht haben, ist wahrscheinlich die Datenbankmigration das Killer-Feature von Rails. Das ASP.NET MVC-Framework bietet an sich keine Datenbankunterstützung. Das .NET Framework verfügt über einige Datenzugriffskomponenten / ORM, z. B. Entity Framework und Linq to SQL. Es stehen jedoch keine Tools zum Entwerfen der Datenbankstruktur zur Verfügung.
Wenn Sie für eine der teureren Versionen von VS bezahlen, können Sie den Data Dude erwerben , mit dem Sie ein Datenbankschema entwerfen können und über einige Tools zum Bereitstellen des Schemas in einer Datenbank verfügen. Soweit ich weiß, ist die Unterstützung für Migrationen aus früheren Versionen der Anwendung jedoch sehr begrenzt.
Einige behaupten, dass ASP.NET MVC nicht wirklich ein MVC-Framework, sondern lediglich ein VC-Framework ist, da die Datenbankmigration nicht unterstützt wird.
Bearbeiten (erneut):
Durch Änderungen an der Visual Studio-Toolchain / EF wurden seit meiner letzten Bearbeitung codebasierte Migrationen eingeführt. (Aber schauen Sie sich auch FluentMigrator an, wenn Sie diesen Weg gehen.)
quelle
Mein Hauptproblem mit MVC 3 und Entity Framework von Microsoft sind die verblüffend schlechten Designprinzipien.
Eines der allerersten Probleme, auf das ich gestoßen bin, war die Verwendung einer anderen Klasse als Eigenschaft und der Versuch, eine Dropdown-Liste für die möglichen Werte zu erstellen.
Um meinen Standpunkt zu veranschaulichen, sagen Sie, Sie haben zwei Modellklassen wie diese:
Das Erstellen der Color-Eigenschaft würde für ein echtes ORM ausreichen, jedoch nicht für EF. Sie müssen eine redundante ID für die Color-Eigenschaft in der Thing-Klasse wie folgt hinzufügen:
Wenn Sie das redundante ID-Feld für eine Fremdobjektreferenz nicht hinzufügen, können Sie nicht einfach Dropdown-Listen mit allen möglichen Optionen der verknüpften Klasse erstellen.
Dies ist ein wirklich schreckliches Design, da es die internen Abläufe einer Klasse stark mit denen einer anderen koppelt. Wenn eine Sache nichts über ColorID wissen soll, sollte die Color-Klasse ihre eigenen Gleichheitsprüfungen durchführen, ohne auch nur eine ID preiszugeben.
Das sind Best Practices 101, aber anscheinend kennt Microsoft die Grundprinzipien der Informatik und der objektorientierten Programmierung überhaupt nicht. [/ Rant]
quelle
int?