چرا NHibernate انتخاب خوبی به عنوان یک ORM است؟

در مطلب قبل دلایلی برای استفاده از ORM در دات نت فریم ورک برای دسترسی به داده ها و کار با دیتابیس معرفی شد. در این مطلب به معرفی NHibernate و دلایلی برای استفاده از آن به عنوان یک ORM مناسب برای دات نت فریم ورک پرداخته خواهد شد. NHibernate پیاده سازی ORM معروف دنیای جاوا یعنی Hibernate برای پلت فرم دات نت است که به صورت گسترده ای مورد استفاده توسعه دهندگان دات نت در سراسر دنیا قرار گرفته است. NHibernate آزاد و کد باز است و وظیفه اش مانند ORMهای دیگر نگاشت کلاس های شیء گرا به جدوال یک دیتابیس است.

nhibernate logoدر ادامه مطلب با مزیت های NHibernate به عنوان یکی از بهترین ORMهای موجود برای پلت فرم دات نت آشنا می شوید. البته تمام مزیت هایی که در مطلب قبل در مورد یک ORM ذکر شد، در مورد NHibernate نیز صحت دارند که دیگر از ذکر آن ها در این مطلب صرف نظر شده است.

کد باز است : شاید به نظر بعضی ها اوپن سورس بودن مزیت محسوب نشود، اما کد باز بودن NHibernate باعث شده تا این پروژه خیلی زود پیشرفت کند و به پر استفاده ترین و به روز ترین ORM پلت فرم دات نت تبدیل شود. در حال حاضر افراد زیادی به صورت تمام وقت و نیمه وقت بر روی توسعه NHibernate کار می کنند و از این ORM در بسیاری از پروژه های کد باز و تجاری استفاده می شود. حداقل برای من، کد باز بودن NHibernate مزیت بسیار مهمی محسوب می شود.

منابع آموزشی زیادی دارد : NHibernate دارای مستندات قوی و جامعه کاربری بزرگی است. یادگیری آن به لطف مستندات کامل و کتاب هایی که در مورد آن نوشته شده، آسان است. کاربران بسیاری در وب سایت های مختلف حاضر به پاسخگویی سئوالات شما در مورد NHibernate خواهند بود و برای تمام مشکلات شما راه حل های بسیاری در سطح اینترنت وجود دارد. با جستجوی کوچکی در اینترنت می توانید کتاب های مناسبی برای یادگیری NHibernate دانلود کنید!

واقعاً از چند دیتابیس پشتیبانی می کند : شما فقط به SQL Server محدود نخواهید بود و تقریباً می توانید از هر دیتابیسی برای ذخیره داده های برنامه خود استفاده کنید.  NHibernate در حال حاضر از DBMSهای معروف و پر کاربرد مثل Oracle, SQL Server و MySql و چند دیتابیس دیگر پشتیبانی واقعی می کند. این در حالی است که Entity Framework مایکروسافت در حال حاضر به صورت رسمی فقط از SQL Server پشتیبانی می کند.

از زبان HQL پشتیبانی می کند : زبان HQL یک زبان پرس و جوی پیشرفته است که در پروژه Hibernate جاوا به صورت وسیع مورد استفاده قرار می گیرد. با استفاده از این زبان می توانید کوئری های پیچیده را بر روی دیتابیس مورد نظر خود اجرا کنید.

امتحان خود را پس داده است : در حال حاضر NHibernate به صورت گسترده ای در پروژه های مختلف کد باز و تجاری مبتنی بر پلت فرم دات نت مایکروسافت مورد استفاده قرار می گیرد. تجربه های بسیار خوبی از استفاده از NHibernate به عنوان ORM در پلت فرم دات نت وجود دارد. در واقع NHibernate مطمئن ترین و با اعتبار ترین ORM برای پلت فرم دات نت مایکروسافت است.

انجام تغییرات را آسان می کند : از آنجا که موجودیت های پروژه را خودتان مدل می کنید و بر روی آن ها کنترل دارید، انجام تغییرات بر روی مدل و ایجاد دیتابیس از روی آن با NHibernate بسیار آسان است. انجام تغییرات بر روی مدل برنامه با مهارت های یک برنامه نویس معمولی دات نت قابل انجام است و نیازی نیست برای تغییر در مدل برنامه و در نتیجه تغییر در دیتابیس یک حرفه ای باشید. این را هنگام توسعه اولین برنامه خود با NHibernate شدیداً درک خواهید کرد!

کتابخانه های کمکی مناسبی دارد : پس از یادگیری NHibernate متوجه خواهید شد که می توان بسیاری از کارها را با کتابخانه های کمکی که برای آن نوشته شده، سریع تر و آسان تر انجام داد. به طور مثال می توان از Fluent NHibernate برای انجام اعمال Mapping به جای نگاشت بر اساس فایل های XML استفاده کرد. کتابخانه  Castle ActiveRecord با اضافه کردن لایه ای بر روی NHibernate کاری می کند که شما بدون درگیر شدن با پیچیدگی های NHibernate از آن به راحتی استفاده کنید. کتابخانه ای برای اضافه کردن Validation و کتابخانه ای برای اجرای کوئری های Linq بر روی آبجکت های NHibernate نیز موجود است.

کارایی بالایی دارد : به عنوان یک ORM از کارایی مناسبی برای انجام عملیات های سنگین بر روی دیتابیس برخوردار است. البته این کارایی مناسب در صورتی است که شما NHibernate را به درستی تنظیم و از آن استفاده کنید. ویژگی هایی مثل Second Level Caching، Multi Query و Batch Select که باعث کاهش ایجاد اتصال ها به دیتابیس و در نتیجه افزایش Performance می شوند در NHibernate وجود دارند و شما کافیست تا از آن ها در مواقع مناسب استفاده کنید.

