Banner Advertisement
Flash Banner AD
Banner Advertisement
  مقالات >  کارگاه شبکه

همه چيز درباره‌ ASP.NET 2.0


ماهنامه شبکه - آبان ۱۳۸۵ شماره 70

بهروز نوعي پور

اشاره:
فناوري ASP.NET يك بستر برنامه‌نويسي است كه بر اساس سيستم CLR در چارچوب دات نت كار مي‌كند. اين فناوري امكاني را فراهم مي‌آورد تا در سايه آن برنامه‌نويس بتواند با استفاده از هريك از زبان‌هاي برنامه‌نويسي موجود در چارچوب دات نت، صفحات دايناميك و نرم‌افزارهاي تحت وب توليد كند. نسخه اول ASP.NET توانست با فراهم ساختن قابليت‌هاي پيشرفته زبان‌هاي برنامه‌نويسي شي‌گرا، همچون ويژوال بيسيك دات نت و سي شارپ، تحول بزرگي را نسبت به نسل قبلي (ASP) ايجاد كند. نسخه دوم ASP.NET همان مسير را با بهبود عملكرد موتور ASP.NET در زمينه مديريت و توسعه نرم‌افزار و نيز آسان‌تر كردن روند برنامه‌نويسي طي كرده است. در اين مقاله مهم‌ترين تغييرات و قابليت‌هاي جديد ASP.NET2.0 را بررسي خواهيم كرد. مخاطب اين مقاله برنامه‌نويساني هستند كه قبلاً با فناوريASP.NET آشنايي پيدا كرده‌اند و اكنون مايلند به تدريج به پلتفرم جديد مهاجرت كنند.

شكل 1

تازه‌هاي ASP.NET 2.0 
اولين سؤالي كه براي هر برنامه‌نويس علاقمند به ASP.NET به وجود مي‌آيد اين است كه نسخه دوم اين فناوري چه ويژگي‌ها و قابليت‌هاي جديدي دارد و كدام قسمت‌ها نسبت به نسخه اول دچار تغيير و تحول شده‌اند و اگر كسي بخواهد پلتفرم برنامه‌نويسي خود را به  ASP.NET 2.0 منتقل كند، آيا مجبور است تمام دانش و تجربه خود در زمينه ASP.NET 1.x را دور بريزد و از نو بياموزد؟

با خواندن اين مقاله پاسخ همه اين سؤالات را خواهيد يافت. خوشبختانه معماري ASP.NET 2.0 به گونه‌اي است كه لازم نيست زحمات و تجربيات گرانبهاي خود در كار با ASP.NET 1.x را دور بريزيد.

مي‌توانيد از قابليت‌هاي جديد نسخه دوم استفاده كنيد و همزمان سورس كدهايي كه با ASP.NET 1.x نوشته‌ايد را با كمي تغيير، در پلتفرم جديد مورد بهره‌برداري قراردهيد.

خبر خوب اين است كه ASP.NET 2.0 صد‌درصد با ASP.NET 1.x سازگار است. بنابراين مي‌توانيد برنامه
ASP.NET 1.x خود را بدون حتي يك خط تغيير در سورس كد روي سروري كه براي اجراي ASP.NET 2.0 تنظيم شده است، اجرا كنيد. شكل 1 نمايي از پنجره تنظيمات يك سايت روي  IIS 6.0 را نشان مي‌دهد كه امكان تغيير دادن فناوري‌ASP.NET را از نسخه يك به دو و يا برعكس فراهم مي‌كند.

اين tab ويژه، پس از نصب NET Framework 2.0 روي ويندوز سرور، به ساير Tabها در پنجره تنظيمات سايت افزوده مي‌شود. براي آزمودن ادعاي فوق، كافي است پنجره تنظيمات سايتي كه هم‌اكنون با ASP.NET 1.x نوشته‌ايد را باز كنيد و آن را روي نسخه دوم ASP.NET تنظيم كنيد و دوباره سايت را اجرا نماييد. همه چيز مانند قبل بدون تغيير قابل‌مشاهده خواهد بود.

اما اجازه دهيد ببينيم تغييرات در كجا رخ داده‌اند. اگر معماري يك نرم‌افزار تحت وب را مطابق با معماري معروف سه لايه (3Tier) فرض كنيم، يعني ساختار نرم‌افزار يك سايت از لايه‌هاي نمايش (Presentation)، موتور اصلي نرم‌افزار (Business Layer) و ارتباط با پايگاه داده‌ها (Data Layer) تشكيل شده باشد، آن‌گاه مي‌توان گفت كه در
 ASP.NET 2.0 بيشترين و مهم‌ترين تغييرات در لايه نمايش رخ داده‌اند؛ هرچند كه بهبودهايي در دو لايه ديگر نيز رخ داده و قابليت‌هاي سودمند و جالبي نيز به كل مجموعه افزوده شده است.

در حقيقت مي‌توان گفت كه  ASP.NET 2.0 شكل رسمي و نظام يافته اغلب قابليت‌ها و ويژگي‌هايي است كه برنامه‌نويسان حرفه‌اي ASP.NET 1.x  قبلاً آن‌ها را به صورت دستي و با ابتكار خودشان به وجود آورده بودند. بنابراين تنها بخش كوچكي از قابليت‌هاي جديد ASP.NET 2.0 چيزهايي هستند كه در پلتفرم ASP.NET 1.x قابل حصول نبودند. اگر جزو آن دسته از طراحان وب هستيد كه متكي به چارچوب اصلي ASP.NET 1.x هستند و خودشان تلا‌ش چنداني در توسعه مكانيزم‌هاي عناصر پايه ASP.NET به كار نمي‌برند،  ASP.NET 2.0 حرف‌هاي زيادي براي شما دارد.

ولي اگر جزو آن دسته از برنامه‌نويسان هستيد كه با استفاده از نمونه سورس كدهاي مجاني در اينترنت يا با تكيه بر خلاقيت خودتان، اشيا و قابليت‌هاي پايه‌اي ASP.NET 1.x را توسعه داده‌ايد و كامپوننت‌ها و قابليت‌هاي جديدي ايجاد كرده‌ايد، ممكن است هنگام رجوع به قابليت‌هاي جديد نسخه دوم، در انتخاب ميان سورس كد خودتان و شيوه جديد به‌كار رفته در نسخه دوم بر سر دوراهي قرار بگيريد. خوشبختانه  ASP.NET 2.0 راهي را پيش روي اين دسته از برنامه‌نويسان گذاشته كه به كمك آن مي‌توانند به يك وضعيت متعادل از هر دو حالت برسند كه تركيبي از سورس كد قبلي خودتان و قابليت‌هاي جديد نسخه دوم است. در اين مقاله مفصلاً به اين موضوع خواهيم پرداخت، اما پيش از آن اجازه بدهيد مرور سريعي بر تعدادي از ويژگي‌هاي آشكار پلتفرم ASP.NET 2.0 داشته باشيم.

