۱۳۸۹/۱۰/۱۴

وضعيت فناوري‌هاي مرتبط با دات نت از ديدگاه مرگ و زندگي!


مطلبي كه در ذيل آورده شده صرفا يك برداشت شخصي است بر اساس نقل قول‌ها و بررسي وضعيت اعضاي تيم‌هاي مرتبط با فناوري‌هاي مختلف بكار گرفته شده در دات نت فريم ورك و ... نه رسمي!

ADO.NET ، DataSet ، DataTable و امثال آن: مرده! (مرده به معناي اينكه ديگر توسعه‌ي جدي نخواهد يافت)
ADO.NET‌ اولين فناوري دسترسي به داده‌ها در دات نت فريم ورك بود/است. مدل طراحي آن هم بر اساس امكانات زبان‌هاي آن زمان (زمان شروع به كار دات نت) بود (و تا دات نت 4 هم تغيير عمده‌اي نكرده). براي مثال در زمان ارائه اولين نگارش آن خبري از Generics نبود (در دات نت 2 اضافه شد)؛ يا LINQ وجود نداشت (در دات نت سه و سه و نيم اضافه و تكميل شد). به همين جهت طراحي آن در حال حاضر (با وجود دات نت 4) بوي ماندگي مي‌دهد (مانند استفاده از ديتاست و ديتاتيبل) و با ORM هاي مايكروسافت جهت استفاده از امكانات Generics و LINQ جايگزين شده‌ است.
البته اين مورد تنها مورد مرده‌اي است كه "بايد" ياد گرفت؛ مهم نيست كه ORMs ارائه شده‌اند. مهم اين است كه زير ساخت تمام ORM هاي نوشته شده براي دات نت همين ADO.NET خام است.


LINQ to SQL : مرده!
مايكروسافت با اين فناوري ORM هاي خودش را شروع كرد اما بعد از مدتي ديد كه بهتر است يك نسخه‌ي عمومي‌تر با پشتيباني از بانك‌هاي اطلاعاتي ديگر مانند اوراكل، MySQL و غيره را نيز ارائه دهد. همينجا بود كه آن‌را خيلي ساده با Entity framework جايگزين كرد و در roadmap ارائه شده صراحتا EF به عنوان راه حل توصيه شده دسترسي به داده‌هاي مايكروسافت اعلام شده است (+). حالا اين وسط ديگر مهم نيست شما پروژه نوشته بوديد يا هر چي. ديگر منتظر تغييرات خاصي در LINQ to SQL نباشيد. فقط يك سري رفع باگ و نگهداري پروژه را شاهد خواهيد بود. البته در همان زمان خيلي زود تكذيب كردند كه LINQ to SQL مرده اما براي نمونه آقاي Damien كه عضو اصلي تيم LINQ to SQL بودند، اكنون در تيم XBOX مشغول به كار هستند! (+) تو خود شرح مفصل بخوان از اين مجمل!

ضمنا اين رو هم در نظر داشته باشيد كه LINQ != LINQ to SQL ؛ به عبارتي LINQ به خودي خود فقط يك language feature است.


Windows Forms يا به اختصار WinForms : مرده!
به نظر مظلوم‌تر از اين يكي در دات نت يافت نمي‌شود! همين چند وقت پيش يكي از اعضاي مايكروسافت اين نظر سنجي رو برگزار كرده بود كه "ما چكار كنيم كه شما راحت‌تر از WinForms به WPF مهاجرت كنيد؟!" (+)
در قاموس WPF ، ويندوز فرمز يعني Canvas panel ؛ به عبارتي صلب‌ترين حالت طراحي رابط كاربري و اين انتقال و مهاجرت هرچند براي كساني كه عمري را روي آن گذاشته‌اند، دردناك خواهد بود اما با وجود توانايي‌هاي WPF چيزي را از دست نخواهند داد. سيستم Layout (طرح بندي) در WinForms و همچنين دلفي، بر اساس قراردهي اشياء در مختصات مطلقي در صفحه است. مثلا اين دكمه‌ي خاص در آن نقطه‌ي معلوم قرار مي‌گيرد و همين. اين روش طرح بندي يكي از چندين روش طرح بندي در WPF است كه اصطلاحا Canvas نام دارد. توصيه اكيد و مطلق در WPF آن است كه از Canvas فقط براي طراحي اشياء گرافيكي پيچيده استفاده كنيد و نه طراحي رابط كاربر. چرا؟ چون براي مثال در Silverlight كه برادر كوچكتر WPF محسوب مي‌شود، رابط كاربري آن بايد بتواند همانند HTML انعطاف پذير باشد و با اندازه‌هاي مختلف مرورگر يا اندازه‌ي قلم‌هاي بزرگتر هماهنگ شده و مقاومت كند، بدون اينكه از ريخت بيفتد و اين مورد را ساير سيستم‌هاي طرح بندي رابط كاربر (منهاي Canvas يا همان سيستم طرح بندي WinForms) ارائه مي‌دهند. مورد ديگري كه در WPF و Silverlight بسيار حائز اهميت است ، Content Controls مي‌باشد. چقدر خوب مي‌شد بتوان داخل يك كنترل، كلا يك سيستم طرح بندي را تعريف كرد و اشياء دلخواهي را داخل آن قرار داد. مثلا ToolTip پيش فرض وجود دارد. بسيار هم خوب. بنده علاقه دارم، متن عنوان آن ضخيم باشد. كنار آن يك تصوير كوچك و در سمت چپ آن متن قرار گيرد. براي انجام اينكار در WPF لازم نيست تا شما منتظر نگارش بعدي دات نت باشيد كه دست اندركاران مربوطه با افتخار در يك سند 50 صفحه‌اي توضيح دهند كه چگونه مي‌توان اينكار را انجام داد. يك سيستم طرح بندي را اضافه كنيد. موارد ذكر شده را در آن تعريف كنيد. بدون استفاده از هيچ نوع كامپوننتي يا بدون منتظر ماندن تا نگارش بعدي اين محصولات، به مقصود خود رسيده‌ايد.