قابلیت تست پذیری بالایی دارد : به علت جدا کردن دامین مدل برنامه از لایه های دیگر برنامه، قابلیت تست پذیری اپلیکیشن هایی که بر اساس NHibernate توسعه می یابند بسیار بالاست. شما می توانید مدل برنامه خود را مورد آزمایش های واحد قرار دهید و از صحت عملکرد آن ها اطمینان حاصل نمایید.

farasun.wordpress.com

اگر دلیل دیگری برای استفاده از NHibernate به عنوان یک ORM مناسب برای دات نت فریم ورک سراغ دارید، در فرم نظرات این مطلب با ما به اشتراک بگذارید.

10 دلیل برای استفاده از ORM در دات نت فریم ورک

ORM یک تکنیک برنامه نویسی برای تبدیل مدل رابطه ای یک دیتابیس به مدل شیء گرا و بالعکس می باشد که در حال حاضر مورد توجه بسیاری از توسعه دهندگان نرم افزاری قرار دارد. استفاده از ORMها مزایای بسیاری دارد و در بسیاری موارد کار توسعه را آسان تر و لذت بخش تر خواهد کرد. برای دات نت فریم ورک ORMهای کدباز و تجاری زیادی وجود دارد که از این جمله می توان به ADO.NET Entity Framework و NHibernate اشاره نمود. من به شخصه از Entity Framework در یک پروژه واقعی استفاده کردم و تمام مزایایی که قبلاً در مورد یک ORM خوانده بودم را در واقعیت دیدم. در این مطلب به 10 دلیل برای استفاده از یک ORM در یک پروژه مبتنی بر دات نت فریم ورک اشاره خواهم کرد که به شخصه آن ها را تجربه کرده ام.

1- افزایش سرعت توسعه : طراحی لایه دسترسی به داده ها در یک برنامه تجاری معولاً زمان قابل توجهی را به خود اختصاص می دهد و کارهای تکراری مثل درج، به روز رسانی، حذف و خواندن رکوردهای دیتابیس به وفور در آن یافت می شود. استفاده از یک ORM می تواند زمان طراحی لایه دسترسی به داده ها را کاهش دهد یا حتی در مواردی نیاز شما به این لایه را از بین ببرد و شما را از نوشتن کدهای تکراری برای انجام اعمال بر روی دیتابیس راحت کند. اگر وقت زیادی صرف نوشتن کوئری های SQL به صورت رشته ای برای خواندن رکوردها و استفاده از آبجکت های ADO.NET برای درج، به روز رسانی یا حذف داده های یک دیتابیس می کنید، بهتر است در رویه برنامه نویسی خود تجدید نظر کنید و بقیه مزایای استفاده از یک ORM را تا انتها بخوانید!

2- رعایت الگوی طراحی شیء گرا : تفاوت ماهیت دیتابیس های رابطه ای با الگوی شیء گرا همیشه برای برنامه نویسان معضل بزرگی بوده و هست. کار اصلی ORM این است که جدوال رابطه ای یک دیتابیس را به کلاس های شیء گرا و بالعکس تبدیل کند و مدل سازی های مورد نیاز را به صورت استاندارد انجام دهد. هرچند در این روش نمی توان از برخی مفاهیم مهم طراحی شیء گرا مثل ارث بری یا چند ریختی استفاده کرد اما برنامه نویس را مجبور خواهد کرد تا حداقل قوانین های طراحی شیء گرایی را در پروژه خود لحاظ کند. استفاده از الگوی طراحی OOP باعث کاهش پیچیدگی پروژه و آسان تر شدن نگهداری کد و اعمال تغییرات بر روی آن خواهد شد.

3- کاهش پیچیدگی پروژه : شاید در ابتدا استفاده از یک ORM برای طراحی یک پروژه بزرگ ترسناک به نظر برسد! اما در واقع ORM برای کاهش پیچیدگی توسعه یک پروژه بوجود آمده است. استفاده از کلاس های شیء گرا برای کار با ساختار پایگاه داده برای یک برنامه نویس دات نت بسیار راحت تر از سر و کله زدن با کوئری های SQL برای رسیدن به نتایج مورد نظر یا انجام عملیات بر روی دیتابیس خواهد بود. در واقع کدهای مورد استفاده در پروژه ای که با یک ORM توسعه داده شده است به مراتب خواناتر از پروژه های دیگر است و حتی یک فرد غیر برنامه نویس نیز منظور کد را خواهد فهمید.

4- راحت شدن از دست SQL : برای کار کردن با جداول یک پایگاه داده زبان SQL زبان بی نقصی است، اما زمانی که قرار باشد از آن در یک زبان برنامه نویسی شیء گرا مثل سی شارپ استفاده شود، واقعاً عذاب آور خواهد بود. فرض کنید در تمام پروژه خود از دستورات SQL در متغیرهای string استفاده کرده اید، حال با تغییر نام یک فیلد بایستی به دنبال رشته نام فیلد مورد نظر، کل پروژه را بگردید و رشته جدید را جایگزین آن کنید و این کار به صورت خودکار انجام نخواهد شد. کامپایلر هیچ نوع کنترلی بر روی رشته های  SQL ندارد و یک اشتباه تایپی می تواند باعث ایجاد خطای در حال اجرا شود. استفاده از ORM می تواند شما را شر SQL راحت کند!

5- طراحی استاندارد لایه دسترسی به داده ها : در پیاده سازی ORMهای موجود تمام تجربه های موفق لحاظ شده اند و در نتیجه کدهای تولید شده توسط آن ها کاملاً بهینه و استاندارد هستند. ORM باعث می شود تا شما و بقیه اعضای تیم از یک استاندارد خاص برای طراحی لایه دسترسی به داده های خود پیروی کنید و در نتیجه بازدهی بهتری را شاهد باشید. این مزیت در آخر باعث بوجود آمدن یک ساختار مناسب در لایه دسترسی به داده های پروژه شما خواهد شد.

