Kundenspezifische Änderungen einer allgemeinen Anwendung

27/08/2008 - 10:54 von Heinrich Moser | Report spam
Hi!

Meine Frage ist keine technische sondern eher eine organisatorische.

Ich schreibe eine allgemeine Anwendung (ein Webshop), der
"mandantenfàhig" ist, d.h. mehrere Firmen können dort ihre Produkte
feilbieten. Über ein wenig URL-Rewriting
(http://.../BuerobedarfMustermann/Artikelliste.asp ->
http://.../Artikelliste.asp?Firma=BuerobedarfMustermann) làsst sich
das schön in eine einzige Anwendung verpacken, und trotzdem hat jede
Firma ihre "eigene" Webseite.

Nun ist es so, dass eine Firma recht aufwàndige Änderungen möchte, sie
möchte "den Webshop in ihre Webseite integriert haben", d.h. im Grunde
geht es um zusàtzliche Webseiten, die nur diese Firma betreffen, und
die dazu integriert werden sollen.

Jetzt habe ich mir folgende Ansàtze überlegt, um das Problem technisch
(mit Visual Studio 2008) zu lösen:

(a) Alles in ein Webprojekt packen und Sonderbehandlung im Code
(z.B. zusàtzliche Menüeintràge, die auf die zusàtzlichen Seiten
verweisen) für diese Firma (bzw. weitere Firmen, die soetwas
wollen)

==> unübersichtlicher Code, unübersichtliches Projekt, da
massenhaft firmenspezifische aspx-Seiten drinnen sind, die mit der
"Webshop-Anwendung" eigentlich nichts zu tun haben. Sobald
Designànderungswünsche auftauchen, die sich nicht über Themes oder
CSS machen lassen, muss auch dafür der Code aufgeblàht werden.

(b) Soviel wie möglich in eine Code-Bibliothek packen (z.B. als
Serversteuerelemente), die dann sowohl vom "allgemeinen Webshop"
(1 Webprojekt) als auch von Firmen-Individuallösungen (je ein
eigenes Webprojekt) verwendet wird.

==> kein Designer-Support in Bibliotheksprojekten, sprich: keine
ascx und aspx sondern alles "ausprogrammieren", was bei komplexen
Seiten sehr aufwàndig und unübersichtlich wird

(c) Die Webshop-Sachen im Webshop-Projekt lassen und nur für die
firmenspezifischen Seiten (je) ein eigenes Webprojekt machen; dann
mit Frames etc. clientseitig die Illussion einer einzigen,
konsistenten Website erzeugen.

==> alle altbekannten mit Frames verbundenen Nachteile

Keine dieser Lösungen überzeugt mich wirklich. Habe ich irgendeine
brauchbare Möglichkeit übersehen?

LG,
Heinzi
 

Lesen sie die antworten

#1 Thomas Bandt
27/08/2008 - 11:26 | Warnen spam
Heinrich Moser schrieb:
Keine dieser Lösungen überzeugt mich wirklich. Habe ich irgendeine
brauchbare Möglichkeit übersehen?



Die Kombination macht's. Lege dir zentral an einen
Ort Bibliothekten an, in denen du sàmtliche Logik,
Datenbankzugriff und gemeinsam nutzbare Custom-
Controls nutzt.

Dann legst du dir für jeden Mandaten ein eigenes
Webprojekt an. In dessen Solution linkst du dann
die Bibliotheken mit rein.

Für alles was vom Standard abweicht erstellst du
eigene Klassen für den Kunden in einer Kunden-
Bibliothek.

In dem Webprojekten selbst hast du nun nur noch
"dumme" WebForms und UserControls, im CodeBeside
erledigst du maximal noch DataBinding und
Validierung (streng genommen gehört das da auch
nicht hin).

Von der Struktur könnte das etwa so aussehen:

/Application/Shop.Core
/Application/Shop.UI
/Webs/xyz.ch/www
/Webs/abc.ch/www
/Webs/xyz.de/www
/Webs/xyz.ch/application/Shop.Customer.xyz

Vorteile:

Du hast sàmtliche Logik zentral an einer Stelle
und musst nur noch diese Pflegen. Gleichzeitig
hast du die Flexibilitàt in den Anwendungen machen
zu können was du willst, du musst keine Rücksicht
auf andere Mandanten nehmen. Der Code bleibt
übersichtlich, es gibt nicht tausende Ausnahme-
flle.

Insgesamt also wesentlich wartbarer.

Nachteile:

Wenn du erstmal ein paar Mandanten angelegt hast,
wird es mühsam allgemeine Änderungen überall
nachzuziehen, sei es in den Webs selbst oder der
Datenbank. Das làsst sich aber alles automatisieren,
z.B. mit SQL-Scripts oder Dingen wie "Patches", die
man auf alle Webs anwenden kann (bietet z.B.
TortoiseSVN).

Ich fahre mit einer àhnliche Organisation seit
3 Jahren mit gut über 40 Webs ganz passabel.

Gruß, Thomas [MVP ASP/ASP.NET]
http://www.69grad.de - Beratung, Entwicklung
http://www.dotnetjob.de - .NET-Stellenmarkt
http://blog.thomasbandt.de - Thomas goes .NET

Ähnliche fragen