سؤال

اراجع سلفي رمز انظر استخدام "طلب" النطاق في كثير من الأحيان.ما هي المناسبة الاستخدام هذا النطاق?

هل كانت مفيدة؟

المحلول

هناك العديد من المجالات التي تتوفر على أي جزء من الكود الخاص بك:الدورة, العميل, كوكي, تطبيق, و الطلب.وبعضها من غير المستحسن لاستخدامها في طرق معينة (أي ، باستخدام طلب أو نطاق التطبيق داخل العلامات المخصصة أو مركبات الكربون الكلورية فلورية ؛ هذا هو اقتران, يخالف التغليف المبادئ و تعتبر ممارسة سيئة) ، وبعض الأغراض الخاصة:ملف تعريف الارتباط هو استمر على جهاز العميل المادية ملفات تعريف الارتباط ، الدورة راقب المتغيرات الخاصة بالمستخدم و تنتهي مع جلسة المستخدم على الموقع.

إذا كان المتغير غير المرجح للغاية أن تغيير (ثابت لجميع المقاصد والأغراض) ويمكن أن يكون ببساطة تهيئة على بدء تشغيل التطبيق و لم يكتب مرة أخرى, عموما يجب عليك أن تضعها في نطاق التطبيق لأن هذا لا يزال قائما بين كل مستخدم و كل دورة.عندما تنفذ بشكل صحيح هو مكتوب مرة واحدة وقراءة N مرات.

سليم تنفيذ تطبيق المتغيرات في التطبيق.cfm قد تبدو مثل هذا:

<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>

علما أن وجود متغير في نطاق التطبيق يتم فحص قبل وبعد قفل ، بحيث إذا اثنين من المستخدمين إنشاء شرط سباق في بدء تشغيل التطبيق ، فقط واحد منهم في نهاية المطاف إعداد التطبيق المتغيرات.

الاستفادة من هذا النهج هو أنه لن باستمرار تحديث هذه المخزنة المتغيرات على كل طلب ، وإضاعة الوقت المستخدم و الخادم دورات المعالجة.المفاضلة هو أنه قليلا مطول ومعقد.

هذا تم تبسيطها إلى حد كبير مع إضافة تطبيق.مركبات الكربون الكلورية فلورية.الآن يمكنك تحديد المتغيرات التي يتم إنشاؤها على بدء تشغيل التطبيق و لا داعي للقلق حول تأمين التحقق من وجود كل هذه الاشياء متعة:

<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>

لمزيد من المعلومات حول التطبيق.بما في ذلك مركبات الكربون الكلورية فلورية كل مختلف المهام الخاصة متوفرة و كل التفاصيل الصغيرة حول كيفية استخدامها ، أوصي هذا المنصب على ريمون كامدن بلوق.

لتلخيص, طلب نطاق متاح في كل مكان في التعليمات البرمجية الخاصة بك, ولكن هذا لا يجعلها بالضرورة "الحق" إلى استخدامه في كل مكان.وهناك احتمالات بأن سلفكم كان استخدامه لكسر التغليف ، و التي يمكن أن تكون مرهقة ريفاكتور بها.قد تكون أفضل حالا ترك الأمر كما هو, ولكن فهم والتي النطاق هو أفضل وسيلة للحصول على الوظيفة سوف تجعل بالتأكيد رمز المستقبل أفضل.

نصائح أخرى

هذا هو السؤال شخصي جدا و البعض قد يجادل بأن حتى انها ليست ابدا في "الاقتضاء" استخدام طلب نطاق في الحديث كولد فيوجن التطبيقات.

مع تنويه من الطريق ، دعونا نحدد ما طلب نطاق و حيث أنه سوف يكون من المفيد.

طلب نطاق المطلق النطاق العالمي في واحد كولد فيوجن صفحة الطلب.ليس مشتركة النطاق ، مثل تطبيق الخادم والعميل الدورة نطاقات, حتى قفل ليس من الضروري أن تجعل threadsafe (إلا إذا كنت تفرخ المواضيع عامل من طلب واحد باستخدام CF8 هو CFTHREAD الوسم).عالمي نطاق, هو وسيلة مريحة للغاية أن تستمر المتغيرات من خلال أي مستوى في طلب المكدس دون الحاجة إلى تمرير من الأم إلى المتصل.هذا كان طريقة شائعة جدا إلى قائمة المتغيرات من خلال متداخلة أو متكررة العلامات المخصصة في السن را التطبيقات.

نلاحظ أنه في حين أن العديد من التطبيقات استخدام هذا النطاق إلى مخزن التطبيق على مستوى المتغيرات (إعدادات التكوين ، على سبيل المثال) الكبير (وأحيانا خفية) الفرق بين طلب نطاق نطاق التطبيق هو أن قيمة نفس الطلب-راقب متغير يمكن أن تختلف بين فرد صفحة الطلبات.

أعتقد أن سلفكم تستخدم هذا النطاق كوسيلة مريح مجموعة من المتغيرات التي تحتاج إلى البقاء على قيد الحياة في القفز بين مغلفة أو متداخلة وحدات من المدونة دون الحاجة إلى تمرير من حولهم صراحة.

حسنا, لقد أردت فقط أن أعلق على التعليمات البرمجية الخاصة بك.يرجى أن يغفر لي إذا يبدو أنني مجنون.ولكن كنت بالفعل التحقق من أن structKeyExists في البداية.منذ كنت أعرف أنه سيكون صحيحا ، فإنه لن يكون له معنى لتشغيل فحص آخر.حتى نسختي من سيكون هذا...ولكن هذا مجرد لي.


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

حسنا.

لقد تم كتابة شركتي الإطار التي سيتم استخدامها لتشغيل موقعنا.

يمكنني استخدام الطلب المتغير على مجموعة معينة من البيانات التي من شأنها أن تكون متاحة إلى غيرها من مركبات الكربون الكلورية فلورية كان علي أن أفعل هذا حتى تكون البيانات المتاحة من خلال التطبيق دون الحاجة باستمرار تمر في البيانات.بصراحة أنا أعتقد أن استخدام الطلب ، وتطبيق طالما دالة ثابتة مكون ثم يجب أن لا يكون لديك مشكلة.لست متأكدا إذا كنت مخطئا في تفكيري مع هذا ولكن بمجرد الإفراج إطار سنرى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top