6- امکان استفاده از LINQ : در دات نت فریم ورک می توانید از زبان LINQ برای اجرای کوئری های مختلف در هنگام استفاده از یک ORM بهره ببرید. با این کار کامپایلر کنترل کاملی بر روی کوئری های نوشته شده دارد و تمام خطاها را شناسایی و گزارش خواهد کرد. به علاوه کوئری های نوشته شده در این حالت از خوانایی بسیار بالاتری برخوردار خواهند بود و می توانید از قابلیت های IntelliSense ویژاول استادیو برای بالا بردن سرعت کدنویسی و کاهش خطاهای انسانی بهره ببرید.

7- ORMها آزمایش خود را پس داده اند : در حال حاضر تعداد بسیار زیادی از پروژه های اوپن سورس پلت فرم دات نت بر پایه یک ORM توسعه یافته اند. با یک جستجوی کوچک می توانید لیست بلند بالایی از این پروژه ها را مشاهده کنید. تجربه های خوب بسیار زیادی هم از پروژه های تجاری که از ORM برای دسترسی به داده ها استفاده کرده اند در اینترنت وجود دارد. این نشان می دهد که ORMها آزمایش خود را پس داده اند و برای استفاده در پروژه های واقعی به اندازه کافی قابل اعتمادند.

8- نگهداری از کد و تغییر آن در دراز مدت آسان تر می شود : به علت پشتیبانی ORMها از الگوی طراحی شیء گرا و دیگر الگوهای طراحی در توسعه نرم افزار و تولید کدهای استاندارد، نگهداری از کدهای نوشته شده و تغییر آن ها در طولانی مدت بسیار آسان تر خواهد شد. کدهای نوشته شده بر مبنای یک ORM معمولاً بسیار واضح هستند و تغییر آن ها اگر به صورت استاندارد نوشته شده باشند، اصلاً سخت نخواهد بود.

9- استفاده از قابلیت Refactoring : فرض کنید نیاز دارید تا نام چند فیلد یا جدول را در دیتابیس خود تغییر دهید. اگر از ADO.NET و کدهای SQL برای طراحی لایه داده های خود استفاده کرده باشید، برای انجام این تغییرات در کدهای خود نمی توانید از قابلیت Refactoring ویژوال استادیو استفاده کنید تا به صورت اتوماتیک این کارها انجام شود. اما با استفاده از یک ORM، تغییر دادن یک موجودیت باعث به روز رسانی تمامی ارجاع های آن موجودیت در کل پروژه توسط قابلیت Refactoring ویژوال استادیو خواهد شد. این قابلیت می تواند خطاهای انسانی را فوق العاده کاهش و سرعت توسعه را افزایش دهد.

10 – عدم وابستگی به یک دیتابیس خاص : هر چند این نکته در مورد تمام ORMهای مخصوص دات نت فریم ورک درست نیست، اما در حال حاضر ORMهای خوبی مثل NHibernate و Entity Framework از چندین دیتابیس پر استفاده پشتیبانی می کنند. البته EF در حال حاضر به صورت رسمی فقط از SQL Server پشتیبانی می کند!

farasun.wordpress.com

توصیه می شود مطالبی که قبلاً دوستان در این مورد نوشته بودند را مطالعه کنید :

farasun.wordpress.com

عناوین دیگر برای این نوشته : چرا باید از یک ORM در دات نت فریم ورک استفاده کرد؟ | مزیت های استفاده از ORM در دات نت فریم ورک

بررسی DataBinding در WPF

سیستم Data Binding در WPF یک راه ساده و قدرتمند برای نمایش و کار با داده ها را برای برنامه نویس فراهم می کند. کنترل های مختلف مثل Button و ListView به صورت توکار دارای قابلیت های قدرتمند Data Binding در WPF هستند که به برنامه نویس اجازه می دهد تا یک داده واحد یا مجموعه ای از داده ها را به خصوصیات یک کنترل Bind کند. قابلیت Data Binding در WPF  فواید زیادی نسبت به مدل های پیشین دارد، که از این فواید می توان به محدوده بیشتری از خصوصیات کنترل ها از data binding پشتیبانی می کنند، نمایش انعطاف پذیر داده ها در رابط کاربری و جداسازی شفاف منطق برنامه از رابط کاربری اشاره نمود.

مفهوم Data Binding

بدون در نظر گرفتن اینکه چه عنصری قرار است به چه منبع داده ای بایند شود، Data Binding همیشه مدل زیر را دنبال می کند :

Data Binding diagramشکل بالا مشخص می کند که عمل Data Binding مانند پلی است میان یک منبع داده و یک پراپرتی مقصد که البته همیشه دو طرفه نیست. به صورت معمول هر بایندینگ شامل چهار مولفه است : منبع داده، شیء مقصد، پراپرتی مقصد و مسیری در منبع داده که مقدار از آن خوانده می شود. به طور مثال اگر می خواهید پراپرتی Title در شیء Customer را در یک TextBox نمایش دهید، منبع داده شما شیء Customer، شیء مقصد نام آن TextBox، پراپرتی مقصد Text و مسیر منبع داده Title خواهند بود. پراپرتی مقصد باید یک Dependency Property باشد. بسیاری از پراپرتی های UIElement در WPF یک Dependency Property هستند و اکثر آن ها اگر read only نباشند، از data binding به صورت پیش فرض پشتیبانی می کنند.

جهت جریان داده ها

