Was ist eine gute Lösungsstruktur, um eine einfache kundenspezifische Anpassung eines Produkts zu ermöglichen?

Ich bin auf der Suche nach Ratschlägen für die einfache Anpassung und Erweiterung eines Kernprodukts auf Kundenbasis. Ich weiß, dass es wahrscheinlich eine zu große Frage ist. Wir müssen uns jedoch einige Ideen einfallen lassen, da dies jahrelang Probleme bereiten kann, wenn wir das Setup falsch verstehen. Ich habe nicht viel Erfahrung in der Anpassung und Erweiterung bestehender Produkte.

Wir haben ein Kernprodukt, das wir normalerweise auf Kundenbasis maßschneidern. Wir haben kürzlich das Produkt in C # 4 mit einem MVC3-Frontend umgeschrieben. Wir haben überarbeitet und haben jetzt 3 Projekte, aus denen die Lösung besteht:

Kerndomänenprojekt (Namespace - Projektname.Domäne. *) - bestehend aus Domänenmodellen (zur Verwendung durch EF), Domänenservice-Schnittstellen usw. (Repository-Schnittstellen)Domäneninfrastrukturprojekt (Namespace -Projektname.Infrastruktur. *) - Implementiert den Domänenservice-EF-Kontext, die Repository-Implementierung, Schnittstellenimplementierungen für das Hochladen / Herunterladen von Dateien usw.MVC3 (Namespace - Projektname.web. *) - Projekt, das aus Controllern, Ansichtsmodellen, CSS, Inhalten, Skripten usw. besteht. Es verfügt auch über eine IOC (Ninject) -Handhabungs-DI für das Projekt.

Diese Lösung funktioniert problemlos als eigenständiges Produkt. Unser Problem ist es, das Produkt auf Kundenbasis zu erweitern und anzupassen. Unsere Kunden möchten in der Regel die Kernproduktversion sehr schnell (in der Regel innerhalb weniger Tage nach Vertragsunterzeichnung) mit Marken-CSS und -Styling erhalten. 70% der Kunden möchten dann jedoch, dass Anpassungen die Funktionsweise ändern. Einige Anpassungen sind klein, z. B. zusätzliche Eigenschaften für Domänenmodell, Ansichtsmodell und Ansicht usw. Andere sind bedeutender und erfordern völlig neue Domänenmodelle und Controller usw.

Einige Anpassungen scheinen für alle Kunden nützlich zu sein. Daher möchten wir sie in regelmäßigen Abständen von Anpassungen entfernen und sie dem Kern hinzufügen.

Wir speichern derzeit den Quellcode in TFS. Um ein Projekt zu starten, kopieren wir normalerweise die Quelle manuell in ein neues Teamprojekt. Ändern Sie den Namespace, um den Namen des Clients wiederzugeben, und passen Sie die Basisteile an. Stellen Sie sie dann in Azure bereit. Dies führt offensichtlich zu einer vollständig duplizierten Codebasis, und ich bin sicher, dass dies nicht der richtige Weg ist. Ich denke, wir sollten wahrscheinlich etwas haben, das die Kernfunktionen bereitstellt und bei Bedarf erweitert / überschreibt. Ich bin mir jedoch nicht sicher, wie ich vorgehen soll.

Daher suche ich nach Ratschlägen für die beste Projektkonfiguration, die Folgendes ermöglichen würde:

Schnelle Bereitstellung des Codes - so einfach kann ein neuer Client gestartet werden, um Branding / geringfügige Änderungen zu ermöglichenVermeiden Sie das Kopieren und Einfügen von CodeVerwenden Sie so viel DI wie möglich, um es locker gekoppelt zu haltenErmöglichen Sie die kundenspezifische Anpassung des CodesDie Möglichkeit, das Kernprodukt an einem einzigen Ort zu erweitern und alle Kunden mit dieser Funktionalität zu beauftragen, wenn wir die neueste Version des Kerns erhalten und erneut bereitstellen

Jede Hilfe / Beratung wird sehr geschätzt. Gerne fügen wir weitere Informationen hinzu, von denen jeder denkt, dass sie helfen werden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage