PDA

View Full Version : مقاله: Namespace چیست؟ codebehind چيست؟



baran_mehr
سه شنبه 02 شهریور 1389, 17:38 عصر
Namespace چيست؟

ارائه تعريف و مفهوم Namespace با اشاره به namespaceهای موجود در چارچوب دات نت و نحوه بکارگيری و تعريف آنها در برنامه.يک نکته مهم که در زمان استفاده از NET Framework. بايد به آن توجه داشت آن است که فضانام (namespace يا نامکده) ها در ساختمان برنامه کاربردی قرار دارند. فضانام يک طرح نامگذاری منطقی برای گروه بندی کلاس های مرتبط است. اين طرح مانع از آن می شود تا کلاس هايی که برای متدها و خصوصيات از يک شناسه يکسان استفاده می کنند تداخل داشته باشند.

مثلا NET Framework. برای گروه بندی تايپ ها به مقوله های منطقی عملکرد، از قبيل چارچوب برنامه کاربردی ASP.NET، از يک طرح نامگذاری سلسله مراتبی استفاده می کند. ابزارهای طراحی از فضانام ها با هدف تسهيل مرور و ارجاع تايپ ها در برنامه بهره برداری می کنند. مثلا فرض کنيد در حال نوشتن کد زير هستيد:


Public Class NewClass
[Procedures and Functions]
End Class

Public Class NewClass
[Procedures and Functions]
End Class

اين کد به خطا منجر می شود چون کامپايلر راهی برای تشخيص کلاس ها از يکديگر ندارد. برای غلبه بر اين مشکل می توان از يک فضانام استفاده کرد که اجازه می دهد دو کلاس همنام در صفحه با هم وجود داشته باشند. قطعه برنامه زير تعريف اين دو کلاس در فضانام های منحصر بفرد را نشان می دهد:


Namespace One
Public Class NewClass
[Procedures and Functions]
End Class
End Namespace

Namespace Two
Public Class NewClass
[Procedures and Functions]
End Class
End Namespace

در اين کد برخوردی بين دو کلاس با نام NewClass وجود ندارد چون هر کدام در يک فضانام جداگانه قرار داده شده است. کلاس اول را می توان با استفاده از ترکيب One.NewClass صدا زد، حال آنکه کلاس دوم را می توان با استفاده از ترکيب Two.NewClass صدا زد.

شما می توانيد در فضانام های خود از يک ساختار سلسله مراتبی استفاده کنيد. قرار دادن اشياء مشابه تحت زيرعنوانها در يک فضانام مشترک تشخيص هدف فضانام را آسانتر می کند، و در عين حال باعث می شود برنامه به مراتب شئ گراتر شود.

برای توضيح فضانام می توان ساختار فايل و دايرکتوری (کشو، فولدر) در يک کامپيوتر را در نظر گرفت. در اين مثال کلاس ها به مثابه فايل ها و فضانام ها مانند دايرکتوری ها هستند. بديهی است همانگونه که می توانيم دايرکتوريهای تو در تو داشته باشيم، فضانام ها هم در حاليکه کلاس ها را در خود جای داده اند می توانند بصورت تو در تو باشند.

فضانام ها در ساخت برنامه های کاربردی ASP.NET نقش مهمی ايفا می کنند. خوشبختانه لازم نيست برای همه اشيايی که می توانند به وسيله صفحات ASP.NET مورد استفاده قرار بگيرند سيستم طبقه بندی فضانام ايجاد کنيد. مايکروسافت اين مساله را برای شما حل کرده است. دو فضانام ريشه، و فضانامهای فرزند آنها را می توان وارد صفحات ASP.NET خود کرد. اولی System ناميده می شود، و دومی Microsoft نام دارد. اين فضانامها با جزئيات بيشتر در ادامه مورد بحث قرار گرفته اند.

فضانام System
فضانام System فضانام اصلی برای ساخت ASP.NET و همه برنامه های کاربردی ديگر مبتنی بر NET Framework. است. هر چيزی که در برنامه کاربردی شما قابل انجام باشد از طريق فضانام System کنترل می شود. به عنوان مثال کنترل آرايه، عمليات رياضی، و تبديل نوع داده ها از طريق فضانام System و فضانامهای فرزند آن اداره می شوند. ۹ فضانام پيش فرض (فضانام System و ۸ فرزند آن) وجود دارند که به صورت خودکار به صفحات ASP.NET اضافه می شوند:

