۱۳۸۹ دی ۱۷, جمعه

ADO.NET Entity Framework - Part 2

الوعده وفا، همونطور که توی پست قبلی که برای () زده بودم 8 مورد از خصوصیات () که باعث شده این تکنولوژی، معمار ها و طراح های نرم افزار های کامپیوتری رو قلقلک بده ذکر کردم که خودم هم قبول دارم که خیلی کلی گفتم و تک تک اون موارد  خودشون به یه پست احتیاج داره حالا توی این پست و به بعد می خوایم در مورد اون 8 مورد صحبت کنیم که از حرف کم می کنیم و به اصل مطلب می رسیم:
  1. توانایی استفاده از دیتابیس های متفاوتی (... , Oracle , DB2, Microsoft SQL Server): خوب برای توضیح هر چه بیشتر این موضوع باید از (ADO .Net) شروع کنم. اینجا قصد ندارم که به توضیح کامل (ADO .Net) بپردازم ولی برای واضح شدن مبحث باید بگم که (ADO .Net) یکی از کامپوننت های سطح پایه ی (Net Framework.) هست که به برنامه نویس های امکان برقرای ارتباط با دیتابیس رو میده که در همین راستا (Provider) های زیادی هستند که با پشتیبانی از (ADO .Net) به برنامه نویس ها اجازه دسترسی به تعداد زیادی از دیتابیس ها رو میدن. (EF 4.0) نیز با تمام (Conceptual) بودن ولی در نهایت برای برقراری ارتباط با دیتابیس از (ADO .Net) استفاده می کنه که با توجه به بحث بالا نتیجه میگیریم که (EF 4.0) امکان اتصال به تعداد زیادی از دیتابیس ها رو به ما میده.
  2. Persistence Ignorance: دنبال ترجمه فارسی این اصطلاح نباشین که هیچی دستگیرتون نمیشه، این بحث یه بحث بسیار بزرگ و پیچیده و بسیار مهمه که متاسفانه در اینجا من تنها به یک توضیح مختصر بسنده می کنم ولی قول میدم به زودی این بحث رو که مورد علاقه خودم هم هست تا نهایت بشکافم ولی فعلا باید بگم که این یه اصطلاحه و تا اینجا که من متوجه شدم این بحث بیشتر مربوط میشه به فاز طراحی به این معنی که شما باید معماری خودتون رو به گونه ای طراحی کنید که کلاس ها و (Object) های شما باید بر روی (Business) شما تمرکز داشته باشه و نه بر روی مدل های دیتابیس شما که برای پیاده سازی این طراحی (EF 4.0) به وسیله پشتیبانی از (POCO) به شما اجازه می دهد که مدل های دیتابیس خودتون رو داشته باشید. که در این قسمت مباحث بسیار مهمی مطرح میشه که یکی از اون مباحث (Domain-Driven Design - DDD) هست فقط به همین نکته کوچیک بسنده می کنم.
  3.  T4 Code Generation (Text Template Transformation Toolkit) T4: اگه بخوایم یه تعریف ازش داشته باشیم باید بگم، یک کتابخانه ی (Generate) کننده متن بر پایه (Template) موجود در (Visual Studio) شرکت مایکروسافت. حالا سوال اینجاست که این ابزار چه ارتباطی با (EF 4.0) می تونه داشته باشه و از همه مهم تر چه کمکی به ما میتونه بکنه. تا اینجا که من متوجه شدم و استفاده کردم این ابزار از چند طریق میتونه به ما کمک کنه اولیش وقتی که از دیتابیس می خوایم مدل (Generate) کنیم. زمان دیگه هم وقتیکه  از روی مدل می خوایم دیتابیس (Generate) کنیم. اما یه روش دیگه هم هست که باز بر میگرده به همون بحث (Persistence Ignorance) که برای استفاده از این روش با استفاده از (EF 4.0)، (T4) به شما اجازه میده تا (POCO) مورد نظر خودتون رو (Generate) کنید. که باز هم ادامه بحث باشه برای یه پست دیگه که کامل توضیح میدم.
  4. Lazy Loading: خوب فکر کنم تو این مباحث با این موضوع از همه کمتر مشکل داریم چون فکر کنم همه با این مسئله آشنا باشن همون (Load Option) توی (Linq) باشه که به ما اجازه میداد در آن واحد تمام (Entity) هایی که به هم مرتبط هستن رو برای دسترسی راحت تر توی حافظه داشته باشیم. البته این بحث هم به نوبه خودش خیلی بحث بر انگیزه چون عده زیادی هستن که به این موضوع معتقد هستن و عده دیگه با این موضوع کاملا مخالف هستن که باز هم در موقع مناسب توی یه پست دیگه به صورت اختصاصی به این موضوع خواهیم پرداخت.
  5. POCO Change-Tracking: شاید بشه یکی از بهترین مضایای (EF 4.0) رو همین (Change-Tracking) دونست. همونطور که در پست قبلی توضیح مختصری داده بودم در (EF 4.0) قابلیت (Change-Tracking) به دو روش بر پایه ی (POCO) انجام میشه. اولی (Snapshot based Change Tracking) به این صورت انجام میشه که در ابتدای کار از اطلاعات مورد نظر یک (Snapshot) گرفته میشه و اجازه میده تا تمام عملیات ها و تغییر های مورد نظر انجام بشه و در نهایت در هنگام ذخیره سازی اطلاعات (SaveChanges) تغییر یافته به وسیله مقایسه با (Snapshot) گرفته شده عملیات های مورد نظر (Update, Delete, Insert) انجام میشه. در حالت دوم (Notification based Change Tracking with Proxies) بیشتر برای مواقعی تولید شده که شما بر روی اطلاعاتی خاص حساسیت بخصوصی برای بروز بودن تمام تغییرات انجام شده و (Sync) بودن اطلاعات با دیتابیس مورد نظر، دارید و این قابلیت به بهترین شکل این کار را برای شما انجام میدهد و تمام تغییرات صورت گرفته به محض انجام تغییر، این تغییرات اعمال می شود.
  6. پشتیبانی هر چه بهتر (N-Tier) توسط (EF 4): اشتباه نکنید اینجا صحبت از لایه های منطقی نیست اینجا صحبت از (Tier) های فیزیکی جدا از هم هیت که بحث خیلی پیچیده مهم و لذت بخشه. حتماً باید درگیر بشی تا بتونی مطلب رو درک کنی. که البته باز هم می تونم قول یه پست دیگه رو بدم که مفصل در این مورد بحث کنیم. فعلاً به این مقدار بسنده می کنم که () به دلایل زیادی از (N-Tier) پستیبانی می کنه و زمانی که شما سیستم هایی داشته باشید که نیاز به معماری های (N-Tier) داشته باشید دیگه (EF 4.0) میتونه خودش رو به عنوان یک (Solution) به شما معرفی کنه.
  7. Model-First Development: این بحث بحث زیاد پیچیده ای نیست البته پگونگی اینکه این اتفاق چگونه می افته خیلی حرف داره ولی توضیحش زیاد طولانی نیست اگه بخوام به سادگی بگم شما میتونید ابتدا و تنها با (Model) خودتون که با (EF 4.0) در یک محیط مناسب و یک فایل (edmx.) کار کنید و هیچ ارتباطی با دیتابیس یا دیتا نداشته باشید یک مدل (Conceptual) که حتی می تونه جای دیاگرام های (Conceptual Data Model) شما رو که با نرم افزار هایی مثل (Power Designer) تهیه می کردین رو براتون بگیره و بعد از تولید این (Model)، شما میتونید دیتابیس خودتون رو (Generate) کنید که چگونگی اون بر می گرده به مورد شماره 3 که در بالا توضیح دادم و در آینده مفصل تر توضیح میدم.
  8. Code-First Development: این بحث هم خیلی پیچیده هست ولی تمام منظور اینه که این بار میتونید ابتدا از کد های کاملا اختصاصی خودتون شروع کنید و حدس و تولید کردن مدل های (Conceptual) رو به (EF 4.0) بسپارید و بعد از تولید (Model) نوبت به تولید و (Generate) کردن دیتابیس و جدول ها و روابط بین اونهاست که باز هم با همان مورد شماره 3 درگیر خواهد شد که قرار است در آیندده توضیح داده شود.
خوب موارد تموم شد ولی باز هم راضی کننده نیست چون حس می کنم باز هم تنها تونستم سرفصل ها رو بگم ولی از این پست به بعد از مورد شماره یک شروع خواهم کرد و تمام مواردی رو که مبهم بوده اند را مفصل میشکافم تا موضوع هم برای من آشکار بشه و هم برای شما خواننده ها، پس تا بعد.

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

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)
که البته این امکانات و قابلیت ها باز هم جواب سوال ما رو نمیده و به ابهام ما بیشتر دامن میزنه. البته من هم نمی خوام مانند کسانی که بعد از دیدن یک تکنولوژی جدید، بدون بررسی فتوا صادر می کنند عمل کنم ولی در حال حاضر بیشتر خواستم یک مسئله مطرح کنم و به مرور بر اساس تحقیقات بیشتر به اون پاسخ بدم.
البته قبول دارم که باید در مورد موارد فوق به صورت مفصل تری باید صحبت بشه تا دقیقاً متوجه بشیم که در مورد چه مزیت هایی داریم صحبت می کنیم.