بررسی مدل برنامه نویسی مبتنی بر رويداد در وب New Page 1



ساير




 

 

 

SAKHA RAVESH CO.

 ا مروز

 سه شنبه  5  ارديبهشت  1396  2017  Apr.  25   Tuesday ToDay
صفحه اصلی  مقالات نکته هادايره المعارف خودآموزها | تازه ها خود آزمون ها    
  نسخه قابل چاپ  

    5 4 3 2 1 

 عنوان

 نويسنده

  مشاهده

 تعداد آراء

 امتياز

 برنامه نویسی مبتنی بر رويداد در وب ( بخش اول )

 مديريت وب

16549

30

2.8

با توجه به جایگاه داده در عصر حاضر و  لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر  روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و  خدمات خود  را از طریق  سایت www.fabak.ir  به مخاطبان محترم عرضه می نماید

 

برنامه نويسی مبتنی بر رويداد در وب ( بخش اول )

ASP.NET ، با ارائه يک مدل برنامه نويسی مبتنی بر رويداد ، تحولات  مهمی را در خصوص طراحی و پياده سازی برنامه های وب ، ايجاد نموده است . برنامه نويسی مبتنی بر رويداد ايده جديدی نبوده و تاکنون شاهد استفاده از آن در سيستم های متعددی بوده ايم. مثلا" بخش رابط کاربر( اينترفيس )  سيستم عامل ويندوز ، يک محيط مبتنی بر رويداد است که صرفا" پس از تحقق يک رويداد،عملياتی انجام خواهد شد .پس از بروز يک رويداد و تشخيص آن، برنامه مربوطه فعال و مسئوليت پاسخگوئی به رويداد را برعهده خواهد گرفت . مثلا" زمانی که بر روی يک آيکون موجود بر روی Desktop کليک نموده  و يا منوی Start ، فعال می گردد ، يک رويداد ايجاد و برنامه مرتبط با آن فعال می گردد.ASP.NET با وضعيتی مشابه آنچه گفته شد با رويدادها برخورد می نمايد .
در فرم های وب ASP.NET که مسئوليت ارائه بخش رابط کاربر برنامه های وب را برعهده دارند ، رويدادها دارای جايگاهی خاص بوده و به محض ايجاد يک رويداد ، کد مرتبط با آن اجراء می گردد.با استفاده از امکانات ارائه شده در HTML ، امکان اجرای حجم اندکی از کدهای نوشته شده سمت سرويس گيرنده نيز وجود خواهد داشت . ASP.NET با ارائه مفهوم جديدی با نام Postback ، اطلاعاتی اضافه را به منظور انجام پردازش های لازم برای سرويس دهنده ارسال می نمايد . بدين ترتيب، پس از ايجاد يک رويداد ، اطلاعات مورد نياز به منظور پردازش رويداد مربوطه، برای سرويس دهنده ارسال می گردد. ويژگی فوق ،پتانسيل های متعددی را در اختيار برنامه نويسان وب ، قرار می دهد . مثلا" در مواردیکه  کاربران اقدام به درج داده در يک TextBox نموده و يا يکی از اقلام اطلاعاتی موجود در يک ليست را انتخاب می نمايند ، امکان نگهداری و بخاطر سپردن اطلاعات موجود در يک فرم وب در زمان حرکت بين صفحات متعدد ، وجود خواهد داشت.مدل برنامه نويسی مبتنی بر رويداد ارائه شده در ASP.NET ، صرفا" محدود به اين امکانات نبوده و می توان کدهای مورد نياز را در توابع و يا برنامه های جانبی مستقر و در زمان بروز يک رويداد، آنان را اجراء نمود.
در اين مقاله به بررسی موارد زير خواهيم پرداخت :

  • رويداد چيست ؟
  • مدل مبتنی بر رويداد چيست ؟
  • بررسی رويدادهای عمومی ASP.NET
  • رويدادهای HTML
  • رويدادهای کنترل های سرويس دهنده ASP.NET
  • بررسی کنترل Button در ASP.NET
  • نحوه پردازش يک رويداد از طريق کدهای نوشته شده سمت سرويس گيرنده
  • تاثير مدل برنامه نويسی مبتنی بر رويداد در ايجاد برنامه های وب

