2010/01/14

‫امتحان ‭۷۰-۵۳۶‬

مایکروسافت مجموعه‌ای از مدارک حرفه‌ای را برای توسعه دهندگان (برنامه‌نویسان) تدارک دیده است. این مجموعه شامل سه مدرک MCPD، شش مدرک MCTS و چندین Exam است. برای دریافت هر TS نیاز به گذراندن یک یا چند «امتحان» و برای دریافت هر PD نیاز به داشتن تعداد معینی TS است. به عبارت دیگر هر TS یا PD به این معنی است که شما امتحان‌های معینی را با حد نصاب قبولی گذرانده‌اید.
در این بین یک امتحان اصلی وجود دارد که گذراندن آن برای دریافت هر یک از TSها و در نتیجه هر یک از PDها اجباری است. این امتحان که «امتحان ‭۷۰-۵۳۶‬» یا Exam 70-536 نام دارد به مثابه دروس دانشگاهیی پیش نیاز همه مدارک برنامه‌نویسی مایکروسافت است. امتحان ‭۷۰-۵۳۶‬ یا همان «چارچوب دات‌نت مایکروسافت: اصول پایه توسعه برنامه‌ها» (TS: Microsoft .NET Framework Application Development Foundation)، همان طور که از اسمش پیداست به بررسی مهارت‌های شخص در اصول برنامه‌نویسی دات‌نت می‌پردازد. دانستن این اصول و مهارت‌ها برای کلیه برنامه‌نویس‌های دات‌نت در هر سطح و هر سکویی مورد نیاز است، خواه برنامه‌نویس مذکور صرفاً ASP.NET کار کند یا ADO.NET یا هر چیز دیگر. هر چند که بسیاری از برنامه‌نویسان شاغل در شرکت‌های ایرانی فاقد بخش قابل توجهی از مهارت‌های ذکر شده در این امتحان هستند اما به هر حال گذراندن این امتحان برای همه برنامه‌نویسان دات‌نت امری ضروری و مفید است. در پایان خلاصه‌ای از مهارت‌های مد نظر این امتحان را با هم مرور می‌کنیم:
۱- مهارت در استفاده از: کلاس‌ها – Collection – Generic – Exception – Interface – Event – Delegate (معادل ۱۵ درصد حجم سوالات)۲- Threading – Service – Application Domain (معادل ۱۱ درصد حجم سوالات)
۳- کار با فایل‌های config و APIهای مربوطه – مسائل مربوط به deployment و ساختن برنامه Install – logging (معادل ۱۴ درصد حجم سوالات)
۴- serialization/deserialization – کار با فایل و stream (معادل ۱۸ درصد حجم سوالات)
۵- مسائل امنیت در برنامه‌های دات‌نتی، کلاس SecurityManager – FileSystemSecurity – SemaphoreSecurity – DES – SHA1 (معادل ۲۰ درصد حجم سوالات)
۶- استغاده از COM – ساخت COM در دات‌نت – Reflection – Mailing – استفاده از dllهای غیر دات‌نتی و غیر COM (معادل ۱۱ درصد حجم سوالات)
۷- Globalization – Culture – Drawing – کار با Text و Regex (معادل ۱۱ درصد حجم مطالب)


مطالب مرتبط:
امتحان ‭۷۰-۵۳۶‬ در سایت Microsoft Learning
وبلاگ حاجلو: راهنمای جامع دوره‌های برنامه‌نویسی Framework 3.5 مایکروسافت




2010/01/05

‫کاربردهای جذاب Extension Methods

‫یک نمونه Extension Method برای تبدیل تاریخ میلادی به هجریهمیشه فکر می‌کردم اگر Object Oriented را به طور کامل در برنامه‌ها رعایت کرده و برای ارتباط با دیتابیس از یک ORM خوب مثل NHibernate استفاده کنیم می‌توان به راحتی از امکانات دنیای رویایی شی گرا در کار با آبجکت‌های اطلاعاتی استفاده کرد. یعنی آبجکت‌های اطلاعاتی مثل اطلاعات شخص، سند حسابداری، حواله انبارداری و… هم حاوی اطلاعات و فیلدهای مربوطه باشند هم حاوی متودهای انجام عملیات مثل ذخیره، محاسبه و… باشند (Encapsulation). اما گذشت زمان به من ثابت کرد نباید خیلی امیدوار باشم. چون خیلی از شرکت‌ها و گروه‌های تولید نرم‌افزار از معماری‌های SOA استفاده می‌کنند. بعضی از این معماری‌ها برای دسترسی به دستیابی الزام به استفاده از DMS و DAO دارند. آنها همین طور Business Entityها را در کلاس‌های مجزا نگه‌داری می‌کنند. همه این‌ها یعنی این که فیلدهای نگهداری اطلاعات، متودهای به روز رسانی اطلاعات در دیتابیس و متودهای پردازش اطلاعات هر کدام در یک کلاس (آبجکت) جداگانه قرار دارند.

با همه این حرف‌ها با ارائه‌ی Extension Methodها در C# 2008 روزنه امیدی برای رفع این مشکل باز شد (نظر شخصی من). با کمک Extension Methodها می‌توان تعدادی متود استاتیک دلخواه را در یک کلاس کمکی ایجاد کرده و آنها را به فهرست متودهای یک کلاس دیگر اضافه کرد بدون آن که مجبور به دستکاری کلاس اصلی شویم. مثلا فرض کنید کلاس اصلی شما (u1) صرفاً دارای دو متود m1()‎ و m2()‎ باشد. حال می‌توان در کلاس کمکی (h1) متود s1()‎ را طوری تعریف کرد که متود s1()‎ به کلاس u1()‎ اضافه شود. یعنی کلاس u1 از دید کاربر دارای سه متود m1()‎ و m2()‎ و s1()‎ باشد. به این ترتیب برای رفع مشکل فوق‌الذکر می‌توان یک سری Extension Methods ایجاد کرد که متودهای به روز رسانی اطلاعات دیتابیسی و متودهای پردازش اطلاعات را به کلاس‌های Business Entity اضافه کند.

یکی دیگر از کاربردهای جذاب Extension Methodها خواناسازی کد از طریق افزودن متودهای مورد نظر شما به کلاس‌های پایه دات‌نت است. مثلاً فرض کنید یک متود طولانی به اسم MyClass.Instance.ExceptionLogger.GetLongMessage()‎ دارید. این متود یک آبجکت از نوع System.Exception گرفته و پیغام‌های خودش و همه Inner Exceptionهای داخلی آن را برمی‌گرداند. حال با کمک یک Extension Method ساده می‌توان این قابلیت را با یک اسم کوتا‌ه‌تر مثل GetLongMessage()‎ به کلاس System.Exception افزود. یعنی از این به بعد در برخورد با یک آبجکت از نوع System.Exception مثل ex می‌توان با استفاده از کد ex.GetLongMessage()‎ متود اصلی MyClass.Instance.ExceptionLogger.GetLongMessage()‎ را بدون تایپ اسم طولانی آن صدا زد.

در همین راستا خواندن مطالب زیر نیز توصیه می‌شود:

۱- وبلاگ مهدی ولیخانی: معرفی "Extension Method" ها در C# 3.0

۲- انجمن برنامه‌نویس: C#‎ 2008 Language Features - Extension Methods

۳- سایت PersiaDevelopers: ويژگی های سی شارپ 3.0

۴- وبلاگ وحید نصیری: معرفی سایت ExtensionMethod.NET