در WPF جریان داده در سیستم Data Binding می تواند یک طرفه (One Way)، دو طرفه (Two Way) و یا یک طرفه به سمت منبع (OneWayToSource) باشد. وجود این روش ها باعث می شود تا شما به عنوان یک برنامه نویس قادر به ساخت فرم های ورود داده بسیار انعطاف پذیر باشید. تنظیم حالت بایندینگ با تغییر پراپرتی Mode در آبجکت Binding مورد نظر قابل انجام است. شکل زیر به درک بهتر این روش ها کمک می کند :

Data flow directions

  • OneWay : تغییر در منبع داده باعث به روز رسانی پراپرتی مقصد می شود اما تغییر در پراپرتی مقصد باعث به روز رسانی منبع داده نخواهد شد. این حالت بایندینگ برای نمایش داده ها به صورت فقط خواندنی کاربرد دارد. به طور مثال شما می خواهید لیستی از محصولات را به مشتری نمایش دهید تا او بتوانید یکی از آن ها را انتخاب کند. این روش برای کنترل هایی که قابلیت ویرایش به کاربر نمی دهند (مثل ListView) کاربرد دارد.
  • TwoWay : تغییر در منبع داده باعث به روز رسانی پراپرتی مقصد و تغییر در پراپرتی مقصد باعث به روز رسانی منبع داده خواهد شد. این نوع بایندینگ مناسب فرم های ورود و ویرایش داده ها هستند که به صورت کامل با کاربر تعامل دارند. پیش فرض حالت بایندینگ اکثر پراپرتی ها حالت OneWay است اما برخی پراپرتی ها (مثل پراپرتی Text در TextBox) به صورت پیش فرض حالت TwoWay دارند.
  • OneWayToSource : این حالت برعکس حالت OneWay است به این صورت که با تغییر پراپرتی مقصد منبع داده به روز رسانی خواهد شد.
  • OneTime : برای مقدار دهی اولیه به پراپرتی مقصد بکار می رود. همانطور که از نامش پیداست فقط یک بار و برای اولین بار پراپرتی مقصد را مقدار دهی می کند و تغییرات بعدی منبع داده را بر روی پراپرتی مقصد اعمال نخواهد کرد. این حالت برای مواقعی مناسب است که منبع داده استاتیک است، یا در طول عمر یک شیء احتمال تغییر کردن آن وجود ندارد.

فقط توجه داشته باشید که برای اینکه در حالت های OneWay و TwoWay بتواند تغییرات را تشخیص دهد باید یک مکانیزم آگاه سازی تغییرات مثل INotifyPropertyChanged را برای منبع داده ها پیاده سازی کرده باشید.

چه زمانی منبع داده به روز خواهد شد؟

بایندینگ در حالت های TwoWay و OneWayToSource به تغییرات مقدار پراپرتی مقصد حساس می شوند و باید با تغییر مقدار در پراپرتی مقصد، منبع داده را آپدیت کنند. فرض کنید یک TextBox داریم که می خواهیم هنگامی کاربر مقدارش را تغییر داد، منبع داده ما بر اساس آن آپدیت شود. حال به نظر شما چه زمانی منبع داده باید آپدیت شود؟ بلافاصله بعد از اینکه کاراکترها را در TextBox وارد کرد یا هنگامی که کنترل Focus را از دست داد یا زمانی که کاربر بر روی یک Button کلیک کرد؟ پراپرتی UpdateSourceTrigger در بایندینگ مشخص می کند که چه زمانی منبع داده باید به روز رسانی شود. این پراپرتی می تواند یکی از چهار مقدار زیر باشد :

  • PropertyChanged : به محض اینکه مقدار پراپرتی تغییر کند، سورس آپدیت می شود.
  • LostFocus : زمانی که Focus کنترل به کنترل دیگری منتقل می شود، سورس آپدیت خواهد شد.
  • Default : حالت پیش فرض یک کنترل است که به طور مثال برای کنترل TextBox برابر LostFocus و برای کنترل CheckBox برابر PropertyChanged است.
  • Explicit : تا زمانی که متد UpdateSource صدا زده نشود، سورس آپدیت نخواهد شد.

اگر UpdateSourceTrigger یک TextBox را به PropertyChanged تغییر دهید ممکن است برنامه شما با مشکل مواجه شود، زیرا هر بار که کاربر کاراکتری را در TextBox وارد می کند منبع داده به روز رسانی خواهد شد و این سر بار زیادی (مخصوصاً اگر منبع داده دیتابیس باشد) به برنامه تحمیل خواهد کرد. در اکثر مواقع استفاده از Explicit مرقون به صرفه تر و بهتر از دیگر روش هاست، زیرا بهتر است تا کاربر دستور ذخیره را صادر نکرده، منبع داده به روز رسانی نشود.

یک مثال ساده

بهتر است یک مثال کوچک را برای درک بهتر موضوع اجرا کنید. یک اپلیکیشن WPF جدید بسیازید و کدهای XAML زیر را بین تگ های <Grid> و </Grid> پنجره خود قرار دهید :

<TextBox Name="textBox1" Width="167" />
<Label Content="{Binding ElementName=textBox1,Path=Text,UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Name="label1" />

همانطور که مشاهده می کنید در اینجا پراپرتی Content (پراپرتی مقصد) از شیء label1 (شیء مقصد) را به پراپرتی Text (مسیر منبع داده) منبع داده (شیء textBox1) بایند کرده ایم و با تغییر UpdateSourceTrigger به PropertyChanged مشخص کرده ایم که به هنگام تایپ کردن کاربر در TextBox متن Label تغییر کند. اگر برنامه را اجرا کنید مشاهده خواهید کرد که با تایپ کاراکتر درون TextBox متن Label بلافاصله تغییر خواهد کرد.