رويداد چيست ؟
به منظور آشنائی با مفهوم يک رويداد در دنيای برنامه نويسی ، اجازه دهيد با يک مثال در دنيای واقعی کار خود را آغاز نمائيم :
فرض کنيد، کارمند بخش فروش يک شرکت به منظور دريافت اطلاعات از دو روش تلفن و نامه الکترونيکی ، استفاده می نمايد.به صدا در آمدن زنگ تلفن نشاندهنده تحقق يک رويداد بوده که می بايست به آن پاسخ داده شود. کارمند مورد نظر ،  بروز رويداد را تشخيص و با برداشتن گوشی تلفن و پس از آگاهی از نوع درخواست  ، عکس العمل لازم را انجام می دهد.( آگاهی از درخواست متقاضی ، ثبت سفارش ، ارسال کالای مورد نياز ) .
کارمند مورد نطر، می تواند از طريق Email  نيز اخباری را نظير سياست های فروش از مدير خود، دريافت نمايد. مثلا" مدير بخش مربوطه می تواند با ارسال يک Email به وی اعلام نمايد که قيمت يک کالای خاص افزايش يافته است. پس از ايجاد رويداد فوق ، کارمند مورد نظر می تواند واکنش لازم به منظور برخورد با رويداد را با هر روشی که خود می داند ، انجام دهد . مثلا" می تواند با مشتری مورد نظر تماس گرفته و به وی بگويد : " متاسفيم ، شما می بايست يک مبلغ اضافه ديگر بابت خريد اين کالا را پرداخت نمائيد " و يا می تواند در پاسخ به مدير خود بگويد :  " ما هم اينک نيز بابت فروش اين کالا پول زيادی را از مشتری گرفته و نيازی به افزايش قيمت کالا نمی باشد " . (نحوه برخورد با يک رويداد ، به نوع آن بستگی خواهد داشت ).

چرخه حيات يک رويداد را می توان به سه بخش زمانی خاص تقسيم نمود :

  • تحقق رويداد ( به صدا در آمدن  زنگ تلفن )
  • تشخيص رويداد ( شنيدن صدای زنگ تلفن  )
  • پردازش رويداد  ( پاسخ به تلفن )

