Optimieren von Interaktionen zwischen der COM+-Geschäftslogikebene und der Präsentationsebene

In der Regel unterscheidet sich die Latenz zwischen den Ebenen einer verteilten Anwendung erheblich. Aufrufe zwischen der Präsentationsebene und der Geschäftslogikebene sind oft um eine Größenordnung langsamer als Aufrufe zwischen der Geschäfts- und Der Datenebene. Daher ist der gehaltene Zustand beim Aufrufen der Geschäftslogikebene kostspieliger.

In den folgenden Themen werden Möglichkeiten zum Übergeben von Daten zwischen der Präsentations- und Geschäftslogikebene erläutert:

Übergeben von Parametern

Damit ein bestimmter Satz von Informationen zwischen der Präsentationsebene und der Geschäftslogikebene übergeben werden soll, verfügen Sie möglicherweise über eine einzelne Zeile, mehrere Zeilen oder eine Kombination aus einer einzelnen Zeile (z. B. einem Header) und mehreren Detailzeilen mit Daten. Die effizienteste Möglichkeit, diese Informationen zwischen Ebenen zu übergeben, ist ein einzelner Methodenaufruf. Dieser einzelne Aufruf würde die gesamte zu übergebende Information verwalten. Dies ist erforderlich, es sei denn, Sie wählen die Steuerung der Transaktion über die Präsentationsebene (und machen die gesamte Transaktionsbehandlung in der Präsentationsebene identisch mit der Funktion). Microsoft empfiehlt nicht, Transaktionen von der Präsentationsebene aus durchzuführen, da Aufrufe zwischen dieser Ebene und der Geschäftslogikebene in der Regel die langsamsten Aufrufe in einer Anwendung mit mehreren Ebenen sind.

Eine Möglichkeit zum Erstellen einer solchen Methode besteht darin, einzelne Informationszeilen als Parameter zu übergeben und mehrere Zeilen als ADO-Recordsets zu übergeben. Recordsets sind der Kern der ADO-Datenzugriffsmethodik von Microsoft, und mit ADO-Recordsets können Sie alle Informationen zu einer einzelnen Transaktion in einem Schritt übergeben.

Datenübergabeoptionen

Es gibt weitere Optionen, die beim Übergeben von Daten zu berücksichtigen sind. Dazu gehören die Verwendung einer Liste von Parametern und ADO-Recordsets (wie oben erläutert), nur ADO-Recordsets, XML-codierte Zeichenfolgen oder Arrays von Strukturen. In diesem Abschnitt werden diese Optionen erläutert.

Die folgende Tabelle zeigt Bereiche, in denen bei Verwendung einer der vier verschiedenen Argumentübergabemöglichkeiten besondere Sorgfalt erforderlich ist. Ein "X" stellt Bereiche dar, in denen Kompromisse verstanden und mit den Anforderungen jedes Projekts abgewogen werden müssen. Versuchen Sie, keine Argumentübergabeentscheidungen auf Komponentenbasis zu treffen. Die Vorteile eines konsistenten Programmiermodells während eines Projekts überwiegen bei weitem jeden Vorteil der Optimierung pro Methode oder pro Komponente unter allen außer den extremsten Umständen. Die Spalten werden in der Liste beschrieben, die der Tabelle folgt.

  Parallelität WAN Bereitstellung Komplexität
Eingabe Wert
Recordsets
X
X
X
XML
X
X
X
Arrays
X
X
X

Die vier Spalten definieren Bereiche, für die watch werden sollen, wenn diese Option zum Übergeben von Parametern verwendet wird.

  • Die Spalte Parallelität stellt die Notwendigkeit dar, einen Mechanismus zu codieren oder bereitzustellen, der Sperrbedingungen für Aktualisierungsvorgänge verwaltet. Da Methoden, die Speichervorgänge ausführen, Updates darstellen können, können Parallelitätsprobleme auftreten. Zwei Arten von Sperren sind weit verbreitet optimistisch und pessimistisch. Pessimistische Sperren verhindern, dass ein Benutzer Daten für die Aktualisierung erhält, während ein anderer Benutzer das Potenzial hat, ein Update durchzuführen. Die optimistische Sperrung unterstützt viel mehr Benutzer, indem sie gegen die Wahrscheinlichkeit handeln, dass zwei Benutzer dasselbe Dokument gleichzeitig aktualisieren würden. Die optimistische Sperrung erfordert eine Überprüfung, um festzustellen, ob die gespeicherten Daten mit den Daten zu dem Zeitpunkt übereinstimmen, an dem auf eine Kopie der Daten zur Änderung zugegriffen wurde. ADO-Recordsets bieten automatische Unterstützung für optimistische Sperren. Aktualisierungsszenarien mit Einzelzeilenparameterlisten bieten keine ausreichende Unterstützung für die Parallelitätsprüfung. XML leidet unter demselben Problem, da in XML-Daten kein Sperrbewusstsein vorhanden ist.
  • Die WAN-Spalte stellt Bedingungen dar, unter denen Übertragungskonflikte in einem WAN (Wide Area Network) auftreten können. Wenn das WAN nicht über genügend Kapazität verfügt, um alle Daten zu verwalten, die gleichzeitig verschoben werden, treten bei Anwendungsbenutzern Verzögerungen bei der Antwortzeit auf. Um eine optimistische Parallelität zu unterstützen, übergeben getrennte ADO-Recordsets zwei Kopien der Daten vom Server an den Client. Die zweite Kopie wird vom Client verwendet, um das kleinste Updaterowset zu bestimmen, das beim Commit einer Änderung zurückgegeben werden soll. Dies reduziert zwar den Datenverkehr von der Präsentationsebene zu den Daten, aber die zusätzliche Last der zweiten Kopie kann erheblich sein. Die Verwendung von Recordsets als einziges Mittel zum Übergeben aller Informationen führt daher dazu, dass doppelt so viele Daten zwischen Ebenen übergeben werden, wie erforderlich ist, es sei denn, das Updaterowset wird von einer Präsentationsebene an die Datenebene zurückgegeben.
  • Die Spalte Bereitstellung stellt Probleme im Zusammenhang mit der Datenübergabe dar, wenn spezielle Technologie sowohl auf der Aufrufer- als auch auf der Komponentenseite des Netzwerks erforderlich ist. Für die Verwendung von ADO-Recordsets müssen beispielsweise ADO-Komponenten sowohl auf dem Client als auch auf dem Server vorhanden sein. XML-Parser müssen auch auf beiden Seiten vorhanden sein, um zu vermeiden, dass Parser in Ihre Anwendungen programmiert werden müssen.
  • Die Spalte Komplexität wird für alle vier Optionen angegeben und ist eine Frage der Präferenz oder der vorherigen Programmiermodellerfahrung, die möglicherweise bereits in Ihrer Entwicklung organization festgelegt ist. Einige Leute empfinden die Parameterübergabe als umständlich und sind der Meinung, dass dies dem Programmierproblem zu viel Komplexität hinzufügt. Wenn Sie nachverfolgen, welche Parameter Sie behandeln, und sie alle in einem Bearbeitungsfenster sichtbar machen, kann dies zu einer logistischen Komplexität führen, die einige Entwickler als nicht verwaltbar empfinden.