farasun.wordpress.com

منبع این نوشته : MSDN

Subcribe to Farasun feedمشترک فراسان شويد

فریم ورک های تست واحد برای دات نت

Unit Testing یا آزمایش واحد (=تست واحد) روشی است برای آزمایش نرم افزار که در آن قسمت های واحدی از سورس کد پروژه مورد آزمایش قرار می گیرند تا مشخص شود که همان کاری که انتظار می رود را انجام می دهد. منظور از Unit یا واحد، کوچکترین قسمت قابل تست یک برنامه است که می تواند یک تابع یا یک متد باشد. هر واحد به صورت جداگانه مورد آزمایش قرار می گیرد تا از صحت عملکرد آن اطمینان حاصل گردد. در ابتدا شاید انجام تست واحد عملی وقت گیر و اضافی به نظر بیاید، اما اگر شما از صحت عملکرد قسمت های کوچک برنامه خود اطمینان داشته باشید، در آخر کار با باگ ها و مشکلات بسیار کمتری مواجه خواهید شد که این باعث کاهش زمان تولید و تست و در نتیجه بالا رفتن بازدهی و تحویل به موقع خروجی به پروژه به کارفرما می شود.

تست واحد مربوط به برنامه نویسان است و ربطی به کاربران یا حتی آزمایش کنندگان کیفی یک نرم افزار ندارد. یک برنامه نویس اگر تمام قسمت های کوچک برنامه خود را مورد آزمایش واحد قرار داده باشد، در پایان برنامه ای با حداقل باگ را تحویل کاربران خواهد داد. برای انجام تست واحد در پلت فرم های مختلف ابزارهای مختلفی وجود دارد. برای دات نت می توان فریم ورک های Unit Testing زیادی مثال زد. در ادامه با برخی از فریم ورک های تست واحد برای دات نت آشنا می شوید.

NUnit : یک فریم ورک خوش ساخت کدباز است که از دنیای جاوا و با پورت کردن پروژه JUnit به دات نت بوجود آمد و با استفاده از Resharper و TestDriven.NET می توان از تمام قابلیت های آن در ویژوال استادیو بهره برد. مستندات خوبی دارد و مثال های بسیار زیادی برای آن در وب وجود دارد.

MbUnit : فریم ورکی با قابلیت توسعه پذیری بالاست که از آزمایش های واحد پیشرفته پشتیبانی می کند و به توسعه دهندگان اجازه می دهد تا تمام اجزای واحد نرم افزارهای خود را تست کنند و از صحت عملکرد آن ها مطمئن شوند.

csUnit : یک فریم ورک کدباز و رایگان است که تمام ویژگی های یک فریم ورک تست واحد خوب را یکجا دارد. با تمام زبان های برنامه نویسی دات نت سازگاری دارد و شامل ابزار GUI، پلاگین ویژوال استادیو و خط فرمان برای اجرای آزمایش هاست.

xUnit : فریم ورک کدباز جدیدی است که به توسعه دهندگان اجازه می دهد تا از TDD به سادگی هر چه تمام تر برای توسعه نرم افزار خود استفاده کنند. شامل ابزار GUI و خط فرمان برای اجرای تست هاست و می توانید با استفاده از TestDriven.NET یا Resharper در ویژوال استادیو از آن بهره ببرید.

Visual Studio Unit Testing Framework : راه حل مایکروسافت برای انجام آزمایش های واحد در دات نت است که در نسخه های Team System ویژوال استادیو 2005 به بعد وجود دارد. تست های واحد ساخته شده با این فریم ورک می توانند به صورت مستقیم درون ویژوال استادیو اجرا شوند یا با ابزار MSTest.exe از خط فرمان اجرا شوند.

farasun.wordpress.com

اگر به مبحث Unit Testing علاقه دارید پیشنهاد میکنم سری نوشته های آقای وحید نصیری در این مورد را حتماً بخوانید.

Visual Studio Unit Testing Framework : راه حل مایکروسافت برای انجام آزمایش های واحد در دات نت است که در نسخه های Team System ویژوال استادیو 2005 به بعد وجود دارد. تست های واحد ساخته شده با این فریم ورک می توانند به صورت مستقیم درون ویژوال استادیو اجرا شوند یا با ابزار MSTest.exe از خط فرمان اجرا شوند.

ذخیره تنظیمات یک برنامه دسکتاپ در دات نت

در اکثر برنامه های دسکتاپ، قسمتی به عنوان تنظیمات (Settings، Options یا Preferences) در نظر گرفته می شود تا کاربران امکان تنظیم اجزای مختلف برنامه را بر اساس سلیقه یا نیاز خود داشته باشند. در دات نت فریم ورک قابلیتی به نام Settings وجود دارد که شما با استفاده از آن می توانید تنظیمات برنامه خود را در یک فایل به نام App.config در کنار برنامه خود ذخیره کنید. Settings می تواند شامل مقادیر مختلفی باشد که برنامه شما برای به یادآوردن ترجیحات کاربران و تنظیم قسمت های مختلفش به آن ها نیاز دارد. به طور مثال می توانید تغییراتی که کاربر در ظاهر برنامه می دهد (مثل اندازه پنجره و تم برنامه) یا رشته اتصال به دیتابیس را درون فایل App.config ذخیره کنید و هر بار هنگام اجرای برنامه این فایل را بخوانید و تنظیمات کاربر را اعمال کنید.

برای استفاده از قابلیت Settings، در ویژاول استادیو از Solution Explorer بر روی پروژه خود کلیلک راست کنید و گزینه Properties را برگزنید (و یا از پوشه Properties پروژه خود فایل Settings.settings را باز کنید). اگر در تب Settings نیستید، به تب Settings بروید. حالا باید چیزی شبیه به تصویر زیر را ببینید که Settings Designer نام دارد.

