Functional View for IDEs

Heutige Anwendungen haben viele technische Schichten. Eine moderne mehrsprachige ASP.NET MVC Webanwendung besteht z.B. mindestens aus den Schichten Model, Controller, ViewModel, View, Script, Styles und Translations.

StatusQuo

Dies ist natürlich nicht nur bei ASP.NET MVC oder Webprojekten so und ist auch an sich erst einmal kein Problem, sondern ganz im Gegenteil ein solider Entwurf.

Dem gegenüber steht jedoch die funktionale Sicht, in der alle technischen Teile zusammenwirken und die zum Verständnis der Anwendung für den Programmierer meist maßgebend ist.

Dadurch ergibt sich eine umfangreiche Matrix von Code:

Controller ViewModel View Script Styles
Funktion1 Controller1.cs ViewModel1.cs View1.cshtml Script1.js Style1.css
Funktion2 Controller2.cs ViewModel2.cs View2.cshtml Script2.js Style2.css

Ich habe aber beobachtet, dass gerade noch nicht so erfahrene Entwickler bzw. Programmierer Probleme haben, bei so vielen oder noch mehr technischen Schichten den Überblick zu behalten und einen sauberen Entwurf durchzuhalten.

Unabhängig von der Erfahrung ist bei der Entwicklung an einem Feature ein ständiger Kontextwechsel zwischen vielen Dateien nötig. Teilweise ist der so groß, dass zumindest das Produktivitätsgefühl abnimmt.

Mir persönlich ist die funktionale Dekomposition besonders wichtig und finde es eigentlich verwunderlich, dass dieses Problem nicht bereits mit Tooling gelöst wurde. Aber vielleicht liest sich ja ein Entwickler von Eclipse oder Visual Studio die folgende Idee durch…

Zunächst sollte die bisherige “technische” Sicht weiter erhalten bleiben:

New-Technical

Zusätzlich sollte man jedoch in die funktionale Sicht wechseln können:

New-Functional

Diese Sicht kann eine Art “virtuelle” Datei sein. Für Controller z.B. wäre eine Funktion nicht eine vollständige Klasse, sondern nur eine oder mehrere Methoden. Bei Views oder Scripts hingegen kann man leicht eine Datei zu einer Funktion zuordnen.

Die Zuordnung könnte basierend auf festen Regeln (Architektur) oder manuell erfolgen.

Die Navigation zwischen den einzelnen Dateien könnte man so enorm vereinfachen und die Produktivität wäre wirklich verbessert.