PDA

مشاهده نسخه کامل : codebehind چيست؟



Security
29-11-06, 19:37
بررسی مفهوم codebehind و مزايا و نحوه بکارگيری و پياده سازی آن به سه روش مختلف :
codebehind اصطلاحی است که به مجموعه کدهای برنامه ای که يک فرم وب (يا سرويس وب يا کنترل کاربری يا ديگر اشياء ASP.NET) استفاده می کند می گويند. اين کدها درون فايل ASPX (يا ASMX يا ASCX) نبوده بلکه درون فايل ديگری با پسوند aspx.cs-برای #C (برای VB.NET بصورت aspx.vb) قرار می گيرند. جداسازی کد برنامه از عبارات HTML در يک فرم وب دارای محاسن و مزيتهای بسيار زيادی است. برخی از اين مزيتها عبارتند از:
• امکان جداسازی تيمهای توليد يک سايت وب بدين صورت که طراحان صفحات می توانند بدون آنکه کاری به کدهای برنامه صفحه داشته باشند يا آسيبی به آن برسانند با عبارات HTML مربوطه کار کنند.
• حفاظت و امنيت برنامه
• پشتيبانی بسيار خوب محيط VS.NET (ويژوال استوديو دات نت) از اين مفهوم
• سرعت توليد سايتهای وب
• نگهداری آسان سايتها و برنامه های ايجاد شده

VS.NET تقريبا هيچگونه امکاناتی را جهت استفاده از بلوکهای <Script runar="server"> که مفهوم مقابل codebehind است را ندارد.

حال که با مزايای codebehind آشنا شديم، سوال بعدی اين است که اين مفهوم چگونه کار می کند؟ در ASP.NET همه چيز شئ يا object می باشد. در ASP.NET حتی يک صفحه ASPX بدون هرگونه کد و برنامه هم يک شئ می باشد که از کلاس System.Web.UI.Page به ارث گرفته شده است. هنگامی که صفحه مذکور برای اولين بار فراخوانی (اجرا) می شود محتويات آن صفحه توسط هسته ASP.NET کامپايل شده و نسخه کامپايل شده آن تا زمانی که تغييری در صفحه ايجاد نشده است، جهت فراخوانی های بعدی در سيستم cache می شود.

از آنجا که يک صفحه ASPX بصورت شئ عمل می کند لذا ما می توانيم بخوبی از مفهوم وراثت در برنامه نويسی شئ گرا بهره ببريم. بدين صورت که می توانيم کلاس پدر آن را بطور دلخواه تعريف و پياده سازی کنيم بشرطی که اين کلاس پدر خود بنوعی از کلاس System.Web.UI.Page به ارث گرفته شده باشد.

کلاس codebehind
بجای اينکه صفحه ASPX شما مستقيما از کلاس System.Web.UI.Page به ارث گرفته شود، صفحه شما می تواند از يک کلاس دلخواه ديگر بصورت زير به ارث گرفته شود:

<%@ Page Inherits="YourNamespace.NewPage" %>

بمنظور عمل نمودن عبارت فوق، کلاس NewPage بايد بصورت مستقيم يا غير مستقيم از کلاس System.Web.UI.Page به ارث گرفته شده باشد. هنگام فراخوانی صفحه فوق، هسته ASP.NET در شاخه bin يا اسمبلی سراسری cache شده (Global Assembly Cache) بدنبال کلاس NewPage می گردد و در صورتيکه آن را پيدا نکند خطائی را اعلام می کند. با استفاده از اين روش می توان يک کلاس پايه بدين منظور در سراسر يک برنامه يا سايت وب داشت بطوريکه همه صفحات از آن کلاس به ارث گرفته شوند. بعنوان مثال مجله الکترونيکی angryCoder از همين روش استفاده کرده است. بهرحال بيشتر برنامه ها از کلاس های متفاوتی جهت کلاس codebehind صفحات خود استفاده می کنند.

شما می توانيد فايلی را که محتوی codebehind شماست را به هسته ASP.NET معرفی کنيد. اين معرفی سبب می شود که ASP.NET خود بقيه کارهای لازم (کامپايل کردن فايل codebehind و قرار دادن حاصل آن که در اصل يک فايل dll است در شاخه bin برنامه) را انجام دهد. اين کار را با استفاده از مشخصه Src بصورت زير می توانيد انجام دهيد:

<%@ Page Src="NewPage.aspx.cs" Inherits="YourNamespace.NewPage" %>

اگر از VS.NET استفاده می کنيد بصورت پيش فرض مقدمات استفاده از codebehind برای شما بصورت زير فراهم شده است:

<%@ Page Codebehind="NewPage.aspx.cs" Inherits="YourNamespace.NewPage" %>

VS.NET کليه فايلهای codebehind را در قالب يک فايل dll يا اسمبلی کامپايل کرده و حاصل را در شاخه bin موجود در شاخه اصلی برنامه يا سايت قرار می دهد. دقت داشته باشيد که الويت مشخصه Src از مشخصه Codebehind بالاتر است و در صورت استفاده همزمان از آنها در دايرکتيو Page، فايل معرفی شده در عبارت Src بعنوان فايل codebehind در نظر گرفته می شود.

خلاصه
با توجه به مطالب فوق، سه روش جهت معرفی codebehind وجود دارد. روش اول بدين صورت است که با فرض موجود بودن dll مربوطه در شاخه bin، تنها به ذکر نام کلاس codebehind در عبارت Inherits اکتفا نمائيم. روش دوم استفاده از مشخصه Src جهت معرفی نام فايل codebehind است. اين روش سبب می شود تا ASP.NET با استفاده از کامپايلر JIT محتوای فايل codebehind را قابل استفاده نمايد. روش سوم که روش VS.NET است از مشخصه Codebehind استفاده می کند. اين روش همانند روش اول است با اين تفاوت که خود VS.NET کليه کارهای لازم را بصورت خودکار برای ما انجام می دهد.

منبع مقاله : Only the registered members can see the link

با تشکر .:: Saeid.Online ::.