Settings Designerهمانطور که مشاهده می کنید هر Setting دارای 4 خصوصیت است :

  • Name : نامی است که در کدنویسی برای دستیابی به مقدار ذخیره شده در این Setting مورد استفاده قرار می گیرد.
  • Type : نوع مقداری است که قرار است در این Setting ذخیره شود. در اینجا تمام نوع های داده ای دات نت فریم ورک پشتیبانی می شوند. به طور مثال شما می توانید رنگ پس زمینه یک پنجره را با توع System.Color ذخیره کنید.
  • Scope : نحوه دستیابی به یک Setting را در زمان اجرا کنترل می کند. اگر از نوع User انتخاب شود، مقدار هم خواندنی است و هم نوشتنی اما اگر از نوع Application در نظر بگیرید،مقدار Setting فقط خواندنی است و از طریق کدنویسی و در حال اجرا غیر قابل تغییر است.
  • Value : مقداری است که هنگام دستیابی به Setting برگردانده خواهد شد. این مقدار باید از همان نوعی باشد که در Type مشخص شده است.

پس از مشخص کردن Settingهای مورد نیاز برنامه خود، می توانید از طریق کد به آن ها دسترسی داشته باشید. در سی شارپ برای دسترسی به این تنظیمات از طریق کد باید از فضای نام Properties استفاده کنید. تمام تنظیماتی که مشخص کرده اید از طریق Properties.Settings.Default در کدنویسی قابل دسترسی اند و IntelliSense آن ها را می شناسد و به شما نشان می دهد. تمام آن ها از نوع مشخصی برخوردار هستند و به اصطلاح Strongly typed هستند.

فرض می کنیم یک Setting به نام Title از نوع String ساخته اید که عنوان پنجره اصلی برنامه شما را در خود ذخیره می کند. برای خواندن آن به صورت زیر کد می نویسیم :

this.Title = Properties.Settings.Default.Title;

و برای ذخیره مقدار ورودی کاربر در این Setting به صورت زیر عمل می کنیم :

Properties.Settings.Default.Title = txtTitle.Text;

Properties.Settings.Default.Save();

بدون صدا زدن متد Save تغییرات درون فایل ذخیره نخواهد شد. فقط به این نکته توجه داشته باشید که Settingهایی که دارای محدوده Application هستند را نمی توانید به صورت کد نویسی تغییر دهید. این نوع تنظیمات فقط از طریق Setting Designer یا تغییر دستی مقدار آن ها در یک ویرایشگر متن قابل تغییر هستند.

استفاده از چند فایل تنظیمات

در بعضی موارد ممکن است برنامه شما به جای یک فایل تنظیمات نیاز به چند فایل تنظیمات داشته باشد. در این مواقع شما می توانید در ویژوال استادیو روی پروژه خود کلیک راست کنید و گزینه Add New item را انتخاب کنید و به دنبال Settings File بگردید. یک نام به جز Settings مثلاً MyNewSettings را برای آن مشخص کنید و دکمه Add را بزنید تا به پروژه شما اضافه شود. حالا به جای Properties.Settings برای دسترسی به تنظیمات فایل جدید از Properties.MyNewSettings استفاده کنید. همین!

farasun.wordpress.com

پ.ن : وبلاگ جدیدی ساختم با عنوان سافتینگ، که نقل قول های مربوط به برنامه نویسی و توسعه نرم افزار را در آن منتشر خواهم کرد. می توانید از اینجا یا اینجا مشترک فید آن شوید. بدیهی است که سرعت آپدیت آن وبلاگ به علت مینیمال بودن از این وبلاگ بسیار سریع تر خواهد بود!

10 منبع برای شروع یادگیری WPF

هر چند WPF تکنولوژی نسبتاً جدیدی است، اما برای شروع یادگیری آن در اینترنت منابع بسیار زیادی پیدا می شود. این روز ها با وجود منابع آنلاین، برای یادگیری یک تکنولوژی جدید نیازی به خرید کتاب های معمولی ندارید. WPF برای برنامه نویسان دات نت هنوز تازه است. مخصوصاً در ایران خیلی ها خودشان را هنوز درگیر آن نکرده اند و کتاب و مرجع مناسبی به زبان فارسی در مورد WPF وجود ندارد. برای شروع یادگیری WPF می توانید از منابع زیر شروع کنید :

MSDN : بهترین مکان برای شروع یادگیری تکنولوژی های مربوط به مایکروسافت MSDN بوده و هست. MSDN مرجع خوبی برای تمام برنامه نویسانی است که با تکنولوژی های مایکروسافت کار می کنند. تمام موضوعات مربوط به WPF در MSDN طبقه بندی شده اند و شما به راحتی می توانید مطلب مورد نظر خود را پیدا کنید. اگر سئوالی داشتید می توانید در فاروم WPF مطرح کنید و جواب خود را بگیرید.

WindowsClient : سایت رسمی مایکروسافت و مرجع برنامه نویسان WPF و WinForm یکی از منابع خوب برای شروع یادگیری WPF است. در این سایت علاوه بر مقالات متعدد، ویدئوهای آموزشی مناسبی درباره آموزش WPF پیدا خوهید کرد.

CodeProject : کد پراجکت نامی آشناست که با داشتن مثال ها و مقالات متعدد در زمینه WPF منبع بسیار مناسبی برای یادگیری WPF و حرفه ای شدن در آن است.

WPF Tutorial.net : این سایت آموزش های پایه ای متعددی در دسته بندی های مشخص به شما ارائه می کند که برای شروع WPF گزینه بسیار مناسبی است. مخصوصاً بخش «یادگیری WPF در یک هفته» با فراهم نمودن یک آموزش ساختارمند، از نکات پایه ای WPF تا موضوعات پیشرفته را به شما آموزش می دهد.