برخي ويژگي‌هاي پلتفرم ASP.NET 2.0
1- براي آشنايي با فضاي كلي برنامه نويسي در  Visual Studio 2005  خوب است قبل از آموختن  ASP.NET 2.0  به مقالات و كتاب‌هاي تأليف شده درباره محيط برنامه نويسي ويژوال بيسيك 2005 يا سي شارپ 2005 نگاهي بيندازيد. همانطور كه مي‌دانيد  ASP.NET 2.0 بر شالوده فناوري دات نت 2 بنا شده است و بدون آشنايي با شيوه برنامه‌نويسي با يكي از زبان‌هاي دات‌نت2 نمي‌توانيد از ASP.NET 2.0 استفاده كنيد. يك نمونه از اين مقالات قبلاً در ماهنامه شبكه (شماره 65) به چاپ رسيده است. همچنين خواندن مقالات نگاهي به قابليت‌هاي جديد 2005 SQL Server (شماره 68) و كسب‌وكار هوشمند در SQL Server 2005 در شماره 69 را به منظور آشنايي با نرم‌افزار  2005 SQL Server توصيه مي‌كنم.

2- فايل‌هاي موسوم به <پروژه> در ويژوال استوديوي  2005 حذف شده‌اند و اكنون همه چيز در فايل solution هر پروژه قرار دارد. بنابراين مديريت پروژه‌هاي ASP.NET اكنون آسان‌تر از گذشته است و سايت‌ها مي‌توانند به سادگي از مكان فيزيكي فعلي خود باز شوند.

3- در محيط  Visual Web Developer 2005 يا  Visual Studio 2005، يعني محيطي كه برنامه‌هاي ASP.NET 2.0  داخل آن نوشته مي‌شوند، دو روش براي اجراي سايت‌ها و صفحات دايناميك وجود دارد. روش اول همان روش قديمي است. به اين ترتيب كه يك وب‌سايت روي IIS تعريف مي‌كنيد و سپس هنگام تعريف يك پروژه جديد، آدرسHTTP  آن سايت را به ويژوال استوديو مي‌دهيد تا فايل‌هاي پروژه را آنجا بگذارد. در اين صورت هنگام بازكردن و اجراي سايت، اين صفحات روي آدرس HTTP سايت مربوطه باز مي‌شوند. در اين حالت شما براي آزمايش كاركرد سايتي كه درست كرده‌ايد، نيازمند اجراي وب سرور IIS هستيد.

شكل 2

