Als ich heute diesen Blogpost laß, kam mir unweigerlich folgender Gedanke:
Was hat man uns mit den ASP.NET MVC Beispielen angetan?
Das Problem: Der Titel einer HTML-Seite ist ein Präsentations-Belang der nur durch die View gesteuert und gesetzt werden sollte. Ein Controller sollte nichts darüber wissen. Oren Eini hatte bereits vor einiger Zeit darauf hingewiesen. Aber was nützt es, wenn erst einmal ein schlechtes Beispiel von vielen gelesen worden ist. Da heißt es wohl: dagegen anschreiben.
Ich gebe zu, dies in ersten Tests auch aus den Beispielen übernommen zu haben. Mittlerweile bin ich aber dazu übergegangen, sämtliche vorgeschlagenen Modifikationen umzusetzten. Dies bedeutet, das ViewData.Model passé ist, ViewData der Controller nicht mehr nutzbar ist und Titel durch die View gesetzt werden (durch asp:Content). Somit sind Präsentations- und Kontroll-Belange sauber getrennt und das Modell nur noch streng typisiert verfügbar.
ViewData.Model.SiteMasterViewData.Title
ist jenseits von Clean Code und Lesbarkeit. Letzteres ist es schließlich für mich, was sauberen Code vor allem ausmacht.
Tags: alt.net, asp.net mvc, dotnet, readability
der Einwurf mit den Titel ist gut und werd ich sicherlich auch so umsetzen.
Bei dem Beispiel ging es allerdings nicht nur um den Titel, sondern generell um das Thema. Da ich selber mit der Lösung nicht ganz zu Frieden war, hab ich ja auch um Feedback gebeten.
Allerdings anstatt nur zu sagen, dass es schlecht ist und auf Oren zu verweisen, hätte man dies auch in 2, 3 Sätzen etwas hinterlegen können, was und warum man dies so oder so macht.
Wie man auch den Kommentaren im verlinkten Post entnehmen kann, gibt es hier nicht *die* Wahrheit. Manchmal kann etwas weniger Dogmatismus nicht schaden.
Just my 2 cents.
@Thomas: Ich bin da grundsätzlich ziemlich unpersönlich und schmerzfrei wenn es um Technik geht. Das Problem liegt im Grund ja auch nicht in Robert's Post sondern bei den Microsoft-Beispielen. Darauf bezog sich auch "Was hat man uns mit den ASP.NET MVC Beispielen angetan?". Der verlinkte Post war nur Auslöser, nochmals auf das Problem hinzuweisen.