ASP.NET Web forms : داره نفس‌هاي آخرش رو مي‌كشه!
از زمانيكه ASP.NET MVC آمد نسخه‌ي Web forms تقريبا فراموش شد. به وبلاگ اسكات گاتري يا Haacked و ساير اعضاي اصلي دات نت كه مراجعه كنيد در سه سال اخير در حد تعداد انگشتان يك دست هم در مورد Web forms مطلب ننوشته‌اند. تمام تمركز و نوآوري‌ها بر روي MVC متمركز شده و حتي در نسخه‌ي 4 دات نت هم فقط يك سري صافكاري مختصر را در Web forms شاهد بوديم مثلا نام كنترل‌ها را خودتان هم در زمان رندر نهايي مي‌توانيد تعيين كنيد! يا لطفا كردند و قسمتي از url routing موجود در ASP.NET MVC را به ASP.NET web forms 4 هم قرض دادند (اين مورد شايد مهم‌ترين تغيير قابل ذكر در ASP.Net web forms 4 است).
البته اين رو هم اضافه كنم كه ASP.NET MVC‌ واقعا قابل احترام است؛ هدف از آن جدا سازي لايه‌هاي برنامه با الگوهاي استاندارد صنعتي (و نه هر روش برنامه نويسي چند لايه من درآوردي)، ترويج كد نويسي بهتر، ترويج Unit testing ، رفع يك سري مشكلات ASP.NET Web forms (مثلا از ViewState هاي حجيم ديگر خبري نيست) و امثال آن است.
براي نمونه توجه شما را به مطلبي كه آقاي Dino Sposito در مورد ASP.NET Webforms نوشته جلب مي‌كنم: (+)
به صورت خلاصه ايشان عنوان كرده زمان طراحي ASP.NET Webforms در 10 سال قبل، هدف ما انتقال ساده‌تر برنامه نويس‌هاي VB به محيط وب بود. به همين جهت دست به اختراع postback ، viewState ، كنترل‌هاي سمت سرور و غيره زديم. (بنابراين تاكيد تمام اين‌ها اين است كه webforms فناوري دهه قبل "بود" و الان بنابر نيازهاي جديد دست به طراحي مجدد زده‌ايم)

در مورد "پايان پروژه ASP.NET Ajax Control Toolkit" هم قبلا مطلب نوشته بودم و اين يكي واقعا official است!


و در پايان بايد متذكر شد كه فلان فناوري مرده يا داره نفس‌هاي آخرش رو مي‌كشه اصلا مهم نيست. هنوز هم هستند سازمان‌هايي كه برنامه‌هاي نوشته شده با ASP كلاسيك (نگارش قبل از ASP.NET Web forms) خود را دارند و خيلي هم از آن راضي هستند!
اين موارد رو از اين جهت نوشتم كه اگر مي‌خواهيد تازه به اين جمع وارد شويد دقيقا بدانيد بايد روي چه مواردي بيشتر وقت بگذاريد و يادگيري كداميك صرفا اتلاف وقت خواهند بود (مثلا EF بر LINQ to SQL ارجح است و اگر امروز مي‌خواهيد شروع كنيد با EF شروع كنيد، يا ديگر كم كم با وجود WPF ، بازار كاري براي WinForms نخواهد بود).