• System
• System.ComponentModel.Design
• System.Data
• System.Drawing
• System.Web.SessionState
• System.Web
• System.Web.UI
• System.Web.UI.WebControls
• System.Web.UI.HTMLControls

هشت فضانام (بجز فضانام System) در زمان ساخت Visual Studio.NET يا VS.NET بطور خودکار به صفحات ASP.NET وارد می شوند. اين فضانام ها در زير به اختصار شرح داده شده اند.

• System.ComponentModel.Design: دربرگيرنده کلاس هايی است که می توان از آنها برای طراحی پشتيبانی سفارشی اجزا و زمان طراحی و دسترسی به سرويس های تامين شده توسط معماری NET Framework. استفاده کرد.

• System.Data: امکان دسترسی به کلاس ها و رابطهايی را فراهم می کند که معماری ADO.NET را برای دسترسی به داده های عمومی تشکيل می دهند.

• System.Drawing: دربرگيرنده کلاس ها و رابطهايی است که عملکرد گرافيکی اوليه را تامين می کنند. فضانام System.Drawing نيز از طريق فضانام System.Drawing.Drawing2D و System.Drawing.Imaging عملکرد پيشرفته تری فراهم می کند.

• System.Web: کلاس ها و رابطهايی تامين می کند که ارتباط مرورگر/سرويس دهنده را امکان پذير می کنند. اين فضانام دربرگيرنده کلاس HTTPRequest (فراهم کننده اطلاعات وسيعی درباره درخواست HTTP جاری)، کلاس HTTPResponse (فراهم آورنده امکان دسترسی به فرآيندها و يوتيليتی های سمت سرويس

دهنده) است.

• System.Web.SessionState: فراهم کننده کلاس ها و متدهايی برای مديريت وضعيت جلسات کاری می باشد.

• System.Web.UI: فراهم کننده کلاس ها و رابطهايی برای رابط واسط کاربر برنامه کاربردی ASP.NET است که موجب می شوند برنامه کاربردی با سطوح مختلف صفحه، ارتباط برقرار کند. کلاس اصلی اين فضانام، کلاس Page می باشد که دربرگيرنده همه خصوصيتها، متدها، و سازنده های صفحه است. اشياء اصلی Active Server Page زير خصوصيتهايی در کلاس Page هستند: Application ،Response ،Request ،Server و Session.

• System.Web.UI.HTMLControls: کلاس هايی برای عناصر HTML استاندارد، شامل فرم ها، کنترل های ورودی، آنکور، جداول، قسمتهای متنی، و غيره فراهم می کند. اين کنترلها همانند تگهای عادی HTML هستند با اين تفاوت که داری دو صفت runat="server" و id="controlname" می باشند.

• System.Web.UI.HTMLControls: برای کنترلهای سرويس دهنده ای که شبيه کنترلهای HTML هستند ولی انعطاف پذيری بيشتر و عملکرد پيچيده تری دارند کلاس هايی را تامين می کند.



برخی فضانام های مهم و پرکاربرد ديگر به شرح زير می باشند.

• System.IO: دربرگيرنده رابطها و کلاس هايی است که امکان خواندن و نوشتن همگام و غيرهمگام فايل ها و جريانهای داده را فراهم می کنند.

• System.Data.OleDb: امکان دسترسی به کلاس ها و رابطهای مخصوص دسترسی به يک منبع داده از طريق ADO را فراهم می کند.

• System.Data.SqlClient: امکان دسترسی به کلاس ها و رابطهای مخصوص دسترسی به داده های خاص Microsoft SQL Server از طريق ADO را فراهم می کند.

• System.Web.Security: امکان دسترسی به کلاسها و رابطهای مخصوص امنيت برنامه کاربردی ASP.NET را فراهم می کند. دستيابی به رمزنگاری، مجوزها، و تنظيمات خط مشی برنامه کاربردی در اين فضانام قرار می گيرند.

