Mit eigenwillig meine ich, dass das Framework Sie dazu zwingt, bestimmten Konventionen, Technologien oder Architekturen zu folgen. So ähnlich wie bei Rails oder Django. Dies wird die Entwicklung von tief integrierten Plugins ermöglichen.
Einer der größten Vorteile von Rails/Django sind die Gems/Plugins. Wie Sie wissen, finden Sie ein Gem für alles: Admin-Seiten, Authentifizierung, Kommentare, Rich Helpers, etc...
Derzeit kann MVC dieses Verhalten bis zu einem gewissen Grad durch die Verwendung von DLLs nachahmen. Soweit ich weiß, hat MVC jedoch keine Standardarchitektur, die tief integrierte Plugins zulässt. Wir können zum Beispiel kein Kommentarsystem haben, denn um Kommentare zu speichern, braucht man ein Repository, und ein typisches MVC-Projekt kann L2S/EF/NHibernate/MongoDB/etc. verwenden.
Meines Erachtens ist dies ein guter Weg, um dies zu tun:
- Einrichtung eines zentralen "Core Engine"-Projekts, das die MEF einsetzt
- Der Kernmotor wird offengelegt:
- Container/Dienstleistungsstandort
- Wenige Schnittstellen (wie IRepository)
- Einige "Hooks" wie ApplicationStart sowie alle anderen Hooks/Ereignisse, die Ihnen einfallen
- Was noch?
- Zur Verwendung dieses
- Verweis auf das "Core Engine"-Binary hinzufügen
- Legen Sie einige der Konfigurationen fest (ein Beispiel wäre eine Instanz von IRepository)
- Ein Entwickler kann nun jedes Plugin einbinden, das von der "Core Engine" abhängt, und diese Plugins haben vollständigen Zugriff auf die App-Ereignisse und das Repository
- Natürlich werden Plugin-Entwickler Plugins entwickeln, die auf die Kern-Engine abzielen - sie sprechen nie direkt mit der App, und die Engine ist das Zwischenprodukt zwischen den beiden.
Das Ziel ist nicht das perfekte Enterprise-Web-Framework... sondern etwas, was Django und Rails haben und MVC zu fehlen scheint: hohe Wiederverwendbarkeit von schweren, aber beliebten Komponenten.
Wurde dies schon einmal gemacht? Gibt es einen besseren Weg, dies zu tun?