Putting XMLHttpRequest in ein Factory

Geschäftsführer Laufzeit Behavioral Code

  

Problem Sie wollen effektiv zu verwalten und zu debuggen Ihrer Runtime-Verhaltens-Code. Theory Mit der eval Schlüsselwort oder die dynamische Zuweisung von Funktionen, die Eigenschaften von Objekten ist ein großer Teil der dynamischen Programmierung. Dynamische Programmierung beinhaltet Code, der ein Verhalten zur Laufzeit, oder Ausstellungen Verhaltens-Code. Behavioral-Code ist keine schlechte Idee, aber es hat für Debugging komplizierter zu machen. Das Hauptproblem bei der Verhaltenstherapie Code ist, dass der Debugger keine Ahnung, woher es Debugging hat. Lösung Es gibt mehrere Lösungen können Sie prüfen, hier sind sie in Kürze:

• Implementierung und Test-Driven Development und führen intensive Tests an eine inkrementelle Weise. Dadurch wird sonst zu Fehlern im Code Stück erzeugt, die keine Probleme werden. In diesem Artikel verwenden Rezepte Test-Driven Development Techniken, die Sie prüfen können, wie der Code funktioniert. Ich sehr empfehlen, dass Sie einen Moment, jetzt zu untersuchen, wie Code geschrieben ist, zu nehmen, wenn Sie dies nicht bereits getan haben. Werfen Sie einen Blick auf diese Dateien, zum Beispiel: / website / ROOT / ajaxrecipes / javascript / conventions.html, / website / ROOT / ajaxrecipes / javascript / proxy.html und / website / ROOT / ajaxrecipes / javascript / variablebehavior.html.

• Generieren Sie den Code in ein Puffer, der die HTML-Seite Textfeld gelagert wird. Nehmen Sie die gedumpten Code und fügen Sie ihn in eine HTML-Seite für die Ausführung. Die gedumpten Code enthält den Fehler, der gedebuggt werden kann. Diese Lösung ist nur sinnvoll, jedoch, wenn Sie sich mit drängenden Probleme und kann nicht die Quelle.

• Verwenden Sie einfache Grundsätze. Ich mag dynamischen und generierten Code so viel wie jeder andere, aber ich bleibe weg von Code, der zu klug ist und versucht, zu viele Probleme auf einmal lösen. Zum Beispiel habe ich in der Regel schreiben verbose Code und nicht kombinieren mehrere Operatoren in einer einzigen Anweisung .

• Verwenden Sie einen Debugger. Mozilla und Firefox sind recht ordentlich Debugger, und Sie sollten sie nutzen. Mit Microsoft Visual Studio 2005 ist es möglich, zu debuggen sehr kompliziert JavaScript-Code.

Putting XMLHttpRequest in eine Fabrik

Sie wollen XMLHttpRequest in eine Fabrik gebracht. Theory Wenn Sie mit XMLHttpRequest, ist das Problem, wie XMLHttpRequest instanziieren. Jeder Browser hat eine andere Art der Instanziierung XMLHttpRequest. Hier ist, wie Mozilla und die meisten anderen Browser verwenden Sie diesen Code (auch in Internet Explorer ab Version 7): var xmlhttp = new XMLHttpRequest (); verwenden Sie den folgenden Quellcode für Internet Explorer-Versionen vor 7: var xmlhttp = new ActiveXObject ( 'Microsoft.XMLHTTP'); Microsoft.XMLHTTP Der Puffer ist ein allgemeines Kennzeichen, da die angebotenen verfügbar Je nach Browser werden. Solution Die kurze Antwort auf das Problem ist, dass zu instanziieren XMLHttpRequest Sie verschiedene Techniken, die auf verschiedenen Browsern zu nutzen. Um das XMLHttpRequest-Objekt instanziieren, müssen Sie eine Abstraktion zu schaffen. Die Abstraktion kann eine Klasse oder eine Funktion, die aber Sie spielt keine Rolle. Was zählt ist, dass Sie eine Abstraktion zu schaffen oder mit der Umsetzung der Factory pattern.1 In der Fabrik-Muster Umsetzung, ist die größte Herausforderung zu identifizieren, welche Browser das Skript ausgeführt wird und dann die entsprechenden XMLHttpRequest Instanziierung. Die Bibliotheken jsolait, Prototype, Yahoo! Muster und Dojo Toolkit alle Umsetzung eines XMLHttpRequest Abstraktion, die in der gleichen Weise codiert ist. Um zu veranschaulichen, das Wesentliche, wie es kodiert die folgenden Quellcode, die von der Yahoo ist! Design Pattern Library (http://developer.yahoo.com/ypatterns).

createXhrObject: function (transactionId) (var obj, http; try (/ / Instanziiert XMLHttpRequest in Nicht-IE-Browsern und weist http. http = new XMLHttpRequest ();/ / Object Literal mit http und Eigenschaften obj id = (conn: http, TID: transactionId);) catch (e) (for (var i = 0; i http = new ActiveXObject (this._msxml_progid [i]);/ / Objekt mit http und Eigenschaften obj id = (conn: http, TID: transactionId)) catch Literal (e) ())) finally (return obj;))