LearnWPF.com : یک وبلاگ خوب با دسته بندی های مشخص و مطالب خوب است. مطالب پایه ای WPF را به خوبی توضیح داده و برای شروع می تواند گزینه مناسبی باشد.

وبلاگ Josh Smith on WPF : آقای Josh Smith در این وبلاگ به صورت حرفه ای در مورد WPF و الگوی طراحی MVVM مطلب می نویسد. شما می توانید در این صفحه از وبلاگ آقای اسمیت یادگیری WPF را آغاز کنید.

WPF Training Guide : در این سایت می توانید به صورت قدم به قدم شروع به یادگیری مباحث پایه ای WPF کنید.

وبلاگ های WPF : وبلاگ ها همیشه در آموزش تکنولوژی های جدید پیش قدم هستند. در این صفحه می توانید لیستی از وبلاگ هایی که در زمینه WPF، Silverlight و مباحث مربوط به آن ها می نویسند را مشاهده کنید.

WPFplex.com : این سایت یک دایرکتوری از منابع آموزشی، کتاب ها و ابزارها برای WPF است. این سایت هم برای کسی که می خواهد شروع به یادگیری WPF کند مناسب است و هم به درد حرفه ای های WPF می خورد.

Channel9 : در این سایت می توانید ویدئوهای با کیفیتی در مورد WPF پیدا کنید که توسط کارمندان مایکروسافت ساخته شده اند.

farasun.wordpress.com

اگر برنامه نویس دات نت هستید و می خواهید در آینده نیز برنامه نویس دات نت بمانید، WPF را جدی بگیرید و برای یادگیری آن وقت بگذارید!

MSDN

بهترین مکان برای شروع یادگیری تکنولوژی های مربوط به مایکروسافت MSDN بوده و هست. MSDN مرجع خوبی برای تمام برنامه نویسانی است که با تکنولوژی های مایکروسافت کار می کنند. تمام موضوعات مربوط به WPF رد MSDN طبقه بندی شده اند و شما به راحتی می توانید مطلب مورد نظر خود را پیدا کنید.

CodeProject

کد پراجکت با داشتن مثال ها و مقالات متعدد در زمینه WPF منبع بسیار مناسبی برای یادگیری WPF و حرفه ای شدن در آن است.

http://www.wpftutorial.net/

این سایت آموزش های پایه ای متعددی در دسته بندی های مشخص به شما ارائه می کند که برای شروع WPF گزینه بسیار مناسبی است.

LearnWPF.com

یک وبلاگ خوب با دسته بندی های مشخص و مطالب خوب است که برای شروع یادگیری WPF گزینه خوبی است.

نرم افزارهای وبلاگ نویسی اوپن سورس در ASP.NET

با وجود وردپرس چرا دنیا باید به یک نرم افزار وبلاگ نویسی اوپن سورس دیگر احتیاج داشته باشد!؟ خب همونطور که می دانید وردپرس با PHP ساخته شده و این برای برنامه نویسان ASP.NET اصلاً خوشایند نیست! برنامه نویسان ASP.NET بهتر است از پلت فرمی برای وبلاگ نویسی استفاده کنند که از کدهای آن سر در می آورند! در این مطلب به معرفی نرم افزارهای وبلاگ نویسی کد بازی که بوسیله پلت فرم ASP.NET توسعه یافته اند می پردازیم. اگر برنامه نویس ASP.NET هستید و می خواهید یک وبلاگ خوب داشته باشید که هر وقت تمایل داشتید آن را بر اساس سلیقه خود تغییر دهید تا انتهای مطلب با ما باشید. ابزارهای وبلاگ نویسی معرفی شده در این مطلب به علت سادگی در نصب و استفاده برای افراد معمولی که برنامه نویس نیستند هم کاربرد دارد.

BlogEngine.NET

BlogEngine.NET logoمعروف ترین و پایدارترین ابزار وبلاگ نویسی کد باز ASP.NET است که پیچیدگی کمی دارد، راحت نصب و سفارشی می شود و از آخرین ویژگی های پلت فرم دات نت بهره می برد. BlogEngine.NET تمام ویژگی های یک پلت فرم وبلاگ نویسی مدرن را دارد. از تکنولوژی AJAX برای نشان دادن کامنت ها و اسکرین شات Trackbackها استفاده می کند و از Gravatar، coComments، Google Sitemap، تگ های XFN، ابر تگ ها و دیگر ویژگی های وب 2.0 پشتیبانی کامل می کند. BlogEngine.NET دارای یک سیستم نظر دهی انعطاف پذیر و پیشرفته است و با استفاده از AJAX امکان Live Commenting را به خوانندگان شما می دهد. چند نویسنده به طور هزمان می توانند در یک وبلاگ در موضوعات مختلف بنویسند. خوانندگان وبلاگ با ابزار جستجوی BlogEngine.NET براحتی می توانند مطلب مورد نظرشان را پیدا کنند. با داشتن مهارت کمی در زمینه ASP.NET و HTML می توانید Themeهای زیبایی برای آن بسازید. سیستم مدیریت نظرات خوبی دارد و در آخرین نسخه آن یک سیستم Anti Spam قدرتمند نیز به آن اضافه شده است. BlogEngine.NET برای نصب نیازی به دیتابیس ندارد و اطلاعات وبلاگ شما را در فایل های XML ذخیره می کند، اما اگر ترجیح می دهید که داده های وبلاگ خود را در یک دیتابیس ذخیره کنید، BlogEngine.NET شما را نا امید نمی کند و قادر است اطلاعات یک وبلاگ را در دیتابیس های استاندارد مثل SQL Server ، MySQL و SQLite ذخیره کند.