در روش دوم كه روش جديدي در ASP.NET 2.0 است نيازي به وجود IIS نيست. اين روش به صورت پيش‌فرض روي ويژوال استوديوي 2005 تنظيم شده و هنگام آزمايش و مشاهده يك صفحه دايناميك در حالت اجرا، يك وب سرور كوچك روي يك پورت تصادفي خاص (روي http://localhost) اجرا مي‌شود و صفحات سايت به كمك آن قابل اجرا و مشاهده خواهند بود. (شكل 2)

اين روش سه مزيت دارد كه عبارتنداز:
‌‌‌‌نيازي به نصب IIS نيست. بنابراين مي‌توان كار برنامه‌نويسي را روي يك ويندوز دسكتاپ (مثلاً اكس‌پي) انجام داد. ضمناً نيازي به نصب نسخه استاندارد SQL Server هم نيست؛ زيرا ويژوال استوديو به روش مشابهي مي‌تواند به كمك يك نرم‌افزار كوچك‌تر به نام SQL Server 2005 Express Edition كه همراه ويژوال استوديو نصب مي‌شود، نياز به وجود يك پايگاه اطلاعاتي را تأمين كند.

‌‌‌‌ عدم نياز به فايل‌هاي موسوم به <پروژه>. هر سايتي مي‌تواند از محل فيزيكي خودش به آساني باز شود؛ زيرا اجباري در وابسته كردن پروژه به يك IP خاص نيست.

‌ امنيت بيشتر در محيط برنامه نويسي. عدم نياز به ‌IIS براي تست صفحات عملاً به اين معنا است كه مي‌توانيد اصلاً IIS ‌را نصب نكنيد و لابد مي‌دانيد كه هرچه تعداد سرويس‌هاي درحال اجرا روي يك سيستم كمتر باشد، امنيت آن بيشتر است. ضمن اين‌كه اجراي سايت روي يك پورت تصادفي از localhost امكان حدس‌زدن URL صفحات پروژه را براي هكرها دشوار مي‌سازد.

4- ويژوال استوديوي 2005 بر خلاف نسخه 2003 همه روش‌هاي دسترسي به يك سايت راه دور را به صورت مناسب و آسان در اختيار برنامه‌نويس مي‌گذارد. بنابراين اگر مي‌خواهيد سايت پروژه خود را از طريق ‌FTP يا از طريق شبكه (فايل سيستم) آپلود كنيد، ابزار قدرتمندي براي اين منظور در اختيار شماست. شكل 3 نمايي از ابزار Copy Web Site را نشان مي‌دهد. به كمك اين ابزار مي‌توانيد پروژه خود را مستقيماً به سايت مقصد آپلود كنيد.

شكل 3

5- ويژوال استوديوي 2005 امكانات مفصلي براي كار با بانك‌هاي اطلاعات دارد. به گونه‌اي كه شما را از مراجعه مستقيم به اينترفيس مديريت SQL Server يا ديگر بانك‌هاي اطلاعاتي تقريباً بي‌نياز مي‌كند. مي‌توانيد به كمك اين ابزارها جداول بانك اطلاعاتي خود را طراحي كنيد يا براي اجراي فرامين مختلف روي بانك‌اطلاعاتي Stored Procedure بنويسيد (شكل 4) و اين توابع را همانجا داخل ويژوال استوديوي اشكال‌زدايي (Debug) نماييد. مي‌كوشيم روش استفاده از اين ابزارها و امكانات را در شماره‌هاي آتي ماهنامه به تفصيل شرح دهيم.

شكل 4


6- شيوه Code-behind در  ASP.NET 2.0 متحول شده است. به اين صورت كه ديگر لازم نيست متغيرهاي عضو(Member Variables) را در ابتداي سورس كد پشت هر صفحه اعلان (Declare) كنيد. فناوري ASP.NET 2.0 از يك سازوكار جديد به نام Partial Class استفاده مي‌كند كه به موتور دات‌نت امكان مي‌دهد تمام سورس كد صفحه را به صورت دايناميك و در همان زمان اجرا كامپايل كند و داخل يك كلاس بگذارد. به اين ترتيب سهولت زيادي در استفاده از شيوه Code-behind پديد مي‌آيد؛ زيرا ديگر لازم نيست به محض افزودن يك Server Control به صفحه، Event Handler آن را در كد پشت صفحه نيز معرفي كنيد.

شكل 5


در ASP.NET 1.x اين كار ضروري است. به همين جهت، به مجرد اعمال كوچك‌ترين تغييري در يكي از صفحاتي كه از شيوه Code-behind استفاده مي‌كند، بايد كل پروژه را دوباره كامپايل و آپلود كنيد. اين مشكل در ASP.NET 2.0 به كلي حذف شده است. به اين ترتيب سرعت پيشبرد پروژه‌هاي طراحي سايت افزايش مي‌يابد و ايجاد تغييرات در صفحات، مستلزم كامپايل كردن مجدد پروژه نيست. شكل 5 سورس كد پشت صحنه يك صفحه دايناميك را نشان مي‌دهد كه مملو از انواع Server Controlها است، ولي ‌Code-behind آن فقط سه خط است كه شامل اعلان Partial Class همان صفحه است و خبري از اعلان Event Handlerها نيست. بقيه كد صفحه (مانند كد تابع Page Load) را مي‌توانيد همچون سابق بيفزاييد.

7- مكانيزم مشابهي براي كلاس‌هاي مستقل نيز پيش‌بيني شده است. به اين ترتيب كه مي‌توانيد علاوه بر آپلود كردن كلاس‌هاي كامپايل شده به صورت dll داخل پوشه bin، سورس بعضي از كلاس‌ها را داخل پوشه App&Code  بگذاريد. اين كلاس‌ها در ابتدا كامپايل نمي‌شوند، اما در زمان اجراي نرم‌افزار، به مجرد نياز به آن‌ها، كامپايل مي‌شوند و قابل استفاده خواهند بود.

معماري و مدل Provider در ASP.NET 2.0
همان‌طور كه پيشتر هم گفتيم، معماري ASP.NET 2.0 به گونه‌اي است كه مي‌توانيد هم از كدهايي كه قبلاً نوشته‌ايد استفاده كنيد و هم از ويژگي‌ها و قابليت‌هاي نسخه دوم اين فناوري بي‌بهره نمانيد. اين ويژگي كه در حقيقت مهم‌ترين ويژگي ASP.NET 2.0 است، از طريق مدلي به نام Provider Model فراهم مي‌شود. بسياري از قابليت‌هاي ASP.NET 2.0 از طريق Providerها در اختيار برنامه‌نويس قرار مي‌گيرند.

‌Provider به زبان ساده يك كامپوننت يا شيء قابل اتصال (Pluggable) است كه مي‌توان قابليت‌هاي آن را توسعه داد يا به كلي آن را با يك كد موجود تعويض كرد. منطق Provider ها در حقيقت از همان منطق شيء گرايي در برنامه نويسي الهام گرفته است. به بيان ديگر، مي‌توانيد كاركرد و عملكرد آن قسمت از پلتفرم  ASP.NET 2.0 را كه با مدل Provider نوشته شده است توسعه دهيد يا كالبد آن را به كلي با كد دلخواه خودتان عوض كنيد. آنچه براي موتور ASP.NET 2.0 مهم است اينترفيس و Syntax اين Providerها است و كاري با محتواي درون آن‌ها ندارد.

بنابراين اگر از عملكرد قسمتي از  ASP.NET 2.0 راضي نيستيد، ‌مي‌توانيد كد جديدي براي انجام وظايف آن بنويسيد. در اين‌صورت موتور  ASP.NET 2.0 به طور خودكار كد شما را اجرا خواهد كرد. سيستم مديريت كاربران
(User Membership)، مديريت حالت (Session State Management)، معماري شخصي‌سازي (Personalization) و ماجول Site Navigation در نسخه دوم ASP.NET از جمله قسمت‌هايي هستند كه با مدل Provider ‌نوشته شده‌اند و شما مي‌توانيد از قابليت‌هاي آن‌ها استفاده كنيد يا كدي را كه قبلاً خودتان نوشته‌ايد، جايگزينشان كنيد.

مثلاً احتمال زيادي دارد كه تاكنون كلاسي براي انجام كارهاي امنيتي مانند Login و نگهداشتن اطلاعات كاربراني كه وارد سيستم شده‌اند و نيز مديريت سطح دسترسي آنان نوشته باشيد. اگر بخواهيد پلتفرم كاري خود را به
 ASP.NET 2.0 منتقل كنيد و مايل باشيد از API جديد اين نسخه براي كارهاي امنيتي استفاده كنيد، بايد سورس كد قبلي خود را كنار بگذاريد. اگر براي نوشتن اين كد زحمت زيادي كشيده باشيد، چنين كاري مطلوب شما نيست.
پلتفرم ASP.NET 2.0 اين امكان را در اختيار شما مي‌گذارد كه راهي براي استفاده از كد موجود خود پيدا كنيد.

در حقيقت معماري ASP.NET 2.0 با الهام از منطق شي‌ء گرايي، طوري نوشته شده است كه شما بتوانيد ازSyntax متدها (توابع) و خواص (Properties) كلاس‌هاي نوشته شده در اين نسخه استفاده كنيد؛ بدون اين‌كه مجبور باشيد به كد داخل اين متدها و خواص محدود بمانيد. بنابراين Providerها پوسته‌هايي هستند كه مي‌توانيد دور كد موجود خود بكشيد. طوري كه موتور ASP.NET 2.0 بتواند زبان آن را بفهمد و با آن كار كند.
 
فايده اين كار چيست؟ مزيت اين مدل هنگامي آشكار مي‌شود كه شما بدانيد برخي قابليت‌ها در ASP.NET 2.0 به يكديگر وابسته‌اند. به عنوان مثال، ماجول شخصي‌سازي به ماجول امنيتي وابستگي دارد. بنابراين اگر بخواهيد از اولي استفاده كنيد، بايد Syntax ماجول دوم طوري باشد كه ASP.NET 2.0 منطقش را درك كند. اگر كد موجود خود را بدون تغيير به درون يك برنامه ASP.NET 2.0 تزريق كنيد، ماجول Personalization منطق آن را درك نخواهد كرد؛ هرچند كه مي‌توانيد همچون گذشته كارهاي مربوط به Login و سطح دسترسي كاربران را به كمك كد دست‌ساز خود انجام دهيد.

علاوه بر اين، استفاده از مدل Provider اين حُسن را دارد كه در آينده نيز اگر قابليت جديدي به ASP.NET افزوده شود، شما همچنان مي‌توانيد ميان كد موجود خود و ‌API جديد پل ارتباطي برقرار كنيد. مايكروسافت براي آن ‌دسته از برنامه‌نويسان كه مايل به استفاده از مدل ‌Provider براي تزريق كد خود به ساختار  ASP.NET 2.0 هستند، يكToolkit فراهم كرده است كه مي‌‌توانيد آن را به همراه يك دوجين مقاله آموزشي از آدرس انتهاي مقاله (1) دريافت كنيد.

شكل 6

شكل 7

شكل 8


تصاوير 6 و 7 و 8 مثال بسيار ساده‌اي از منطق اين مدل را نشان مي‌دهد. در شكل 6 شما تصوير قسمتي از يك صفحه به نام login.aspx را در يكي از مثال‌هاي آموزشي ASP.NET 2.0 مشاهده مي‌كنيد كه Username وPassword كاربر را مي‌گيرد و عمليات احراز هويت و تصديق كاربر را انجام مي‌دهد. با اين وجود، اگر به كد پشت اين صفحه مراجعه كنيد، با كمال تعجب هيچ كدي براي Authentication در آنجا پيدا نخواهيد كرد.

پس اين كار چگونه صورت مي‌گيرد؟ اگر به سورس HTML صفحه مراجعه كنيد (شكل 7) متوجه مي‌شويد كه از دو سه كنترل جديد به نام‌هاي CreateUserWizard و CreateUserWizardStep و CompleteWizardStep استفاده شده است. اين كنترل‌ها عمليات ‌login را توسط API  پيش فرض ASP.NET 2.0 براي اين منظور انجام مي‌دهند.
اگر مي‌خواهيد بدانيد كدام تابع دقيقاً اين كار را انجام مي‌دهد، بايد به كلاس Membership مراجعه كنيد. در آنجا تابعي به نام ValidateUser خواهيد يافت.
 
در شكل 8 تعريف اين تابع را مي‌بينيد. اين، همان‌ جايي است كه مي‌توانيد كد خود را از طريق مدل Providerجايگزين كد موجود كنيد. در حقيقت تابع Membership.Provider.ValidateUser از نوع MustOverride است و بايد پياده سازي خاصي روي آن صورت بگيرد تا قابل استفاده باشد. موتور ASP.NET 2.0 پياده‌سازي خاص خود را از طريق Membership.ValidateUser در اختيار شما مي‌گذارد.

لايه نمايش و رابط بصري در  ASP.NET 2.0

نمونه‌سازي از صفحات و Master Page
دومين تغيير مهم در  ASP.NET 2.0 نسبت به نسخه قبل، ورود مدل جديدي به فرآيند ساخت صفحات به نام Master Page است. تمام طراحان وب، چه تازه‌كاران و چه كهنه‌كارها همواره با اين مسئله روبه‌رو بوده‌اند كه موضوع تغييرات و اصلاحات صفحات وب يك سايت بزرگ را چگونه ساده كنند. تصور كنيد يك سايت از  سي صفحه وب به وجود آمده باشد كه از حال و هوا و صفحه‌آرايي مشابهي پيروي مي‌كنند.
 
اگر يك روز بخواهيم تغيير كوچكي در ظاهر اين سايت به وجود بياوريم، مثلاً محل لوگوي سايت را از بالا و وسط صفحات به گوشه سمت راست بالاي صفحات جابه‌جا كنيم، همين كار ساده ممكن است ساعت‌ها وقت طراح را بگيرد؛ زيرا بايد اين كار را به صورت دستي سي‌بار تكرار كند. براي حل اين مشكل، از سال‌ها پيش راه‌حل‌هاي گوناگوني مطرح شده است. اگر اين سايت فقط از صفحات استاتيك تشكيل شده باشد، يك سري راه‌حل خاص و در صورتي كه از صفحات دايناميك ساخته شده باشد، يك سري راه حل ديگر پيشنهاد شده است.
 
مثلاً در حالت استاتيك، بعضي طراحان از تابع document.write در جاوااسكريپت براي ضميمه كردن سورس HTML قسمتي از صفحه در اين مثال، بالاي صفحه در تمام صفحات استفاده مي‌كنند و براي تغيير مورد نظر فقط فايل جاوااسكريپت را تغيير مي‌دهند. ولي اين راه مشكلات خاص خود را دارد كه مهم‌ترين آن، عدم امكان مشاهده سورس HTML در حالت اصطلاحاً Design يا WYSIWYG پس از تبديل آن به كد جاوا اسكريپت است و طراح بايد براي هرگونه تغيير در فرم و قيافه اين قسمت از تخيل خود كمك بگيرد.

بعضي از طراحان ديگر به قابليت Template سازي كه در برخي نرم‌افزارهاي طراحي وب مانند Dreamweaver گنجانيده شده است روي مي‌آورند. اين راه حل نسبتاً خوبي است، ولي چون استاندارد نيست، فقط همان نرم‌افزار زبان اين <عمليات Templateسازي> را مي‌فهمد و وقتي كل پروژه را از داخل نرم‌افزار ديگري مانند ويژوال استوديو باز مي‌كنيد، ديگر كارايي خود را از دست مي‌دهد.

در حالت دايناميك، دست طراح تا حدودي بازتر است. در دوران ASP طراحان از Server-side inculdes براي اين منظور استفاده مي‌كردند. به اين ترتيب كه بخش‌هايي از يك Layout مانند بالا (Header) و پايين (Footer) صفحات كه فرمي مشابه داشت را داخل صفحات ASP مستقلي مي‌گذاشتند و آن‌ها را ضميمه هر صفحه مي‌كردند. درASP.NET اين راه‌حل با بهره گيري از Web User Controls توسعه داده شده است.
 
بنابراين مي‌توانيد هرجايي از صفحه را كه احساس مي‌كنيد ممكن است بعداً احتياج به تغيير سراسري داشته باشد، به داخل يك فايل ascx منتقل مي‌كنيد و اين قسمت‌ها را ضميمه تمام صفحات مي‌كنيد تا بعداً اگر نياز به تغييري در آن قسمت بود، فقط با اصلاح يك فايل، كل صفحات تغييرات جديد را منعكس كنند.

اما امروزه معلوم شده است كه اين روش نيز محدوديت‌هاي خاصي دارد. اشكال اصلي در اين راه حل اين است كه اگر بخواهيد به عنوان مثال محل قرار گرفتن محتواي يك فايل ascx در صفحات را چند پيكسل جابه‌جا كنيد، باز هم مجبوريد تمام نمونه صفحات يك سايت (مثلاً همان سي صفحه مثال ما) را تغيير دهيد؛ زيرا اين تغيير چيزي را در محتواي صفحه ascx عوض نمي‌كند، بلكه محل و نحوه استقرار كل آن را در يك الگوي اصلي تغيير مي‌دهد.
اگر مي‌شد راه حل معكوسي پيدا كرد كه در آن به جاي اين‌كه عناصر يك صفحه (فايل‌هاي ascx) منحصر به فرد و صفحات دربرگيرنده آن‌ها (فايل‌هاي aspx) متعدد باشند، عناصر صفحه متعدد و الگوي صفحه دربرگيرنده آن‌ها منحصر به فرد بود؛ آن‌گاه اين مشكل حل مي‌شد.

مدل Master Page پاسخي به همين نياز است. شما در ASP.NET 2.0 نه تنها مي‌توانيد همچنان از Web User Controlها استفاده كنيد، بلكه راه حل معكوس آن، يعني Master Page نيز اضافه شده است. در حقيقت مدلMaster Page يك پياده‌سازي دايناميك از همان راه حل الگوسازي است كه در نرم‌افزاري مثل ‌Dreamweaver براي ساخت صفحات استاتيك مشاهده مي‌كنيد.

در اين روش ابتدا يك صفحه الگو (Master Page) مي‌سازيد. سپس هنگام ساختن هر صفحه خاص از سايت، در ابتداي كد صفحه به موتور ASP.NET 2.0 مي‌گوييد كه الگو ياMaster Page اين صفحه كدام صفحه است. در مرحله بعد داخل همين صفحه خاص به سيستم مي‌گوييد كه عناصر داخل الگوي اصلي را چگونه پر كند. صفحه Master Page چيز عجيبي نيست، بلكه خودش يك صفحه وب دايناميك معمولي است كه توسط كد خاصي آن را به عنوان Master Page معرفي مي‌كنيد.

تنها ويژگي اين صفحات آن است كه داخل آن‌ها با استفاده از Tagهاي مخصوصي به سيستم مي‌گوييد فلان قسمت محل نمايش فلان آبجكت است و فلان قسمت ديگر محل نمايش آبجكت ديگر. وقتي موتور ASP.NET ‌شروع به Render كردن يا توليد صفحه وب نهايي مي‌كند، ابتدا الگوي ‌Master Page را با آبجكت‌هاي داخل يك صفحه خاص جمع مي‌زند. شكل 9 قسمتي از يك ‌Master Page را نشان مي‌دهد. قسمت پررنگ شده محل نمايش يك آبجكت را نشان مي‌دهد. شكل 10 نمونه‌اي از يك صفحه ساده است كه ابتدا مرجع، يعني ‌Master Page مربوطه، و سپس محتواي آبجكت مورد نظر را در خود دارد. وقتي اين صفحه توليد مي‌شود، به جاي قسمت پررنگ شده در Master Page محتواي آبجكتي كه  ContentPlaceHolder1 ناميده مي‌شود، به نمايش درخواهد آمد.

ويژگي‌هاي راهكار ‌Master Page به دليل شباهتش به مدل الگوسازي در صفحات استاتيك به گونه‌اي است كه باعث مي‌شود طراحان وب حتي براي ساختن سايت‌هايي كه تاكنون به روش استاتيك ساخته مي‌شدند، تجديد نظر كنند و به فكر استفاده از  ASP.NET 2.0 بيفتند.

شكل 9

شكل 10

شكل 11

شكل 12


‌‌ كامپوننت‌هاي Data Source

سومين تغيير مهم در ASP.NET 2.0، به ميدان آمدن اشياي جديدي است كه Data Source ناميده مي‌شوند. چنان كه مي‌دانيد، در ASP.NET 1.x براي متصل كردن لايه نمايش يا همان صفحات وب (كه دربرگيرنده عناصر مختلف دايناميك مانند Server Control ها هستند) به لايه داده‌ها يا قسمت اصلي نرم‌افزار بايد برنامه‌نويس و طراح وب به صورت دستي مقداري كدنويسي كند. مثلاً اگر براي نمايش دادن فهرستي از مقالات از شيء ‌DataGrid استفاده كرده باشيد، براي متصل كردن آن به بانك اطلاعاتي SQL Server يا اوراكل يا اكسس بايد از اينترفيس ADO.NET  كمك بگيريد و مقداري كدنويسي كنيد تا نهايتاً يك شيء با ساختار و ماهيت IEnumerable مانند‌ DataSet يا DataReader توليد كنيد و آن را به عنوان ورودي به DataGrid تزريق نماييد. اين‌ها اساساً اشيايي مقيم در حافظه و غيرمتصل به پايگاه‌داده‌ها (disconnected) هستند كه هيچ تصويري درباره منشأ داده‌هايي كه داخل خودشان است ندارند. 

 علا‌وه بر اين، اگر بخواهيد روي اطلا‌عاتِ به نمايش درآمده كارهايي مانند مرتب‌سازي (storage)  يا صفحه‌بندي
(custom paging) انجام دهيد، بايد چند تابع و چند خط كدنويسي ديگر هم انجام دهيد و در سراسر كد آن صفحه به ويژه مراقب عملكرد صحيح كد خود در اين زمينه باشيد. فلسفه مطرح‌شده اشياي Data Source در ASP.NET 2.0اين است كه زحمت اتصال به پايگاه داده‌ها و مديريت‌كردن عملياتي مانند مرتب‌سازي را از برنامه‌نويسي كم كند. در حقيقت شما به وسيله Data Source به جاي اين‌كه به يك شيء IEnumerable متصل شويد، مستقيماً به خود بانك‌اطلا‌عاتي وصل مي‌شويد.

اشياي Data Source مي‌توانند تعدادي از عمليات پايه‌اي مانند Insert  ،Delete  ،Select  ،Update  ،Sort و Count   را انجام دهند و لازم نيست براي انجام اين عمليات كدنويسي اضافي انجام دهيد. براي استفاده از اشياي Data source بايد شيء مورد نظر شما قابليت استفاده از ‌Data Source را داشته باشد. شيء DataGrid اين قابليت را ندارد، اما در ASP.NET 2.0 شيء جديدي معرفي شده است كه GridView نام دارد و مدل توسعه يافته‌اي ازDataGrid است كه همان قابليت‌ها را به علاوه يك سري امكانات و توانايي‌هاي جديد در خود دارد.

يكي از اين قابليت‌هاي جديد، همين امكان اتصال به Data Source است. شكل 11 يك نمونه كد ساده را نشان مي‌دهد. در ابتداي اين كد يك شيء از نوع sqlDataSource معرفي شده‌است كه مي‌تواند فرمان‌هاي Select و‌Update را روي داده‌هاي يك جدول از يك بانك اطلاعاتي SQL Server اجرا كند. كمي پايين‌تر، يك GridView معرفي شده كه منبع اطلاعاتش همان ‌sqlDataSource بالايي است.

در پتلفرم ASP.NET 2.0 نوع ديگري از Data Sourceها نيز وجود دارند. شكل 12 يك نمونه ObjectDataSource را نشان مي‌دهد. در اين دسته از اشياء مي‌توانيد به جاي اتصال به پايگاه‌هاي اطلاعاتي متداول، داده‌هاي مورد نياز را از شيء ديگري كه خودتان ساخته‌ايد، بگيريد. مثال شكل 12 نشان مي‌دهد كه چگونه اين شيء فرامين Select و‌Update را با مراجعه به توابع GetArticles و ModifyArticles كه در شيء  MyObject تعريف شده‌اند به انجام مي‌رساند.

نكته جالب در مورد Data Source اين است كه اين‌ها اشيايي دوطرفه هستند كه هم براي نمايش اطلاعات (انتقال به GridView) و هم براي دريافت اطلاعات (گرفتن تغييرات و داده‌هاي جديد از GridView) قابل استفاده‌اند. كد شكل 13 يك ورودي از نوع Textbox را معرفي مي‌كند كه توانايي دريافت اطلاعات و منتقل كردن آن به Data Source را دارد. اين كار توسط تابعي به نام Bind انجام مي‌شود، كه معكوس تابع Eval است. تابع Eval كه براي نمايش اطلاعات استفاده مي‌شود براي همه برنامه نويسان ASP.NET 1.x كاملاً آشنا است. اكنون Data Source مسير بازگشت اطلاعات را نيز فراهم كرده است.

شكل 13


‌‌Web Parts
 
عناصر Web Part از نرم‌افزار SharePoint به ارث رسيده‌اند و البته فناوري ASP.NET مايكروسافت يكي از آخرين پلتفرم‌هايي است كه به اهميت و جذابيت اين نوع المان‌هاي تحت وب پي‌برده است. عناصر Web Part بيشتر در پورتال‌ها كاربرد دارند. يك Web Part پنجره‌اي است كه اطلاعاتي را به كاربر نشان مي‌دهد. اما اين پنجره قابل بسته شدن نيز هست.

به عبارت ديگر، مي‌توانيد پنجره مربوط به يك سري اطلاعات خاص را كه علاقه‌اي به آن‌ها نداريد، ببنديد و دفعه بعد كه به سايت مراجعه و Login مي‌كنيد، تنظيمات پيشين شما هنوز معتبرند. مثلاً ممكن است به يك پورتال خبري مراجعه كنيد كه هرگونه خبر و مطلبي در آن پيدا مي‌شود. اما شما به گروه اخبار علمي و فرهنگي علاقه‌اي نداريد، ولي مطالعه اخبار ورزشي را دوست داريد. در اين صورت مي‌توانيد پنجره يا كادر مربوط به اخبار علمي، فرهنگي را ببنديد. از اين به بعد سايت مورد بحث فقط مطالب دلخواه شما را نمايش خواهد داد. اين بخش از ASP.NET 2.0 را مي‌توانيد در تركيب با سيستم Personalization  به‌كار ببريد.

شكل 14

‌‌ كنترل‌هاي جديد
فناوري ASP.NET 2.0 حاوي 45 شيء جديد از نوع Server Control است. تمام اين اشياي جالب و سودمند را در كنار اشياي قديمي و متداول در صفحات ASP.NET را مي‌توانيد در پنجره Toolbox نرم‌افزار ويژوال استوديوي 2005 پيدا كنيد. شكل 14 نمايي از اين بخش را نشان مي‌دهد.
 
اين كنترل‌ها در چند دسته‌بندي‌ شامل Core براي گروه كنترل‌هاي اصلي و پرمصرف، Data براي كنترل‌هاي مربوط به اتصال به منابع اطلاعاتي، Validation براي كنترل‌هاي بررسي اعتبار ورودي‌هاي تايپ شده توسط كاربر، Navigation براي كنترل‌هاي مربوط به تسهيل ايجاد منو و نقشه سايت براي راهنمايي بازديدكننده، ‌Login براي كنترل‌هاي مربوط به ثبت‌نام و ورود و خروج كاربران، WebParts براي كنترل‌هاي ساخت Web Partها در صفحه وب، HTML براي المان‌هاي كلاسيك وب و Crystal Reports براي كنترل‌هاي مخصوص توليد گزارش از روي داده‌ها است.

‌‌Themes 
تم‌ها موجودات جديدي در فضاي ASP.NET هستند كه به دنياي طراحي صفحات دايناميك طراوت مي‌بخشند. تم‌ها پوسته‌هايي هستند كه مي‌توانيد روي صفحات خود بكشيد. هر تم از مجموعه‌اي از فايل‌هاي CSS، تصاوير و پوسته كنترل‌ها تشكيل شده است. يك پوسته كنترل (Control Skin) يك فايل متني است كه تنظيمات بصري پيش‌فرض يكServer Control را در خود دارد. به عنوان مثال، مي‌توانيد به يك DataList در صفحه يك پوسته نسبت بدهيد. در اين صورت ظاهر گرافيكي و بصري آن مطابق موارد درج شده در فايل مذكور خواهد بود.

‌‌Localization 
براي ساختن يك سايت بزرگ و چندزبانه مي‌توان روش ساده‌ و در عين حال دشواري را در پيش گرفت: از هر صفحه به ازاي هر زبان يك نسخه بسازيد. به اين ترتيب براي آماده كردن سايتي كه مثلاً سي صفحه دارد، طراح بايد نود صفحه بسازد. آيا اين روش خوبي است؟ البته كه نه و تازه بايد درمورد Duplicate كردن ديتابيس و ساير منابع اطلاعاتي سايت هم فكري كرد. پس راه‌حل چيست؟

برنامه‌نويسان وب طي چند سال اخير متدولوژي‌هاي مختلفي را براي ساختن سايت‌هاي چند زبانه پيشنهاد كرده‌اند. اغلب اين راهكارها را تحت عنوان Localization مي‌توان دسته بندي كرد.

اين اصطلاح البته درباره بومي‌كردن قسمت‌هاي مختلف سايتي كه تنها به يك زبان نوشته شده است نيز استفاده مي‌شود. به هرحال اگر بخواهيد ذات يك سيستم نرم‌افزاري را انگليسي نگه‌داريد، ولي بتوانيد به كمك آن اينترفيس و اطلاعات را به زبان‌هاي ديگر هم به كاربر نشان دهيد، لازم است از اين راهكارها بهره بگيريد. تاكنون اغلب راهكارهاي ارائه شده پيچيده و پياده‌سازي آن‌ها براي برنامه‌نويس دشوار بوده است.

فناوري ASP.NET 2.0 مدعي است كه پياده‌سازي اين راهكار را براي برنامه‌نويسان آسان كرده است. گذشت زمان ميزان صحت اين ادعا را روشن خواهد كرد. به هرحال يك API نيز براي اين راهكار درنظر گرفته شده است.

سرويس‌هاي موتور ASP.NET 2.0

‌‌Configuration 
يكي از مهم‌ترين ويژگي‌هاي جديد ASP.NET 2.0 اصلاح سيستم تنظيمات نرم‌افزار است. برنامه‌نويسان ASP.NET   با فايل web.config و اهميت آن آشنايي دارند. مي‌توانيد پارامترها و تنظيمات نرم‌افزاري دلخواه را در اين فايل قرار دهيد. اين مقادير در سراسر برنامه و براي همه بازديدكنندگان سايت معتبر خواهد بود. در ASP.NET 2.0 مي‌توانيد از طريق يك API ساده و راحت، داخل كد برنامه خود، اين تنظيمات را تغيير دهيد و مقادير جديد پارامترها را در فايلweb.config ثبت كنيد.

‌‌Site Counter  
يكي ديگر از قابليت‌هاي جالب و به‌دردبخور كه به ASP.NET 2.0 افزوده شده است، ماجول شمارش تعداد بازديدكنندگان سايت است. شمارنده‌ها را همه طراحان وب و اغلب دارندگان سايت‌هاي اينترنتي دوست دارند؛ زيرا به آن‌ها نشان مي‌دهد چقدر بازديدكننده دارند و اين بازديدكننده به كدام قسمت‌ها بيشتر مراجعه مي‌كنند. برنامه‌نويسان ASP.NET 1.x معمولاً خودشان راه‌‌حل‌هاي مختلفي را براي آمارگيري از بازديدكنندگان سايت پياده مي‌كنند؛ مگر اين‌كه سرور ميزبان سايت (Host Server) از قبل به يكي از نرم‌افزارهاي تجاري آمارگيري از وضعيت بازديدكنندگان مجهز شده باشد. فناوري ASP.NET 2.0 اين كار را براي طراحان وب آسان كرده است. البته اين شمارنده خيلي پيشرفته نيست و قابليت‌ها خوبي دارد و حتماً مورد توجه طراحان قرار خواهد گرفت.

‌‌Cache  
سيستم Cache نيز در  ASP.NET 2.0 تكاني خورده است. مهم‌ترين بهبود در سيستم Cache اضافه شدن پارامترSqlCacheDependency به Cache است. به كمك اين پارامتر مي‌توانيد Cache را به تغييرات ديتابيس وابسته كنيد، به گونه‌اي كه مثلاً به محض بروز تغييري در يكي از جدول‌هاي يك بانك اطلاعاتي، Cache آپديت شود. اين قابليت خيلي بدردبخور است و چيزي است كه برنامه‌نويسان انتظارش را داشتند. به كمك اين پارامتر كدنويسي سيستم نگهداري و بروزرساني اطلاعات يك سايت پربيننده (كه نياز مبرمي به Cache دارد) آسان مي‌شود.

‌‌ Personalization 
شخصي‌سازي، مدلي است كه طي چند سال اخير در اينترنت متداول شده است. به كمك اين مدل سايت‌ها مي‌توانند تعدادي از تنظيمات دلخواه يا خاص هر كاربر را همراه پروفايل او ذخيره كنند تا دفعه بعد كه وارد سايت شد، سايت را با حال و هوا و تنظيمات پيشين خود ببيند. يك مثال ساده در اين زمينه، استفاده از تنظيمات خاص مربوط به زبان يك كاربر است. مثلاً مي توانيد صفحه نخست سايت گوگل را طوري روي كامپيوتر خود تنظيم كنيد كه هربار كه به گوگل مراجعه مي‌كنيد، اينترفيس آن فارسي باشد.
 
مثال ديگر، فهرست‌كردن دسته‌بندي‌هاي مورد علاقه شما در يك سايت حاوي عكس و Wallpaper است. شما مايليد هربار به آن سايت مراجعه مي‌كنيد، فقط تازه‌ترين عكس‌ها در دسته‌بندي‌هاي موضوعي مورد علاقه شما نمايش داده شود. مثال سوم، يك سايت كاريابي است. شما پس از ثبت نام در سايت و معرفي توانايي‌هايتان، يك اكانت مي‌گيريد و مايليد هربار كه login مي‌كنيد، جديدترين فهرست از فرصت‌هاي شغلي فقط در حوزه‌هاي دلخواه شما نمايش داده شود؛ چون به ديگر مشاغل علاقه‌اي نداريد. موتور ASP.NET 2.0 شامل يك API خوب براي پياده‌سازي انواع سناريوهاي شخصي‌سازي سايت‌ها است.

‌‌Site Navigation 
در ASP.NET 2.0 به يكي ديگر از نيازهاي قديمي و متداول طراحان وب نيز پاسخ داده شده است؛ نياز به تسهيل ايجاد منو و نقشه سايت (به صورت دايناميك) از روي ساختار صفحات سايت. اكنون مي‌توانيد به كمك كنترل‌هاي جديدي كه در ASP.NET 2.0 دارك ديده شده‌است، اين كار را از فرم دستي و استاتيك خارج كنيد و به موتور ASP.NET اجازه بدهيد شما را در اين زمينه ياري دهد.

‌‌ امنيت‌
خوشبختانه طي يكي دو سال اخير امنيت برنامه‌هاي ASP.NET در اثر پيگيري مداوم برنامه‌نويسان علاقمند و كدنويسي اصولي و از همه مهم‌تر، ترويج اصول امنيتي در اين پلتفرم، به ميزان قابل ملاحظه‌اي افزايش يافته است. موتور ASP.NET 2.0 چكيده‌اي از اين تجربيات را در دل خود دارد، اما در كنار اين‌ها يكي دو قابليت جالب توجه نيز افزوده شده است: يكي امكان رمزنگاري بخشي از فايل web.config با استفاده از تگ <ProtectedData> كه براي نگهداري قسمت‌هاي حساس اين فايل خيلي مفيد است. ديگري، امكان رديابي كاربران ناشناسي كه از يك سايت بازديد مي‌كنند.

قابليت اخير اين امكان را به برنامه‌نويسان ASP.NET مي‌دهد تا بتوانند به كاربري كه هنوز Login نكرده‌است، يك كد شناسايي موقت نسبت دهند تا نحوه حركت او در سايت را مانيتور كنند. اين قابليت علاوه بر كاربردهاي امنيتي، فوايد ديگري نيز دارد. مثلاً از همين قابليت براي نسبت دادن تنظيمات شخصي (Personalization) به كاربراني كهLogin نكرده‌اند مي‌توان استفاده كرد.

آموزش ASP.NET 2.0
واضح است كه هنوز هم بهترين منبع براي يادگيري ASP.NET 2.0 و ديگر موضوعات مرتبط با برنامه‌نويسي و طراحي وب، مطالعه كتاب‌هاي سومند در اين زمينه است. گلچيني از اسامي و مشخصات بهترين كتاب‌هاي دنيا در زمينه ASP.NET 2.0 را مي‌توانيد از لينك انتهاي مقاله (2) پيدا كنيد. ولي در ويژوال استوديوي 2005 روش جالب و جديدي هم به ديگر روش‌هاي آموزشي افزوده شده كه مي‌توان آن را آموزش از طريق مثال‌هاي هدفمند ناميد.

اهالي مايكروسافت نام ‌Starter Kits يا كيت‌هاي آموزشي براي مبتديان را بر اين مثال‌ها گذاشته‌اند. يك كيت آموزشي ASP.NET 2.0 شامل يك پروژه كامل و قابل اجرا است كه تنها با دو سه كليك قابل نصب و اجرا است. فهرست كامل اين كيت‌ها را از آدرس موجود در انتهاي مقاله (3) مي‌توانيد ببينيد و كيت‌هاي دلخواه خود را دانلود كنيد. پس از نصب هر كيت بايد برنامه ويژوال استوديو را باز كنيد و فرمان Create New Web Site را از منوي فايل اجرا كنيد. در پنجره محاوره‌اي مربوط به ايجاد پروژه جديد مي‌توانيد يكي از كيت‌هاي نصب شده در قسمتTemplates را انتخاب كنيد. سپس ويژوال استوديو به صورت خودكار يك سايت از روي الگوي تعريف شده در كيت آموزشي مي‌سازد و براي اجرا و مشاهده صفحات سايت كافي است كليد ‌F5 را فشار دهيد.

پي‌نوشت:
1- http://msdn.microsoft.com/asp.net/downloads/providers/default.aspx
2-  www.asp.net/Modules/MoreBooks.aspx?tabindex=0&mid=63
3- http://asp.net/downloads/starterkits



مطالب مرتبط
• ساخت یک برنامه فشرده‌کننده فایل‌ها - بخش دوم
( ASP.NET )
• ساخت یک برنامه فشرده‌کننده فایل‌ها - بخش اول
( ASP.NET - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - )
• برنامه‌نويسي را از كجا شروع كنيم؟
( برنامه نويسي )
• انتشار کدهای حمله به سکوی ASP.NET
( ASP.NET - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - )
• ساخت برنامه‌های وب هوشمند
( برنامه نويسي )
• كي #F را شروع مي‌كنيد؟
( دات نت )
• چرا نرم‌افزارها مي‌ميرند؟
( برنامه نويسي )
• Debugger خود باشيد!
( برنامه نويسي )
• مايكرو كاپوچينو! J2ME؛ جاوا در قلمرو موبايل‌
( برنامه نويسي )
• يك داستان اپن‌سورس ‌- قسمت پاياني
( دات نت - برنامه نويسي )
• اگر به جاي رييس مايكروسافت بودم...
( برنامه نويسي )
• چگونه يك سرويس ويندوز بسازيم؟
( برنامه نويسي - دات نت )
• آيا آندروئيد دگرگون‌‌ساز خواهد بود؟
( برنامه نويسي )
• نگاهي به NET Compact Framework.
( دات نت - برنامه نويسي )
• يك پنجره كوچولو براي تمام فصول‌؛ آشنايي با برنامه‌نويسي به زبان ++C براي ويندوز موبايل‌
( برنامه نويسي )
• يك داستان اپن‌سورس‌ - قسمت اول
( ASP.NET )
• شوق برنامه‌نويسي‌
( برنامه نويسي )
• نور فلاش يا پرتو نقره‌اي؟
( برنامه نويسي )
• دات‌نت فريم‌ورك چگونه كار مي‌كند؟
( دات نت - برنامه نويسي )
• Visual Studio 2008 در راه است!
( دات نت )
• مسابقات برنامه‌نويسي دانشجويي ACM
( برنامه نويسي )
• كدام زبان برنامه‌نويسي را انتخاب كنيم؟
( برنامه نويسي )
• گارسون! يك پرس XML لطفاً
( برنامه نويسي )
• اصول برنامه‌نويسي در چهارچوب ‌WebPart
( ASP.NET )
• پشت پنجره‌هاي زنده‌ - نگاهي به کيت توسعه نرم افزاري Windows Live
( برنامه نويسي )

نظرات بازدیدکنندگان
خيلي خوب
ميانگين امتيازي که 5 نفر از خوانندگان به اين مطلب داده‌اند : 5.4 از 6


به اين مطلب چه امتيازي مي‌دهيد؟ ديدگاه خود را درباره اين مطلب با ما درميان بگذاريد.
نام (اختیاری)
Email (اختیاری)
نظر (اختیاری و حداکثر 1000 کاراکتر)
پیام شما شامل 0 کاراکتر است