Die Parameterübergabemethode kann auch Kompromisse aufweisen, z. B. die folgenden:

  • Parameter können das Verwalten mehrerer Argumente und Argumenttypen sowie die Entscheidung umfassen, wann es geeignet ist, ein Recordset zu einem Parameter zu machen.
  • ADO-Recordsets können hierarchische Beziehungen in Methodenparametern auf ein oder zwei Argumente reduzieren. Dies vereinfacht das Programmiermodell erheblich und unterstützt das Hinzufügen von Spalten zu einem späteren Zeitpunkt, aber auch die Informationshierarchie wird ausgeblendet. Um Informationen in ein ADO-Recordset zu stopfen und später zu extrahieren, müssen Sie die Namen jeder Spalte kennen oder die Spaltenreihenfolge kennen. Diese Situation kann die Komplexität für andere Komponenten- oder Anwendungsentwickler im Projekt erhöhen.
  • XML ist ein anderer Spin bei der oben erwähnten Komplikation der versteckten Hierarchie. Der Programmierer muss die Verwendung eines XML-Parsers verstehen, um Zugriff auf die Informationen zu erhalten, und häufig die Namen der einzelnen Elemente im Dataset kennen, bevor das Dataset gefunden werden kann.
  • Arrays von Strukturen erfordern ein gemeinsames Verständnis der Informationen, die von Aufrufern und Komponenten weitergegeben werden. Diese Notwendigkeit einer Karte, die zwischen zwei Systemelementen geteilt wird, kann zu Schwierigkeiten führen, wenn es um unterschiedliche Versionen von Komponenten geht. Obwohl sich die Methodensignatur möglicherweise nicht ändert, können Änderungen an den erwarteten Informationen dazu führen, dass aufrufende Programme inkompatibel werden.

Da die Komplexitätsprobleme, die mit allen vier Parameterübergabemethoden verbunden sind, so ähnlich sind, ist es fraglich, dass es eine erhebliche Vereinfachungsmöglichkeiten gibt, die mit einer einzelnen Auswahl verbunden sind.

Verwenden eines Factorymusters zum Übergeben von Daten

Ein wichtiger Entwurfspunkt ist die Benutzerfreundlichkeit. In dem Moment, in dem Sie beschlossen haben, ADO-Recordsets zu verwenden, um einen strukturierten Satz von Details zurück an die Präsentationsebene zu übergeben, haben Sie ein Komplexitätsproblem eingeführt. Programmierer der Präsentationsebene müssen die Struktur dieser Recordsets verstehen. Ein Problem mit größerer Komplexität kann auftreten, wenn Sie mehrere Details benötigen, damit ein Satz von Daten in einem Recordset übergeben werden kann. Zur Vereinfachung sollten Sie die Erstellung einer Recordset Factory-Methode in Erwägung ziehen, wenn Sie verlangen möchten, dass Daten in strukturierten ADO-Recordsets übergeben werden.

Die Recordset factory sollte ein leeres, aber beschreibbares, getrenntes Recordset an den Aufrufer zurückgeben. Für dieses Recordset sollten die richtigen Felder (Namen und Datentypen) bereits konfiguriert sein, sodass der aufrufende Client nicht wissen muss, wie das Recordset erstellt werden soll. Dieser Ansatz wird häufig als Factorymuster bezeichnet und ist ein gängiges Lösungsmuster, das die Notwendigkeit löst, ein Objekt einer bestimmten Komplexität zu erstellen, ohne die Nuancen der Erstellung kennen zu müssen.

Einfache Entwurfsentscheidungen wie die Auswahl desselben Parameternamens für dieselben Daten in jeder Methode, in der diese Informationen übergeben werden, machen es einfach, eine Methode zu betrachten und zu wissen, was erwartet wird. Sicherstellen, dass die Reihenfolge, in der ähnliche Argumente übergeben werden, in einer ganzen Familie von Methoden konsistent ist, bietet einen Komfortpunkt, der ein konsistentes Modell erzwingt.

Optimieren von Interaktionen zwischen der COM+-Geschäftslogikebene und der Datenebene