• System.XML: امکان دسترسی به کلاسها و رابطهای مخصوص پردازش اسناد XML را فراهم می کند.



فضانام Microsoft
علاوه بر فضانام System که در چارچوب NET. يافت می شود، مايکروسافت چند فضانام اضافه کرده است که برای زبان برنامه سازی ای که می خواهيد از آن در برنامه کاربردی خود استفاده کنيد عملکرد لازم را تامين می کنند. ممکن است شما بصورت مستقيم با اين فضانام کاری نداشته باشيد.

• Microsoft.VisualBasic: اين فضانام محتوی CLR يا زمان اجرای Visual Basic.NET است. از اين زمان اجرا با زبان Visual Basic.NET استفاده می شود. اين فضانام همچنين دربرگيرنده کلاس هايی است که از کامپايل و توليد کد با استفاده از زبان ويژوال بيسيک پشتيبانی می کنند.

• Microsoft.CSharp: اين فضای نام دربرگيرنده کلاس هايی است که از کامپايل و توليد کد با استفاده از زبان #C پشتيبانی می کنند.

• Microsoft.JScript: اين فضای نام دربرگيرنده کلاس هايی است که از کامپايل و توليد کد با استفاده از زبان JScript پشتيبانی می کنند.

• Microsoft.Win32: کلاسها و رابطهای مورد نياز برای کار با کليدها و hiveهای رجيستری را تامين می کند.



با وجود آنکه فضانام ها از قبل تامين می شوند، می توانيد برای استفاده از برنامه کاربردی ASP.NET فضانام های خود را ايجاد کنيد. برای هر کلاس ايجاد شده توسط سازنده يک فضانام توليد می شود.

استفاده از فضانام ها در صفحات ASP.NET
دو راه برای افزودن فضانام به برنامه کاربردی ASP.NET وجود دارد. از شبه دستور (Directive) صفحه Import@ برای صفحات ASPX و از کلمه کليدی Imports برای افزودن فضانام به برنامه codebehind مربوطه در ويژوال بيسيک استفاده می شود و برای زبان #C از دستور using استفاده می گردد. قطعه برنامه زير ترکيب نحوی برای افزودن فضانام System.Web.UI.WebControls به صفحه ASP.NET شما است.


<%@ Import namespace = "System.Web.UI.WebControls" %>

همين فضانام را در قسمت codebehind بصورت زير به برنامه اضافه می کنيم.


Imports System.Web.UI.WebControls (vb.net)
using System.Web.UI.WebControls; (C#)

( به تفاوت Import و Imports دقت کنيد )

در صورتيکه می خواهيد چند فضانام را به صفحه ASP.NET خود و يا صفحه codebehind اضافه کنيد بايد هرکدام را جداگانه اضافه کنيد. بعنوان مثال، برای افزودن فضانام System.Web.UI.HTMLControls به صفحات با فضانام های موجود، درست بعد از آخرين عبارت مهم به خط بعد برويد و Imports System.Web.UI.HTMLControls را اضافه کنيد. به محض آنکه .Imports System را تايپ کنيد، VS.NET فهرستی از فضانام ها را ظاهر می کند، و می توانيد به سادگی فضانام مورد نظر را با ماوس برگزينيد. امتياز اين فهرست آن است که مجبور نيستيد همه فضانام های NET. را از حفظ بدانيد، بلکه می توانيد به آسانی از فهرست انتخاب کنيد. اين ويژگی با عنوان Intellisense شناخته می شود. برای صفحات ASP.NET از اين ترکيب استفاده کنيد:


<%@ Import namespace = "System.Web.UI.WebControls" %>
<%@ Import namespace = "System.Web.UI.HTMLControls" %>
<%@ Import namespace = "namespace name" %>
...
برای صفحات codebehind ويژوال بيسيک از اين ترکيب استفاده کنيد:


Imports System.Web.UI.WebControls
Imports System.Web.UI.HTMLControls
Imports namespace
...
(برگرفته از کتاب آموزشی ASP.NET از انتشارات کانون نشر علوم)



--**-*-*-*-*-*-*-*-*-*-*-*-*-*-**--

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 کليه کارهای لازم را بصورت خودکار برای ما انجام می دهد.
:تشویق: