Frage

Schon über mein Vorgänger code und siehe Verwendung von "Anfrage" - Bereich Häufig.Was ist die geeignete Verwendung der in diesem Bereich?

War es hilfreich?

Lösung

Es gibt mehrere Bereiche, die sind für jeden Teil Ihres Codes:Sitzung, Client, Cookie, Anwendung und Anforderung.Einige sind nicht ratsam, verwenden Sie in gewisser Weise (d.h.mithilfe Anfrage oder Anwendungsbereich in Ihrem Benutzerdefinierten Tags oder FCKW;dies ist Kupplung, verstößt gegen die Prinzipien der Kapselung und wird als schlechte Praxis ist), und einige haben Besondere Zwecke:Cookie ist persistent auf dem client-Rechner als physische cookies und Session-scoped-Variablen sind benutzerspezifisch und läuft mit der Sitzung des Benutzers auf der website.

Wenn eine variable ist äußerst unwahrscheinlich, zu ändern (Konstante für alle Absichten und Zwecke) und kann einfach initialisiert werden auf Anwendung starten und nie wieder geschrieben, in der Regel, Sie sollte setzen es in die Anwendungs-Bereich, denn dieser speichert Sie zwischen jedem Benutzer und jeder Sitzung.Wenn Sie richtig umgesetzt wird einmal geschrieben und gelesen N-mal.

Eine ordnungsgemäße Durchführung der Anwendung von Variablen in der Anwendung.cfm könnte wie folgt Aussehen:

<cfif not structKeyExists(application, "dsn")>
    <cflock scope="application" type="exclusive" timeout="30">
        <cfif not structKeyExists(application, "dsn")>
            <cfset application.dsn = "MyDSN" />
            <cfset foo = "bar" />
            <cfset x = 5 />
        </cfif>
    </cflock>
</cfif>

Beachten Sie, dass die Existenz der Variablen, die in den Anwendungsbereich geprüft wird, bevor und nachdem die Sperre, so dass, wenn zwei Benutzer erstellen Sie eine race-Bedingung, die beim Start der Anwendung, nur eine von Ihnen wird am Ende die Einstellung der Variablen.

Der Vorteil dieses Ansatzes ist, dass es nicht ständig aktualisieren Sie diese gespeicherten Variablen auf jede Anfrage, verschwenden die Benutzer-und server-Verarbeitung-Zyklen.Der trade-off ist, dass es ein wenig verbose und Komplex.

Diese wurde stark vereinfacht, mit dem Zusatz von Anwendung.cfc.Jetzt können Sie angeben, welche Variablen erstellt beim starten der Anwendung und nicht haben, um sorgen über die schließ-und Kontrolle für die Existenz und alle, die Spaß Zeug:

<cfcomponent>
    <cfset this.name = "myApplicationName" />

    <cffunction name="onApplicationStart" returnType="boolean" output="false">
        <cfset application.dsn = "MyDSN" />
        <cfset foo = "bar" />
        <cfset x = 5 />
        <cfreturn true />
    </cffunction>
</cfcomponent>

Für mehr Informationen über die Anwendung.cfc-einschließlich aller diverse Sonderfunktionen zur Verfügung und jedes kleine detail über das, was und wie Sie es verwenden, Ich empfehle in diesem Beitrag Raymond Camden-blog.

Um zusammenzufassen, anforderungsbereich ist überall in Ihrem code, aber das bedeutet nicht unbedingt "richtig" zu verwenden es überall.Die Chancen sind, dass Ihr Vorgänger war es zu brechen, Kapselung, und das kann lästig sein, umgestalten heraus.Sie können am besten ab und läßt es wie es ist, aber das Verständnis welchem Umfang ist das beste Werkzeug für den job wird auf jeden Fall Ihre Zukunft-code besser.

Andere Tipps

Dies ist eine sehr subjektive Frage, und einige würden sogar argumentieren, dass es ist niemals "angemessen" zu den anforderungsbereich verwenden, die in modernen ColdFusion-Anwendungen.

Mit diesem Haftungsausschluss aus dem Weg, lassen Sie uns definieren, was der anforderungsbereich ist und wo es nützlich wäre.

Der anforderungsbereich ist die absolute Globale Reichweite in einem einzigen ColdFusion-Seite anfordern.Es ist nicht freigegebenen Bereichs, wie Anwendungs -, server -, client-und session-Bereiche, so dass die Verriegelung ist nicht erforderlich, um Sie threadsicher sind (sofern Sie spawn worker-threads aus einer einzigen Anfrage über CF8 s CFTHREAD tag).Global, es ist eine sehr bequeme Möglichkeit zur Speicherung von Variablen durch jede Ebene in der Anfrage Stapel, ohne Sie zu übergeben von den Eltern an die Anrufer.Dies war eine sehr verbreitete Art und Weise zu bestehen Variablen durch verschachtelte oder rekursiven Benutzerdefinierten Tags in älteren CF-apps.

Beachten Sie, dass viele Anwendungen diesen Bereich verwenden, um die store-Anwendung-level-Variablen (Konfigurations-Einstellungen zum Beispiel), die großen (und manchmal feine) Unterschied zwischen den anforderungsbereich und der Anwendungsbereich ist, dass der Wert der gleiche request-scoped variable kann, unterscheiden sich zwischen den einzelnen page requests.

Ich würde vermuten, dass Ihr Vorgängermodell diesem Bereich als ein Mittel, um bequem von Variablen, die nötig ist, um zu überleben den Sprung zwischen gekapselt oder geschachtelte Einheiten von code, ohne Sie zu übergeben um explizit.

Okay, ich wollte nur einen Kommentar zu Ihrem code.Bitte verzeihen Sie mir, wenn ich scheine verrückt.Aber Sie bereits bestätigt, dass die structKeyExists am Anfang.Seit Sie weiß, es wird wahr sein, es würde keinen Sinn machen, führen Sie einen weiteren check.Also meine version davon wäre dies...Aber das ist nur mir.


<cfif not structKeyExists(application, "dsn")>
    <cflock scope="application" type="exclusive" timeout="30">
            <cfset application.dsn = "MyDSN" />
            <cfset foo = "bar" />
            <cfset x = 5 />
    </cflock>
</cfif>

Okay.

Ich Schreibe meine Unternehmens-framework, das verwendet wird, um die macht unserer Website.

Ich verwenden Sie das Anfrage-variable festlegen, dass bestimmte Daten, die für die anderen FCKW-ich musste das tun, so würden die Daten während der Anwendung, ohne die Notwendigkeit, ständig passieren in den Daten.Ich glaube ehrlich, dass über Anforderung und Anwendung, solange seine statische Funktion Komponente, dann sollten Sie nicht ein problem haben.Ich bin mir nicht sicher, ob ich falsch bin, in meinem denken, aber sobald ich release die Rahmen werden wir sehen.

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