ASP.NET MVC 5 Modulare Web-Anwendung-Architektur?
Das Unternehmen wo ich derzeit beschäftigt ist, kämpft mit einer architektonischen Entscheidung für unsere Palette von Anwendungen. Im moment haben wir ein paar Anwendungen, für die gemeinsamen Teile (denken Sie wie ein Kalender-Modul). Bis jetzt hielten wir uns auf das kopieren von code von anderen vorhandenen Anwendung, sondern in der Zukunft wollen wir entwickeln unsere Anwendungen, um ein mehr Modulares design:
Wie Sie, in sehen können das Bild oben, das es möglich ist, verschiedene Versionen der Module pro Anwendung.
Sind wir in Erwägung ziehen, um mögliche Lösungen:
- Aufbau einer core-Applikation-framework, wo wir können, installieren Sie unsere
Module. Wir denken, ein tool wie Nuget, dies zu erreichen. - Aufbau einer Anwendung, bei dem alle Module enthalten sind (=eine code-Basis), aber der Kunde bekommt nur die Funktionen, die aktiviert wird, für ihn. Wir sind forseeing einige Probleme mit der Versionierung hier.
Irgendwelche Vorschläge dazu? Wir können nicht die erste Firma, die Kämpfe mit diesem problem?Alle unsere Anwendungen sind ASP.NET MVC 4/5, web-Anwendungen, gebaut mit Razor-Templates oder JavaScript-Vorlagen (knockout.js). Alle unsere Anwendungen bereitgestellt werden, die auf Microsoft Azure und wir haben umfangreiches inhouse-wissen buildscripts (MSBuild), CI-Servern...
- Ich habe gearbeitet, in einer früheren position mit einem ähnlichen setup. Was wir Taten, war eine umfassende Lösung, die enthält alle Projekte. Die wiederverwendbare Elemente Ihrer Anwendungen würde Leben in einem gemeinsamen Projekt, in der Lösung verwiesen wird, die von jedem Ihrer web-Anwendungen. Die eine Sache, dass dies nicht die Adresse ist, die verschiedenen Versionen der Module, warum ist das der Fall? Ich denke, es ist nur zu führen, dass Sie Kopfschmerzen auf lange Sicht. Wie für den Zugriff auf verschiedene Module für jeden client, das wäre geregelt, die von Ihren Berechtigungen/security-Struktur in Ihrer Anwendung.
- Man könnte auch für jedes Modul ein eigenes Projekt, und importieren Sie die Projekte in jedem größeren Projekt. Ich bevorzuge diese an die große Lösung, die umfasst alles, einfach, weil ich hasse die Suche durch eine große Struktur. Beide erzielen das gleiche Ergebnis, obwohl. Dies ermöglicht Ihnen auch die alten Versionen der Module, und fügen Sie diese in den größeren Projekt -/
- wir arbeiten mit zahlenden Kunden. Es ist möglich, dass wir vermeiden möchten, dass ein bestimmter Kunde (=Anwendung) auf version 1.x, weil er will es so oder weil er nicht zahlen wollte für die neue version 2.0...
- Ah stimmt ich sehe, aber technisch einschränkenden Funktionen verwaltet werden können innerhalb des Moduls selbst. Zum Beispiel, wenn Sie hinzufügen wollte eine Funktion Erinnerungen zu Ihrem Kalender, den Sie einschränken würde, dass die neue Funktion innerhalb das Modul nur Ihre zahlenden Kunden. Dies ist genau das, was wir getan haben, in meinem alten Arbeitsplatz. Das ist, wie die meisten Anwendungen, die ich gearbeitet habe, mit verwalten, Sachen wie diese.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Er eine eigene Projekt - /Montage-für jedes Modul und die Bereitstellung von it als Nuget-Paket ist definitiv eine gute Strategie.
Vorteil:
Herausforderungen:
Während der Entwicklung zu Debuggen Assembler-code, die Installation über Nuget. Nuget unterstützt integriert. Erreicht haben wir es in unserem Fall (Framework verwendet wird, die von mehreren Plattformen).
Code-änderungen erforderlich, die in Modul-code (ein bug oder ein neues feature erforderlich). Auch das ist heikel:
Option 1: Gleichen Entwickler, gehen Sie einfach weiter und machen das zu ändern, neues Paket erstellen und installieren Sie eine neue version seiner app. Habe zu ermächtigen, die änderung kritischen code.
Option 2: Ein dafür vorgesehenes team verantwortlich zu beheben, Problem oder change request im framework code.
Können Sie auch versuchen, die plugin-Architektur, bauen Sie gerade die verschiedenen Module, aus denen die Anwendung als plugin, dann bauen die module, die erforderlich ist, für jede Anwendung als eine einzige code-Basis. In diesem Fall, die Installation einer Komponente für einen bestimmten Benutzer, wird eine Angelegenheit von hinzufügen oder herausziehen plugins. Viele große Projekte macht, die Sie von dieser besonderen Architektur reduziert, kopieren und einfügen, erhöht und die Wiederverwendung und die Geschwindigkeit der Entwicklung. Sie können überprüfen, nopcommerce ein open-source-Projekt für eine Idee, wie es gemacht wird.