Frage

Wir entwickeln ein "mittleres Tier", um eine vorhandene Geschäftslogik- / Datenzugriffsschicht zu ersetzen. Einer der Konstruktionsbedenken Wir unter ist, dass wir es auf eine Weise entwerfen müssen, die den Datenbanken und / oder mittleren Stückchen der Kunden ermöglicht, auf demselben Server als Teil unseres gehosteten Angebots zu leben. Das Datenbankschema und das Setup für die gehostete Umgebung sind an diesem Punkt ziemlich in Stein gesetzt, da es bereits in der Produktion ist. Im Wesentlichen hat jeder Kunde auf einem bestimmten DB-Server in der gehosteten Umgebung über eine SQL Server-Instanz, die mit ihrer einzigartigen Kunden-ID benannt wird.

was wir versuchen zu entscheiden, ist, ob Sie über den Webdienst, der Geschäftslogik und dem Datenzugriff auf die Datenbank für jeden Kunden einen separaten Pfad haben, um einen separaten Pfad auf der Client-App zu haben oder für jeden Kunden zu übertragen oder eine einzige gemeinsame Instanz von jedes Stück, wobei die Datenzugriffsschicht dafür verantwortlich ist, die Daten aus der richtigen SQL-Serverinstanz zu erhalten, oder irgendwo dazwischen zwischen diesen beiden. Mit einem einzelnen freigegebenen Pfad für alles, wenn ein Stück alle Clients heruntergibt, die darauf zugreifen, sind tot im Wasser tot. Andererseits, mit einzelnen Wegen für jeden Kunden, gibt es (scheinbar) mehr zu warten, außerdem ist es daneben, dass es vielleicht überkompliziert ist? Hier ist ein schreckliches ASCII-Kunstbild der beiden Optionen, die wir in Betracht ziehen: generasacodicetagpre.

oder das: generasacodicetagpre.

Welches von diesen (oder was zwischen Zwischenmöglichkeiten) wäre, wäre besser und warum?

War es hilfreich?

Lösung

This is a fairly general question, so I'll give a fairly general answer. I've built platforms on similar principles in the past and the only advice I can give you is to think carefully about dividing the architecture into two layers:

  • An entirely generic framework that handles all common, generic operations
  • A customisable 'customer' specific layer in which you can contain any unusual client specific functionality.

It maybe that many of your customers can operate on the generic framework alone, great, but when a customer is willing to pay you for some bespoking you can accommodate them through extension to, rather modification of, the generic layer.

In general we handled this kind of extensibility and coupling of generic with specialised behaviours through pretty standard techniques - a config file per customer that defines their processing 'pipeline', dynamic loading of customer assemblies, generous use of interfaces, allowing generic components to delegate operations to either standard implementations or customer specific implementations at runtime, and so on.

Hope that helps.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top