Frage

Ich erweitere / konvertiere / konvertiere eine ältere Webformationsanwendung in eine völlig neue MVC-Anwendung. Die Erweiterung ist sowohl in der Technik als auch in Bezug auf die Technik sowie den Fall des Geschäftsbereichs. Die ältere Anwendung ist ein gut erlebter Datenbankgestaltung (DBDD). Also für z.B. Wenn Sie verschiedene Arten von Mitarbeitern wie Betreiber, Supervisor, Shop-Keeper usw. haben, müssen Sie einen neuen Typ hinzufügen, Sie müssen einfach einige Zeilen in ein paar Tischen und Voila hinzufügen. Ihre Benutzeroberfläche hat automatisch alles, um das neue hinzuzufügen / zu aktualisieren Art des Angestellten. Die Trennung von Ebenen ist jedoch nicht so gut.

Das neue Projekt hat zwei Hauptziele

    .
  • Erweiterbarkeit (für denzeit und zukünftige Pipeline-Anforderungen)
  • Leistung

    Ich beabsichtige, das neue Projekt zu erstellen, das das Datenbankgesteuertes Design (DBDD) mit einem domänengesteuerten Design (DDD) ersetzt, das den Dehnbarkeitsanforderungen anfordert. Wenn Sie sich jedoch von einem datengesteuerten Design auf ein domänengesteuertes Design bewegt, scheint jedoch umgekehrt die Leistungsanforderung zu beeinflussen, wenn ich es mit der Leistung der älteren DBDD-Anwendung vergleichen. In der älteren Anwendung würde ein Anruf von Daten von der Benutzeroberfläche direkt mit der Datenbank interagieren, und alle Daten würden in Form eines DataReaders oder (in einigen Fällen) ein Datensatz zurückgegeben.

    Jetzt mit einem strengen DDD an Ort und Stelle wird ein Anruf für Daten über die Geschäftsschicht und die Datenzugriffsschicht geleitet. Dies würde bedeuten, dass jeder Anruf ein Geschäftsobjekt und ein Datenzugriffsobjekt initialisieren würde. Eine einzelne UI-Seite könnte verschiedene Arten von Daten benötigen, und dies ist eine Webanwendung, die jede Seite von mehreren Benutzern angefordert werden könnte. Auch eine MVC-Webanwendung ist status, wobei jede Anforderung jeweils die Geschäftsobjekte und Datenzugriffsobjekte initialisieren. Es scheint also für eine MVC-stateunlose Anwendung, dass die DBDD für die Leistung der DDD vorgezogen wird.

    oder dort einen Weg in der DDD, um beide Erweiterbarkeit zu erreichen, die DDD bietet, und Leistung, die DBDD bietet?

War es hilfreich?

Lösung

Haben Sie sich als eine Form der Befehlsabfrageabscheidung angesehen, bei der die Updates über das Domänenmodell sind, das noch liest als DataReader?Vollgeblasenes DDD ist nicht immer angemessen.

Andere Tipps

"Jetzt mit einem strikten DDD an der Stelle wird ein Anruf für Daten über die Geschäftsschicht und die Datenzugriffsschicht geleitet."

Ich glaube nicht, dass dies wahr ist, und es ist sicherlich nicht praktisch. Ich glaube, das sollte lesen:

Jetzt mit striktem DDD an Ort und Stelle wird ein Anruf für eine Transaktion durch die Geschäftsschicht und die Datenzugriffsschicht geleitet.

Es gibt nichts, was sagt, dass Sie die Datenzugriffsschicht nicht direkt anrufen können, um welche Daten, die Sie benötigen, auf dem Bildschirm erforderlich sind. Nur wenn Sie Daten ändern müssen, die Sie benötigen, um Ihr Domänenmodell aufzurufen, das auf der Grundlage seines Verhaltens ausgelegt ist. Meiner Meinung nach ist dies eine wichtige Unterscheidung. Wenn Sie alles über Ihr Domain-Modell verladen, haben Sie drei Probleme:

    .
  1. Zeit - es wird viel länger dauern, um die Funktionalität zu implementieren, ohne Nutzen.
  2. Modelldesign - Ihr Domain-Modell wird aus der Form gebogen, um die Bedürfnisse abfragen, anstatt das Verhalten zu erfüllen.
  3. Leistung - nicht wegen einer zusätzlichen Ebene, aber weil Sie die aggregierten Daten nicht so schnell wie möglich von einer Abfrage von Ihrem Modell erhalten können. I.E. Betrachten Sie den Gesamtwert aller Bestellungen für einen bestimmten Kunden - es ist viel schneller, um eine Abfrage dafür zu schreiben, als alle Auftragseinheiten für den Kunden abzurufen, über und Summe.

    Wie chraisyre2000 erwähnt, zielt CQRs darauf ab, diese genauen Probleme zu lösen.

Die Verwendung von DDD sollte in Ihrem Szenario keine erheblichen Leistungsauswirkungen haben.Was Sie besorgt haben, scheint eher wie ein Datenzugriffsproblem zu sein.Sie bezeichnen es als

Initialisieren eines Geschäftsobjekts und eines Datenzugriffsobjekts

Warum ist "Initialisierung" teuer?Welche Datenzugriffsmechanismen verwenden Sie?

ddd mit langlebigen Objekten, die in einer relationalen Datenbank gespeichert sind, wird in der Regel mit Orm umgesetzt. Wenn ordnungsgemäß verwendet wird , hat ORM sehr wenig, falls vorhanden, die Leistung für die meisten Anwendungen auswirken.Und Sie können die meisten leistungssensitiven Teile der App immer wieder auf Rohe SQL zurückschalten, wenn ein bewährter Engpass vorhanden ist.

Für das, was es wert ist, muss NHibernate nur einmal in der Anwendungsstart initialisiert werden, danach wird derselbe ADO.net-Anschlusspool als Ihre regulären Datenleser verwendet.Also läuft alles auf ein ordnungsgemäßes Mapping, Abrufen von Strategie und vermeidet klassischen Datenzugriffsfehler wie 'n + 1 ausgewählt'.

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