دریافت | نصب بوسیله WPI

dasBlog

DasBlogdasBlog بر روی ASP.NET 2.0 و با زبان سی شارپ ساخته شده است. سیستم نظر دهی مناسبی دارد و از Trackback ، Gravatar و Ping پشتیبانی می کند. سیستم مدیریت ساده ای دارد و صفحات کم حجمی را برای خوانندگان شما ایجاد می کند. هم اکنون dasBlog به همراه 24 Theme منتشر می شود و آپدیت های منظمی دارد. از Live Commenting و Gravatar پشتیبانی می کند و قادر به استفاده از پلاگین Akismet موجود در وردپرس برای شناسایی کامنت های اسپم است. شما به عنوان نویسنده وبلاگ می توانید از Word و LiveWriter برای نوشتن مطالب خود در dasBlog بهره ببرید. برای نصب dasBlog نیازی به دیتابیس ندارید. dasBlog اطلاعات وبلاگ شما را در فایل های XML نگه داری می کند. از Google Sitemap و سرویس CoComment نیز پشتیبانی می کند و سازگاری خوبی با مرورگرهای موبایل دارد. اگر به دنبال یک پلت فرم وبلاگ نویسی ساده، کم حجم و رایگان می گردید، dasBlog می تواند بهترین انتخاب شما باشد.

دریافت | نصب بوسیله WPI

Subtext

Subtext logoیکی از قدیمی ترین پروژه های کدباز پلت فرم ASP.NET است که به عنوان یک Fork از ابزار وبلاگ نویسی ساده TEXT ایجاد شد و توسط Phill Haack یکی از کارمندان مایکروسافت ادامه پیدا کرد. نصب و استفاده از آن ساده است و شما را درگیر پیچیدگی های زیادی نمی کند. از Trackback ، Pingback و Live Commenting پشتیبانی می کند. Subtext بر روی سادگی در استفاده، زیبایی و کاربردی بودن تمرکز دارد. اگر به دنبال یک پلت فرم وبلاگ نویسی ساده و در عین حال قدرتمند می گردید، Subtext برای شماست.  با یکبار نصب شما می توانید چند وبلاگ داشته باشید و آن ها را یکجا مدیریت کنید. از OpenID، BlogML و اکثر ویژگی های وب 2.0 پشتیبانی می کند و برای نصب آن نیاز به یک دیتابیس SQL Server خواهید داشت. MySpace برای وب سایت چینی خود از Subtext برای مدیریت وبلاگ هایش استفاده می کند.

دریافت | نصب بوسیله WPI

Oxite

oxite logoOxite برای خیلی ها نام جدیدی است. Oxite بر روی ASP.NET MVC توسعه می یابد و از آخرین تکنولوژی های پلت فرم دات نت و استانداردهای وب استفاده می کند. شرکت مایکروسافت این ابزار را برای وب سایت MIX Online خود توسعه داد و در حالا به صورت اوپن سورس در اختیار همه قرار دارد. همین که نام مایکروسافت به عنوان توسعه دهنده Oxite آورده شده کافی است تا به قدرت و انعطاف پذیری این نرم افزار وبلاگ نویسی اطمینان پیدا کنید و به آینده آن امیدوار باشید. از ویژگی های Oxite می توان به پشتیبانی از Trackback، Pingback، Sitemap، MetaWeblog API و RSS برای تمام موجودیت ها اشاره کرد. به دلیل استفاده از ASP.NET MVC برای توسعه Oxite، صفحات تولید شده به مراتب کم حجم تر و SEO Friendlyتر هستند. Oxite نیاز به یک دیتابیس SQL Server نسخه 2005 به بالا برای ذخیره داده های وبلاگ شما دارد و با یک بار نصب قادر به ایجاد و مدیریت چندین وبلاگ است. در حال حاضر Oxite یک محصول کامل شده نیست و استفاده از آن به افراد غیر برنامه نویس و نا آشنا با ASP.NET توصیه نمی شود اما می توان آینده خوبی را برای آن متصور بود. یک نسخه آنلاین و عملی از Oxite را می توانید اینجا مشاهده کنید.

دریافت

AtomSite
AtomSite logo AtomSite یک پلت فرم حرفه ای برای وبلاگ نویسی است که بر روی ASP.NET MVC توسعه داده شده است. به علت ماژولار بودن این ابزار، سفارشی سازی آن بسیار آسان است. AtomSite تمام ویژگی هایی که از یک نرم افزار پیشرفته وبلاگ نویسی انتظار دارید را در خود جای داده است. از فید، Widget، Theme، Gravatar، Pingback، Trackback و OpenID پشتیبانی می کند و قادر است با یک بار نصب، وبلاگ های متعددی را مدیریت کند. به علت استفاده از ASP.NET MVC به عنوان پلت فرم توسعه، کارایی بالایی دارد و از نظر SEO قوی است.

دریافت | نصب بوسیله WPI

Mayando
Mayando-Logoاگر به دنبال یک نرم افزار Photo Blogging سبک و کار راه انداز می گردید، Mayando می تواند جوابگوی تمام نیازهای شما باشید. Mayando با استفاده از ASP.NET MVC نوشته شده و از  ویژگی های آن می توان به ساختن صفحات، فرم تماس، فرم نظرات، تگ ها، گالری ها و پشتیبانی از فید، فلیکر و زبان های مختلف (در حال حاضر فقط انگلیسی و آلمانی اما به راحتی می توان زبان جدید به آن اضافه کرد) اشاره نمود. نصب آن به لطف Web Platform Installer آسان است و شما می توانید یک دمو از Mayando را در اینجا مشاهده کنید.

دریافت | نصب بوسیله WPI

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد