‫کاربردهای جذاب 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

دیدگاه‌ها

  1. Hossein Fakoori Nejad

    با جالب بودنش موافقم ولی این مثل این می مونه که چون نمی خوایم برای مسافرت از قطار استفاده کنیم بیایم قیافه اتوبوس رو شبیه قطار کنیم. SOA واقعا راه خوبیه.

  2. علی

    دوست عزیز بنده لینک شما را با عنوان افشار.م لینک کرده ام اگر موافق تبادل لینک هسیتد خوش حال می شوم اگر لینک بنده را با عنوان
    دانلود بهترین های نرم افزار
    و با آدرس
    http://royansoft.com لینک کنید
    متشکر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *