2016-08-08 62 views
0

Als Architekt, so dass die Anwendung, die ich bauen werde ein REST-konforme URL-Schema hat, die die Domäne genau darstellt, möge ich einen Weg Konvention zu erzwingen, die die folgenden Eigenschaften hat:Wie kann ich URL-Konventionen für meine Webanwendung erzwingen?

  • Grube Erfolg (einfacher für Entwickler es richtig, als es falsch zu tun)
  • folgt Klasse Konvention, es sei denn, es nicht der Fall ist, in welchem ​​Fall es overridable
  • Routen gespeichert sind, an einem zentralen Ort in der Codebasis
  • nimmt ist Vorteil type system (stark typisierte Controller-Aktionen anstelle der Überprüfung von Anfragevariablen fo r Parameter innerhalb der Aktion)
  • versionierbar

Meiner Erfahrung nach Klassennamen und Aktion Namenskonventionen auseinander fallen schließlich (das Domänenmodell des Objektmodell nicht genau folgen, oder Entwickler finden es schwierig, zu debuggen Routen), und die Anwendung kehrt zum Attribut-Routing zurück. Das Attribut-Routing hat eine Reihe von Nachteilen und kann zu einer Wild-West-Umgebung werden, in der mehrere URL-Stile zusammenwachsen.

Was gibt es da, um dieses scheinbar häufige Problem zu lösen?

Antwort

0

Nun, Sie suchen nach einer dritten Option, die nicht existiert. Traditionelles Routing und Attribut-Routing decken praktisch alle Szenarien ab. Was Sie verwenden, ist wirklich nur das Abwägen der Vor- und Nachteile von jedem.

Traditionelles Routing ist der konventionsbasierte Ansatz. Wenn Sie also nach etwas suchen, über das Entwickler nicht nachdenken müssen, dann ist es das. Die Standardeinstellung ist /controller/action, aber Sie können auch andere Routen für bestimmte Szenarien erstellen, in denen Sie etwas anderes möchten. Alle Routen sind in RouteConfig.cs zentralisiert, und die Routing-bezogenen Helfer in HtmlHelper und UrlHelper können als stark typisiert bezeichnet werden: Html.ActionLink<FooController>(m => m.Index(), "Foo").

Über den einzigen Artikel nicht angekreuzt ist Ihre Liste "versionierbar", aber ich bin mir nicht sicher, wie Sie das sowieso erwarten würde? Meine Gedanken gehen sofort zu Web Api und Präfix Routen mit etwas wie v1, v2, etc. Wenn das ist, worüber Sie reden, können Sie dies auch mit herkömmlichen Routing leicht tun.

Wenn Sie etwas flexibleres möchten, dann kommt das Attribut-Routing ins Spiel, und in Wahrheit können Sie traditionelles Routing und Attribut-Routing kombinieren, um das Beste aus beiden Welten zu erhalten. Attribute Routing ist viel weniger formalisiert, aber das ist der Punkt.

Letztendlich geht es aber nur um Standards in Ihrer Organisation. Es gibt keine Programmiersprache, kein Framework oder Routing-System, das Sie jemals auf eine Art und Weise festhält, Dinge für alle Zeit zu tun. Wenn Sie eine Standardisierung wünschen, müssen Sie die Standardisierung erzwingen. Hier kommen Dinge wie Code Reviews, QA, etc. ins Spiel. Sie sollten nicht erwarten, dass ein Framework institutionelle Probleme für Sie löst, denn das wird es nie tun.