Die Instanzen sind in einer Reihe von Versuchen und catch-Blöcken verpackt. Ein try-catch-Block und in JavaScript ist eine Ausnahme zu blockieren. Die Idee hinter dieser Form der Abstraktion ist, dass Sie die Hinrichtung mancher Quellcode zu versuchen, und wenn Sie es nicht etwas anderes machen. Die folgenden Schritte werden im Source-Code durchgeführt werden:

1. Geben Sie die erste Ausnahme zu blockieren.

2. Führen Sie das XMLHttpRequest Instanziierung mit dem Schlüsselwort new.

3. Wenn die Instanziierung funktioniert, dann ist der finally-Block erreicht ist.

4. Wenn die Instanziierung fehlschlägt, wird eine Ausnahme generiert und der catch-Block beginnt eine Schleife.

5. Die Schleife versucht, instanziieren Sie den Internet Explorer XMLHttpRequest mit verschiedenen Kennungen von der this._msxml_progid Datenelement referenziert.

6. Wenn das XMLHttpRequest-Objekt nicht instanziiert werden können, erfasst eine leere catch-Block die Ausnahme.

7. Egal was passiert, der finally-Block wird ausgeführt und gibt die Objekt-Instanz gespeichert in der Variable obj. Die Grundidee der Abstraktion ist es, den Code auszuführen, und falls der Browser nicht unterstützt die Funktionalität, wird eine Ausnahme generiert. Die Ausnahme wird abgefangen und führt zu einer unterschiedlichen Ausprägung Sequenz zu starten. Was beunruhigt mich bei diesem Code ist, dass es nicht versucht, herauszufinden, was unterstützt wird, sondern nutzt JavaScript Ausnahmen. Da die Umsetzung steht, ist eine Ausnahme für amajority der Fälle erzeugt. Dies liegt daran, dass zum Zeitpunkt des Schreibens dieses Artikels, auf dem Internet Explorer einen Marktanteil von mehr als 80%. Dies bedeutet, dass der Versuch, XMLHttpRequest instanziieren mit dem Schlüsselwort new wird nicht funktionieren und eine Ausnahme zu generieren. Die alternative Möglichkeit der Instanziierung XMLHttpRequest von der Bibliothek Jaxson verwendet wird, wie in den Artikeln beschrieben Ajax in Action (Manning, 2005) und Professional Ajax (Wrox, 2006). Die Technik gezeigt, in Ajax in Action ist perfect2 und wird von Jaxson wie folgt umgesetzt.

 Quelle: / website / root / scripts / communications.js if (window.ActiveXObject) (FactoryXMLHttpRequest = function () (return new ActiveXObject ( "Microsoft.XMLHTTP");) else if (window.XMLHttpRequest) (FactoryXMLHttpRequest = function () (return new XMLHttpRequest ();)) throw new Error ( "konnte nicht initialisiert werden XMLHttpRequest");

Hinweis Um das XMLHttpRequest-Objekt im Internet Explorer, eine einzige Zeile Quellcode instanziieren verwendet wird. Im Gegensatz dazu verwenden andere Bibliotheken mehrfache Instantiierung Versuche. Diese mehrfache Instantiierung Versuche sind nicht erforderlich, da je der MSDN-Dokumentation ist es nur notwendig, um die Microsoft.XMLHTTP Zeichenfolge in Internet Explorer Version 6 verwenden und unten. Instanziieren Wenn das XMLHttpRequest-Objekt, halten Sie die folgenden Punkte beachten:

• Sie müssen eine Abstraktion zu verwenden, weil die Menschen weiterhin zu älteren Versionen von Internet Explorer für einige Zeit zu verwenden. So werden Sie immer noch eine Notwendigkeit, um herauszufinden, welche Instanziierung Technik zu verwenden.

• Verwenden Sie keine Ausnahmen für die erwartete Funktionalität zu testen. Doing so, ohne nachzudenken Ausnahmen werden dazu führen, ausgeblendet werden.

• Der bessere Weg ist, um Funktionalität zu testen und dann das XMLHttpRequest-Instanz zu.

• Alles, was gesagt, wenn Sie ein vordefiniertes Instanziierung verwenden, die benutzt Ausnahmen, wie die Yahoo! Design Pattern Library, es ist nicht das Ende der Welt. Der Punkt, der dieses Rezept ist es, eine bessere Lösung für die Verwendung, soweit möglich vorzuschlagen.

Ein Artikel eingereicht von Sonja Lande


Disclaimer:Unsere Website ist nicht verantwortlich für den Inhalt dieses Artikels. Webarticles ist eine kostenlose Informationsquelle.
Wichtig: Dieser Artikel "Putting XMLHttpRequest in ein Factory" wurde durch ein automatisches Software übersetzt. Wir fühlen uns leid für alle Rechtschreibfehler, die möglicherweise aufgetreten sind. Vielen Dank für Ihr Verständnis.


Online: 452 users browsing the articles directory