۱۳۸۹ آذر ۲۸, یکشنبه

ADO.NET Entity Framework

خوب، باز هم یه پروژه جدید و دقدقه استفاده از تکنولوژی های جدید برای پیاده سازی پروژه. همیشه تفکرم این بوده که برای انتخاب تکنولوژی های مورد نظر برای انجام پروژه ها همیشه نوع تکنولوژی کاملاً وابسه به شرایط پروژه است مثل هزینه، زمان، سخت افزار، نرم افزار، تعداد نیرو ها، مکان، اهمیت پروژه، سطح استفاده از پروژه، تعداد کاربر ها، تعداد تراکنش ها و ....
همه موارد بالا به علاوه تعداد بسیاری از موارد دیگه توی انتخاب تکنولوژی تاثیر میذاره ولی در حال حاضر من توی شرایطی هستم که یکی از گزینه هام میتونه (EF 4.0) باشه، ولی به هیچ وجه دلم نمی خواد صرفاً به دلیل اینکه یه تکنولوژی جدیده از اون استفاده کنم. در حال حاضر دارم برای محکم کاری بیشتر آخرین تحقیقات خودمو در موردش انجام می دم. بهتره اول یه توضیح کلی در باره (EF 4.0) بدم :
دقیقاً به اندازه طول عمر نرم افزار های و زبان ها و تمام موارد شیئ گرا دقدقه دیتابیس های شیئ گرا هم وجود داشته که تا همین الان هم خیلی کارها توی این زمینه انجام شده (Db4o, Objectivity/DB, ...) ولی در کنار تمام این تلاش ها برای تولید بهترین دیتابیس های شیئ گرا عده دیگری هم وجود دارن که به دنبال یک واسط هستند که بتونه شکاف ما بین نرم افزارهای شیئ گرا و دیتابیس های رابطه ای رو از بین ببره. تولید ابزاری به اسم (LINQ To SQL) تا مقداری تونست این شکاف رو برای (Microsoft .Net Framework) پر کنه ولی نتونست به طور کامل این شکاف رو پر کنه ولی مایکروسافت معتقده که (ADO .NET Entity Framework) این شکاف را بطور کامل پر کرده و در صفحه توضیح اجمالی این تکنولوژی در (MSDN) در قسمت (Summary) که در ابتدا نوشته شده این جمله به چشم میخوره "برای از بین بردن عدم تطابق ما بین مدل اطلاعات و زبان هایی که توسعه دهندگان به وسیله آنها نرم افزار های خود را تولید می کنند باید منتظر خصوصیات و ویژگی های موجود در (EF 4.0) باشیم" که این اصلاً ادعای کمی نیست.
 برای شناخت هر چه بیشترتکنولوژی  (EF 4.0) باید اول یه نیم نگاهی به (Object Relational Mapping) داشته باشیم.
(ORM) یک تکنیک برنامه نویسی است برای تبدیل اطلاعات مابین زبان های برنامه نویسی شیئ گرا و سیستم های ذخیره سازی اطلاعات رابطه ای. این سیستم ها سیستم های دیتابیسی مجازی شیئ گرا تولید می کنند که به این وسیله سیستم های شیئ گرا می توانند به سادگی با دیتابیس های غیر شیئ گرا در ارتباط باشند. در حال حاضر تعداد زیادی از این نرم افزارها با پشتیبانی از این تکنولوژی به صورت متن باز و یا تجاری در بازار وجود دارند مانند :
  • ADO .Net Entity Framework
  • LINQ To SQL
  • NHibernate
البته به این نکته هم توجه داشته باشید که این تکنولوژی تنها مختص به (Microsoft .Net Framework) نمی باشد و زبان ها و کتابخانه های دیگر نیز دارای نرم افزار هایی می باشند که بر اساس این تکنولوژی ساخته شده اند مانند :
  • (C++ (ODB
  • (Delphi (ECO
  • (Java (Hibernate
حالا با توضیحاتی که در بالا داده شد میشه گفت (ADO .NET Entity Framework) هم یک (ORM) است که از روی یک دیتابیس رابطه ای به شما یک شمای (Conceptual Data Model) ارائه میده تا به سادگی بتونید با دیتابیستون ارتباط برقرار کنید و لذت ببرید.
 حالا برای توضیح هر چه بیشتر این تکنولوژی باید به خصوصیات و مزایای اون بپردازیم.اینکه این ابزار جدید چه خصوصیاتی داره که این همه ذهن من و بقیه رو به خودش جلب کرده در زیر به تداد اندکی از این مزایا به صورت کاملاً تیتر وار اشاره میشه :
  1. توانایی استفاده از دیتابیس های متفاوتی مانند:(... , Oracle , DB2, Microsoft SQL Server)
  2. Persistence Ignorance:  به شما اجازه میده که (POCO) اختصاصی خودتونو بنویسید و داشته باشید که شبیه به هیچ (Persistence) ی نباشه.
  3. T4 Code Generation: شما می تونید به وسیله تکنولوژی (T4) هر قالبی رو که می خوای برای خودت داشته باشی.
  4. Lazy Loading: برای کسایی که با (LINQ To SQL) آشنا هستن می تونم بگم شبیه (Load Option) می مونه.
  5. POCO Change-Tracking: تکنولوژی (EF 4.0) از دو مدل برای (Tracking Change) بر روی (POCO) استفاده می کنه. بصورت پیشفرض (EF 4.0) یک تصویر از اطلاعات جدول شما نگه میداره و بعد از تمامی تغییرات شما و هنگام (SaveChange) کردن تغییرات مورد نظر را اعمال میکند ولی در مدل بعدی این اتفاق به صورت متداوم رخ میده و دائماً (Sync) بین تصویر و اصل اطلاعات صورت میگیره.
  6. پشتیبانی هر چه بهتر (N-Tier) توسط (EF 4): به صورت خلاصه بگم که در بسیاری موارد در نرم افزار های (N-Tier) مختلف ممکن هست که امکان (Tracking) در قسمتی از (Tier) ها وجود نداشته باشد که بوسیله (EF 4.0) این امکان بوجود میاد. 
  7. Model-First Development: ساخت یک مدل تمام عیار از روی دیتابیس(Conceptual Data Model).
  8. Code-Only Development: ساختن کلاس ها توسط شما و تولید و حدس زدن دیتابیس مورد نظر شما از روی (Model) تولید شده و ساخت دیتابیس مورد نظر.
به علت طولانی شدن این پست توضیح جزئیات موارد ذکر شده را در پست بعد توضیح میدم.

۱۳۸۹ آذر ۲۲, دوشنبه

WPF - Windows Presentation Foundation

دلم می خواست اولین پستی که توی این وب لاگ تازه تاسیس میزنم در مورد (WPF) باشه. چون در حال حاضر دارم روی این تکنولوژی کار می کنم و از زمانی که دارم باهاش کار می کنم و نمونه کار هاشو دیدم یه سوال بزرگ تو ذهنم بوجود اومده که آینده نرم افزار های تحت ویندوز به کجا می خواد برسه. آیا (WPF) آینده این نسل از برنامه هاست و یا این یه تب زود گذره که میاد و بعد هم میره. اگه بخوام اولین نظرم رو در باره این تکنولوژی بدم اینه که روز های اولی که هم روی (Web) و هم روی (Win) کد می زدم متوجه شدم که تعدادی از کارها  روی (Web) بسیار ساده و قدرتمنده و تعدادی از کار ها هم روی (Win) بسیار ساده و قدرتمنده و پیش خودم فکر می کردم چه خوب می شد که قابلیت های قدرت مند این دو را با هم مخلوط کنن یک تکنولوژی بسیار قدرتمند تر ظاهر بشه، در حال حاظر احساس می کنم که (WPF) همون چیزیه که در اون روز ها تو فکرم بود  تا ببینیم چی از آب در میاد. فقط هنوز نفهمیدم مایکروسافت چه جوری ذهن منو خوند. :-)
سوال اصلی برای کسی که ویژگی ها و قابلیت های (WPF) رو میبینه اینه که یعنی با این وجود دیگه کی میاد برای نرم افزاری که می خواد تحت ویندوز بسازه از (Windows Forms Application) استفاده کنه.
یعنی بیشتر منظورم اینه که چه مزیت هایی میتونه باعث بشه تا یه معمار بعد از بررسی های خودش تشخیص بده که نباید از (Windows Presentation Foundation) استفاده کنه و باید از (Windows Forms Application) استفاده کنه.
البته میشه تعدادی از خواص و مزایای استفاده از (WPF) را به صورت تیتر وار مثل زیر بیان کرد :
  1. (Databinding) بسیار قدرت مند تر از (WFA).
  2. جدا سازی هر چه بهتر (Business) و (UI) در طراحی ها.
  3. وجود (Storyboard) که شاید به تنهایی با تمام موارد برابری کنه.
  4. (Data And Control Templates) که فکر نمی کنم بشه به سادگی معادلی براش در (WFA) پیدا کرد.
  5. (Styles) که دیگه واضحه.
  6. قابلیت ها کد (XAML) برای (UI)
  7. قابلیت فوق العاده (UI Virtualization).
  8. پشتیبانی از فضای سه بعدی (3D).
  9. شاید بشه محیط جذاب و فوق العاده و جدید (WPF) برای برنامه نویس را هم به حساب آورد.
  10. قابلیت کار بصورت کاملاً مجزا بر روی (UI) توسط نرم افزار هایی مانند(Microsoft Expression Blend)
که البته این امکانات و قابلیت ها باز هم جواب سوال ما رو نمیده و به ابهام ما بیشتر دامن میزنه. البته من هم نمی خوام مانند کسانی که بعد از دیدن یک تکنولوژی جدید، بدون بررسی فتوا صادر می کنند عمل کنم ولی در حال حاضر بیشتر خواستم یک مسئله مطرح کنم و به مرور بر اساس تحقیقات بیشتر به اون پاسخ بدم.
البته قبول دارم که باید در مورد موارد فوق به صورت مفصل تری باید صحبت بشه تا دقیقاً متوجه بشیم که در مورد چه مزیت هایی داریم صحبت می کنیم.