در سيستم عاملی نظير ويندوز ، رويدادها با وضعيتی مشابه آنچه اشاره گرديد  ، ايجاد و سرويس لازم به آنان داده می شود:

  • يک کاربر بر روی موس کليک می نمايد .
  • موس يک پيام را برای سيستم عامل ارسال می نمايد .
  • سيستم عامل،  پيام ارسالی توسط موس را دريافت و يک رويداد OnClick را توليد می نمايد .
  • رويداد OnClick توسط سيستم عامل تشخيص و پاسخ  لازم به آن داده می شود . ( مثلا" نمايش يک منو )

مدل برنامه نويسی مبتنی بر رویداد چيست ؟
مدل برنامه نويسی مبتنی بر رويداد ، ماهيت برنامه نويسی را دستخوش تحولات فراوانی نموده است .  در اين مدل ، برنامه نويسان ازمدل قبلی که در آن تعدادی از صفحات به صورت ترتيبی بر روی يک سرويس دهنده اجراء می شدند، خارج و وارد دنيای جديدی شده که در آن از يک مدل مبتنی بر رويداد ، استفاده می گردد . در مدل فوق ، سرويس دهنده به رويدادهائی که توسط کاربر و  بر روی سرويس گيرنده  ايجاد می گردند ، پاسخ خواهد داد .( ايجاد رويداد در يک کشور و پردازش رويداد در کشوری ديگر! )
قبل از مطرح شدن مدل برنامه نويسی مبتنی بر رويداد ، برنامه های نوشته شده ، خط به خط و به صورت ترتيبی از ابتدا تا انتها اجراء می شدند .به عبارت ديگر ، زبان های برنامه نويسی قديمی، در ابتدا خط اول را اجراء نموده و به دنبال آن سراغ خط دوم و پردازش آن رفته و اين روند را تا انتها ، ادامه می دهند . حتی در موارديکه از تابع و يا برنامه های جانبی دريک برنامه استفاده می گردد، اولويت و نظم اجرای دستورات تغيير پيدا نمی نمايد. زمانی که يک برنامه جانبی ، برنامه جانبی ديگری را صدا می نمايد ، وی نيز می تواند برنامه ديگری را فعال نمايد. (فرآيندی با ماهيتی ترتيبی ) .
مدل برنامه نويسی مبتنی بر رويداد ، ماهيت ترتيبی اجرای دستورات و يا برنامه های جانبی را تغيير داده است. مثلا" سيستم عامل ويندوز در يک مدل برنامه نويسی با ماهيت ترتيبی ، اجراء نخواهد شد . در صورتی که بر روی يک منو کليک گردد ، انتظار داريم که بلافاصله يک منو ظاهر شده و درصورتی که بر روی يک آيکون Double click گردد ، انتظار داريم که بلافاصله برنامه مرتبط با آن اجراء گردد .

رويدادهای ASP.NET
هر فرم وب در نهايت به يک شی Page تبديل خواهد شد. فرم های وب را می توان نظير يک برنامه اجرائی تصور نمود که خروجی آنان HTML است . هر مرتبه که صفحه ای  صدازده می شود،حيات شی Page آغاز می گردد . شی فوق ، در مدت زمان حيات خود با مراحل متفاوتی نظير مقداردهی اوليه ، پردازش و چيدمان اطلاعات ، مواجه می گردد. مراحل فوق با هر بار فراخوانی صفحه ، انجام شده و می توانند باعث توليد رويدادهائی خاص گردند ( هر round trip به سرويس دهنده باعث فعال شدن مراحل فوق ، خواهد شد ) . فراموش نکنيم که مشاهده يک فرم وب ، ماحصل رويدادهای متفاوتی است که بر روی سرويس دهنده توليد و به آنان پاسخ لازم داده شده است . مهمترين رويدادهای توليد شده در اين رابطه عبارتند از :

  • Page_Init ، رويداد فوق زمانی محقق می شود که صفحه مقدار دهی اوليه می گردد. در اين رابطه می توان از برنامه جانبی Sub Page_Init مرتبط با آن به منظور اجرای کد مورد نطر قبل از اين که دات نت عمليات اتوماتيکی نظير نمايش کنترل ها بر روی صفحه را انجام دهد ، استفاده بعمل آورد.

  • Page_Load : رويداد فوق زمانی که اولين مرتبه تمامی صفحه نمايش داده شود ، ايجاد می گردد.( زمانی که صفحه به درون حافظه خوانده شده و پردازش می گردد ) . برخی از خصلت های مربوط به کنترل های سرويس دهنده ممکن است توسط روتين  Page_Init مقداردهی اوليه شده باشند.

  • رويدادهای کنترل های سرويس دهنده : پس از استقزار کنترل های سرويس دهنده ASP.NET در حافظه ، امکان پاسخگوئی به رويدادهائی نظير : کليک ، انتخاب يک آيتم موجود در يک ليست و يا checkbox و يا نسبت دهی يک منبع داده به يک کنترل سرويس دهنده ، فراهم می گردد.

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

همانگونه که اشاره گرديد ، زمانی که اولين مرتبه نمونه ای از يک شی Page  ايجاد می شود، اين نمونه کاملا" خالی است . هرمرتبه که اقدام به ارسال صفحه ای می گردد ، عملا" يک نمونه جديد از شی Page ، ايجاد می گردد.علت اين موضوع به ماهيت stateless بودن پروتکل HTTP برمی گردد. ( حتی اگر عمليات ارسال صفحات بر روی سرويس دهنده به صورت پيوسته انجام شود ). پس از ايجاد يک ارتباط توسط مرورگر با سرويس دهنده به منظور درخواست يک صفحه خاص ، سرويس دهنده وب در ادامه ، صفحه موردنظر و يا يک پيام خاص  را برای متقاضی ، ارسال و در ادامه ارتباط ايجاد شده ، غيرفعال می گردد.
هر شی Page دارای ماهيتی کاملا" مستقل و متمايز نسبت به شی ايجاد شده در مرحله قبل بوده و هيچگونه اطلاعاتی نگهداری نمی گردد. با استفاده از برخی ويژگی های کنترل های سرويس دهنده ، امکان بخاطر سپردن اطلاعات مربوط به هر يک  از کنترل های موجود بر روی يک فرم وب ، فراهم می گردد .

مثال: استفاده از رويداد Page_Init به منظور اجرای کد دلخواه ( اجرای کد نوشته شده قبل از هر چيز ديگر ) :

<Script   Language="vb" runat="server">
   Sub Page_Init ( )
       
کد دلخواه
   End Sub
</Script>

مثال : استفاده از رويداد Page_Load به منظور اجرای کد دلخواه در يک برنامه پس از استقرار يک صفحه در حافظه :

<Script   Language="vb" runat="server">
   Sub Page_Load ( )
       
کد دلخواه
   End Sub
</Script>

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

<Script   Language="vb" runat="server">
   Sub Page_Load ( )
        Message
1.text = "اين متن پس از استقرار صفحه در حافظه و ايجاد رويداد مربوطه،  نمايش داده می شود " 
   End Sub
</Script>
<html>
  <head>
  <title> تست رويدادها </title>
 </head>
<body>
  <asp:label  id="Message1" runat="server" />
</body>
</html>

در صورتی که کد فوق را در يک روتين ديگر و با نامی متفاوت ازPage_Load  مستقر نمائيم ، امکان اجرای اتوماتيک آن همزمان با استقرار صفحه در حافظه وجود نخواهد داشت. کد فوق، صرفا" زمانی امکان اجراء را پيدا خواهد کرد که رويدادی ديگر ايجاد و روتين مرتبط با آن صدا زده شود و يا امکان فراخوانی روتين نوشته شده از طريق کدهای نوشته شده ، فراهم گردد:

<Script   Language="vb" runat="server">
   Sub SubRoutine1 ( )
        Message
1.text = "اين متن پس از استقرار صفحه در حافظه و ايجاد رويداد مربوطه،  نمايش داده می شود " 
   End Sub
</Script>
  
...

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

رويدادها در HTML
 در يک فرم HTML ، معمولا" از تگ <input> که به خصلت type آن مقدار submit ، نسبت داده شده است برای ايجاد يک دکمه Submit ، استفاده می گردد . در چنين مواردی پس از فعال نمودن دکمه Submit ، اطلاعات موجود در فرم وب برای سرويس دهنده ارسال می گردد . در صورتی که قصد ايجاد دکمه ای را داشته باشيم که پس از کليک نمودن بر روی آن ، اطلاعاتی برای سرويس دهنده ارسال نگردد ،  مجددا" از تگ <input> ، استفاده خواهيم کرد با اين تفاوت که اين مرتبه خصلت type آن ،  Button در نظر گرفته می شود .

مثال : ايجاد رويداد و پاسخ به آن در HTML

مرحله اول : تايپ کد زير با استفاده از يک ويرايشگر 

<html>
 <head>
<title> تست رويدادها در HTML</title>
</head>
<body>
<form>
   <input type="button" value="تست رويدادها " onclick = "alert ( ' ايجاد يک رويداد ') ">
</form>
</body>
</html>

مرحله دوم : پس از ذخيره نمودن کد فوق در فايلی با نام TestHTMLEvent.htm و مشاهده آن در مرورگر خروجی زير را خواهيم داشت :

توضيحات :
در مثال فوق ازرويداد onclick که يکی از رويدادهای از قبل ايجاد شده در HTML می باشد، استفاده شده است.رويدادهای فوق که به "رويدادهای ذاتی"، معروف می باشند را می توان بهمراه تمامی تگ های HTML ، استفاده نمود ( از تگ <body> تا تگ <img> ) . ليست زير ، ساير رويدادهای ذاتی در HTML را نشان می دهد :

  • onclick
  • onmousemove
  • onmouseover
  •  onmousedown
  • onmouseup
  • onkeypress
  • onkeyup
  • onkeydown

در بخش دوم اين مقاله به بررسی  رويدادهای کنترل سرويس دهنده و کنترل Button در ASP.NET  خواهيم پرداخت .



جستجو

مقالات                 
دايره المعارف       
دوره های آموزشی


 

 

مشاهده گروه ها



              

 

 تهيه شده در شرکت سخا روش -  1382