<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>فراسان</title>
	<atom:link href="http://farasun.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://farasun.wordpress.com</link>
	<description>به اشتراک بگذارید برای یادگیری، یاد بگیرید برای به اشتراگ گذاری</description>
	<lastBuildDate>Thu, 04 Aug 2011 13:15:14 +0000</lastBuildDate>
	<language>fa</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='farasun.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/a211e2bedd89b7f4aa2da28d2eb8493f?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>فراسان</title>
		<link>http://farasun.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://farasun.wordpress.com/osd.xml" title="فراسان" />
	<atom:link rel='hub' href='http://farasun.wordpress.com/?pushpress=hub'/>
		<item>
		<title>به زودی&#8230;</title>
		<link>http://farasun.wordpress.com/2011/03/13/coming-soon/</link>
		<comments>http://farasun.wordpress.com/2011/03/13/coming-soon/#comments</comments>
		<pubDate>Sun, 13 Mar 2011 20:48:01 +0000</pubDate>
		<dc:creator>ایمان</dc:creator>
				<category><![CDATA[وبلاگ]]></category>
		<category><![CDATA[فراسان]]></category>

		<guid isPermaLink="false">http://farasun.wordpress.com/?p=1933</guid>
		<description><![CDATA[فیلتر شدن کل وبلاگ های وردپرس دات کام و بلاگر اتفاق تلخی بود، البته نه به تلخی خیلی از اتفاقاتی که این روزها بر ما می گذرد. اما به هر حال باعث شد بخش عمده ای از محتوای وب فارسی عملاً از دسترس بخش زیادی از کاربران اینترنت ایران خارج شود. مسدود کردن وبلاگ های سرویس های [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1933&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">فیلتر شدن کل وبلاگ های وردپرس دات کام و بلاگر اتفاق تلخی بود، البته نه به تلخی خیلی از اتفاقاتی که این روزها بر ما می گذرد. اما به هر حال باعث شد بخش عمده ای از محتوای وب فارسی عملاً از دسترس بخش زیادی از کاربران اینترنت ایران خارج شود. مسدود کردن وبلاگ های سرویس های وردپرس و بلاگر بدون در نظر گرفتن محتویات آن ها، احمقانه ترین نوع فیلترینگی بود که تا به حال دولت ایران به کاربران اینترنت کشور تحمیل کرده است. مطمئناً این حرکت نه باعث سر به راه شدن و ساکت شدن مردم می شود و نه باعث رونق گرفتن کسب و کار بلاگفایی می شود که با تبلیغات هک بلوتوث و آموزش فشن کردن مو و فروحتن اطلاعات وبلاگ نویسان کسب درآمد می کند!</p>
<p style="text-align:justify;">به هر حال فیلتر شدن این وبلاگ باعث ایجاد وقفه در نوشتن شد (هر چند که مشکلات دیگری هم برای من وجود داشت) اما دلیلی برای پایان کار این وبلاگ نیست. سعی خواهم کرد در سال جدید نوشتن در این وبلاگ را از سر بگیرم. ممکن است دامنه وبلاگ تغییر کند اما آدرس فید قبلی حفظ خواهد شد. امیدورام دوستان و خوانندگان عزیز <a href="http://farasun.wordpress.com">این وبلاگ</a> ، عذرم را برای دیر کرد در به روز رسانی وبلاگ بپذیرند.</p>
<p style="text-align:justify;">امیدوارم روزی برسد که دسترسی آزاد به اطلاعات، اینترنت و سرویس های وب جزئی از حقوق شهروندی تک تک مردم ایران باشد.<span style="color:#99cc00;"><strong> به امید آن روز</strong></span></p>
<br />دسته‌بندی شده در: <a href='http://farasun.wordpress.com/category/%d9%88%d8%a8%d9%84%d8%a7%da%af/'>وبلاگ</a> Tagged: <a href='http://farasun.wordpress.com/tag/%d9%81%d8%b1%d8%a7%d8%b3%d8%a7%d9%86/'>فراسان</a>, <a href='http://farasun.wordpress.com/tag/%d9%88%d8%a8%d9%84%d8%a7%da%af/'>وبلاگ</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/farasun.wordpress.com/1933/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/farasun.wordpress.com/1933/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/farasun.wordpress.com/1933/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/farasun.wordpress.com/1933/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/farasun.wordpress.com/1933/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/farasun.wordpress.com/1933/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/farasun.wordpress.com/1933/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/farasun.wordpress.com/1933/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/farasun.wordpress.com/1933/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/farasun.wordpress.com/1933/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/farasun.wordpress.com/1933/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/farasun.wordpress.com/1933/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/farasun.wordpress.com/1933/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/farasun.wordpress.com/1933/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1933&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://farasun.wordpress.com/2011/03/13/coming-soon/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">ایمان</media:title>
		</media:content>
	</item>
		<item>
		<title>کیفیت در نرم افزار واقعاً به چه معناست!؟</title>
		<link>http://farasun.wordpress.com/2011/02/02/what-software-quality-realy-is/</link>
		<comments>http://farasun.wordpress.com/2011/02/02/what-software-quality-realy-is/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 17:20:15 +0000</pubDate>
		<dc:creator>ایمان</dc:creator>
				<category><![CDATA[مهندسی نرم افزار]]></category>
		<category><![CDATA[Article]]></category>
		<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کیفیت نرم افزار]]></category>

		<guid isPermaLink="false">http://farasun.wordpress.com/?p=1926</guid>
		<description><![CDATA[درجه تطابق یک سیستم با نیازمندی های مشخص شده و نیازهای مشتری (یا کاربران) یا انتظارت آن ها، یکی از تعاریف رسمی کیفیت در نرم افزار است (1). از این تعریف می توان دریافت که شناخت درست نیازمندی های یک سیستم نرم افزاری از مهمترین فاکتورهای تعیین کیفیت در یک محصول نرم افزاری است. در [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1926&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;"><strong>درجه تطابق یک سیستم با نیازمندی های مشخص شده و نیازهای مشتری (یا کاربران) یا انتظارت آن ها</strong>، یکی از تعاریف رسمی کیفیت در نرم افزار است (1). از این تعریف می توان دریافت که شناخت درست نیازمندی های یک سیستم نرم افزاری از مهمترین فاکتورهای تعیین کیفیت در یک محصول نرم افزاری است. در واقع نرم افزاری که به صورت دقیق بر اساس نیازهای مشتری (یا کاربران) ساخته شده باشد، <span style="text-decoration:underline;">می تواند</span> با کیفیت باشد. جلوتر متوجه خواهید شد که چرا از کلمه <span style="text-decoration:underline;">می تواند</span> استفاده کردم.</p>
<p>پرسمن &#8220;کیفیت نرم افزار&#8221; را در مهندسی نرم افزار به صورت زیر تعریف کرده است :</p>
<blockquote>
<p dir="ltr">In the context of software engineering, software quality measures how well software is designed (quality of design), and how well the software conforms to that design (quality of conformance)</p>
</blockquote>
<p style="text-align:justify;">این تعریف فقط به زبان انگلیسی تمام منظور خود را می رساند. در واقع <strong>کیفیت یک نرم افزار در این تعریف بر اساس کیفیت طراحی و کیفیت پیروی از این طراحی مطرح شده است.</strong> کیفیت پیروی از طراحی یعنی نرم افزار تولید شده تا چه اندازه مطابق طراحی اولیه ساخته شده است. این تعریف از کیفیت نرم افزار، نقش تحلیل گران و طراحان را در کیفیت یک محصول نرم افزاری برجسته تر می کند. موفقیت یا شکست تحلیل گران در تحلیل مسائل نرم افزاری تاثیر مستقیم خود را در خروجی پروژه نرم افزاری می گذارد. توسعه دهندگان و برنامه نویسان نیز نحوه تطابق پیاده سازی با طراحی را تعیین می کنند. میزان وفاداری آن ها به طراحی رابطه مستقیمی با کیفیت خروجی محصول نرم افزاری دارد، البته زمانی که طراحی به درستی انجام شده باشد.</p>
<p style="text-align:justify;">آیا واقعاً می توان از تعاریف گفته شده در بالا دریافت که کیفیت نرم افزار به چه معناست؟ نرم افزار ذات پیچیده ای دارد و همین مسئله تعیین کیفیت آن را نیز مشکل می کند. برای کار کردن درست یک نرم افزار بخش های زیادی باید به یکدیگر کمک کنند. تحلیل گران باید نیازمندی ها را مشخص کنند، طراحان باید بر اساس نیازمندی ها، راه حل ارائه دهند و برنامه نویسان این راه حل ها را پیاده سازی کنند. در واقع کیفیت یک نرم افزار بر اساس تجمیع کیفیت این بخش ها محاسبه می شود که کاملاً به یکدیگر وابستگی دارند. کیفیت یک محصول نرم افزاری بر اساس کیفیت معیارهای زیر سنجیده می شود :</p>
<h3><strong>نیازمندی ها</strong></h3>
<p style="text-align:justify;">نمی توان از یک نرم افزار انتظار خروجی با کیفیت داشت زمانی که توسعه دهندگان آن، نیازمندی های پروژه را به خوبی درک نکرده باشند. شناخت نیازمندی های یک نرم افزار، کلیدی ترین بخش تضمین کیفیت نرم افزار است. با شناخت درست نیازمندی ها می توان به یک خروجی با کیفیت دست پیدا کرد. برای مطالعه بیشتر مطلب &#8220;<a href="http://farasun.wordpress.com/2010/03/10/requirements-documentation/">مستندات نیازمندی ها و نقش آن در موفقیت یک پروژه نرم افزاری</a>&#8221; را بخوانید.</p>
<h3><strong>طراحی</strong></h3>
<p style="text-align:justify;">در حالی که نیازمندی ها مشخص می کنند که نرم افزار چه کاری باید انجام دهد، طراحی می گوید که چطور نرم افزر باید این کار را انجام دهد. طراحی باید بتواند راه حل هایی برای نیازمندی های مشخص شده نرم افزار ارائه کند. طراحی در مهندسی نرم افزار بسیار مهم است، این در حالی است که بعضی از شرکت ها و تیم های نرم افزاری مرحله طراحی را انجام نمی دهند و یک راست سراغ برنامه نویسی می روند و انتظار خروجی با کیفیت را هم دارند. فاز طراحی اگر جدی گرفته شود و بر اساس استانداردهای مهندسی نرم افزار و ابزارهای آن انجام شود، می تواند کیفیت نرم افزار را تضمین کند و کار بخش های دیگر و مخصوصاً پیاده سازی را آسان کند.</p>
<h3><strong>پیاده سازی</strong></h3>
<p style="text-align:justify;">توسعه دهندگان بر اساس مستندات نیازمندی ها و راه حل های ارائه شده توسط مستندات طراحی، شروع به پیاده سازی نرم افزار می کنند. اگر مستندات نیازمندی ها و مستندات طراحی به صورت دقیق و به درستی تهیه شده باشند، معمولاً مشکل جدی ای در پیاده سازی پیش نخواهد آمد. تغییر در نیازمندی ها یا تغییر در طراحی در هنگام پیاده سازی برای کیفیت نرم افزار سم مهلکی است که تا جایی که می شود باید از آن اجتناب کرد. بر اساس تعریف های ارائه شده در بالا، اگر نرم افزار با کیفیت می خواهید باید در پیاده سازی، به طراحی تا جایی که می توانید وفادار باشید. البته چگونگی پیاده سازی نرم افزار هم بسیار اهمیت دارد. ممکن است یک پیاده سازی تمام نیازمندی های مشخص شده را برطرف کند اما پیاده سازی با کیفیتی نباشد. کیفیت در پیاده سازی نرم افزار مباحث زیادی دارد که در یک مطلب جداگانه به آن پرداخته خواهد شد.</p>
<h3><strong>تست</strong></h3>
<p style="text-align:justify;">تست نرم افزار پس از پیاده سازی، اگر به درستی انجام شود، کیفیت خروجی نرم افزار را به طرز شگرفی افزایش می دهد. در تست مشخص می شود که چه مشکلاتی در پیاده سازی وجود دارند که باید حل شوند. کیفیت نرم افزار با تعداد انجام تست های درست رابطه مستقیم دارد. هر چقدر بیشتر نرم افزار را تست کنیم، در انتها نرم افزارمان کیفیت بهتری خواهد داشت. با انجام تست های مکرر می توانید خروجی نهایی با کیفیت تری ارائه کنید و در نتیجه مشتریان راضی تری داشته باشید. در حال حاضر روش های بسیاری برای تست نرم افزار وجود دارند که همگی سعی می کنند تا کیفیت نرم افزار را بالا ببرند. چندی از متدولوژی های Agile در سیکل توسعه خود به صورت جدی از روش های تست نرم افزار استفاده می کنند تا از کیفیت محصولات نرم افزاری تولید شده اطمینان پیدا کنند. برای مثال TDD یا Test-Driven Development روشی است که برنامه نویسان را مجبور می کند تا قبل از کدنویسی، تست های مربوط به آن را بنویسند!</p>
<h3><strong>توزیع و استقرار</strong></h3>
<p style="text-align:justify;">پس از پیاده سازی نرم افزار، باید بتوان به خوبی خروجی آن را بین مشتریان (یا کاربران) توزیع کرد. توزیع در اینجا به معنی Deployment است که میزان رضایت کاربران از نحوه نصب و استقرار سیستم نرم افزاری مورد نظر است. خیلی ها توزیع و استقرار را در تعیین کیفیت نرم افزار بی اهمیت می دانند اما در واقع اینطور نیست و نرم افزاری از دید مشتری با کیفیت است که به خوبی نصب و مستقر شود.</p>
<h3><strong>آموزش و پشتیبانی</strong></h3>
<p style="text-align:justify;">نرم افزاری که کاربر نتواند از آن استفاده کند، بی کیفیت است! هر چقدر هم که در بخش های دیگر شما با کیفیت کار کرده باشید، اگر آموزش و پشتیبانی را جدی نگیرید، کیفیت کارهای خود را زیر سئوال برده اید. کیفیت برای نرم افزاری که از آن استفاده نشود بی معناست. باید برای استفاده از نرم افزار آموزش های لازم و کافی به کاربران داده شود و در هنگام بروز مشکل، هر چه سریعتر حل شود.</p>
<p><span style="color:#ffffff;">farasun.wordpress.com</span></p>
<p style="text-align:justify;">یادتان باشد که کیفیت نرم افزار یعنی کیفیت در تمام بخش های بالا! ناقص بودن کیفیت هر یک از موارد بالا می تواند کیفیت کل نرم افزار را تحت تاثیر قرار دهد. کیفیت نرم افزار شما، مشتری را خوشحال می کند و مشتری خوشحال یعنی سود بیشتر! پس کیفیت را جدی بگیرید!</p>
<p><em>(1) : IEEE 610.12-1990 Standard Glossary of Software Engineering Terminology</em></p>
<p style="text-align:justify;">در مطالب بعدی به مباحث بیشتری در مورد کیفیت نرم افزار خواهیم پرداخت، برای پیگیری آن ها می توانید <a href="http://feeds2.feedburner.com/Farasun">مشترک فید فراسان شوید</a>.</p>
<br />دسته‌بندی شده در: <a href='http://farasun.wordpress.com/category/%d9%85%d9%87%d9%86%d8%af%d8%b3%db%8c-%d9%86%d8%b1%d9%85-%d8%a7%d9%81%d8%b2%d8%a7%d8%b1/'>مهندسی نرم افزار</a> Tagged: <a href='http://farasun.wordpress.com/tag/article/'>Article</a>, <a href='http://farasun.wordpress.com/tag/software-quality/'>Software Quality</a>, <a href='http://farasun.wordpress.com/tag/software-testing/'>Software Testing</a>, <a href='http://farasun.wordpress.com/tag/test/'>Test</a>, <a href='http://farasun.wordpress.com/tag/%d9%85%d9%82%d8%a7%d9%84%d8%a7%d8%aa/'>مقالات</a>, <a href='http://farasun.wordpress.com/tag/%d9%85%d9%87%d9%86%d8%af%d8%b3%db%8c-%d9%86%d8%b1%d9%85-%d8%a7%d9%81%d8%b2%d8%a7%d8%b1/'>مهندسی نرم افزار</a>, <a href='http://farasun.wordpress.com/tag/%da%a9%db%8c%d9%81%db%8c%d8%aa-%d9%86%d8%b1%d9%85-%d8%a7%d9%81%d8%b2%d8%a7%d8%b1/'>کیفیت نرم افزار</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/farasun.wordpress.com/1926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/farasun.wordpress.com/1926/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/farasun.wordpress.com/1926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/farasun.wordpress.com/1926/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/farasun.wordpress.com/1926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/farasun.wordpress.com/1926/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/farasun.wordpress.com/1926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/farasun.wordpress.com/1926/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/farasun.wordpress.com/1926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/farasun.wordpress.com/1926/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/farasun.wordpress.com/1926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/farasun.wordpress.com/1926/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/farasun.wordpress.com/1926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/farasun.wordpress.com/1926/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1926&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://farasun.wordpress.com/2011/02/02/what-software-quality-realy-is/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">ایمان</media:title>
		</media:content>
	</item>
		<item>
		<title>مقایسه تجربی Entity Framework و NHibernate</title>
		<link>http://farasun.wordpress.com/2011/01/26/entity-framework-vs-nhibernate/</link>
		<comments>http://farasun.wordpress.com/2011/01/26/entity-framework-vs-nhibernate/#comments</comments>
		<pubDate>Wed, 26 Jan 2011 03:43:53 +0000</pubDate>
		<dc:creator>ایمان</dc:creator>
				<category><![CDATA[NHibernate]]></category>
		<category><![CDATA[دات نت]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[ORM]]></category>

		<guid isPermaLink="false">http://farasun.wordpress.com/?p=1916</guid>
		<description><![CDATA[اگر پست های اخیر این وبلاگ را خوانده باشید نباید با Entity Framework و NHibernate نا آشنا باشید. هر دو راه حلی برای دستیابی به داده ها در دات نت فریم ورک ارائه می کنند. Entity Framework محصول مایکروسافت است و NHibernate محصول جامعه اوپن سورس. من از هر دو در پروژه های واقعی استفاده [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1916&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<blockquote>
<p style="text-align:justify;">اگر پست های اخیر این وبلاگ را خوانده باشید نباید با <a href="http://farasun.wordpress.com/tag/entity-framework/">Entity Framework</a> و <a href="http://farasun.wordpress.com/tag/nhibernate/">NHibernate</a> نا آشنا باشید. هر دو راه حلی برای دستیابی به داده ها در دات نت فریم ورک ارائه می کنند.  Entity Framework محصول مایکروسافت است و NHibernate محصول جامعه اوپن  سورس. من از هر دو در پروژه های واقعی استفاده کرده ام و در مورد هر دو نتیجه رضایت بخش بوده است. در این مطلب نتیجه یک مقایسه تجربی را میان Entity Framework و NHibernate خواهید خواند که امیدوارم شما را در انتخاب هر کدام از آن ها کمک کند.</p>
</blockquote>
<p style="text-align:justify;"><strong>نگاشت کلاس ها</strong></p>
<p style="text-align:justify;">در NHibernate برای انجام عمل Mapping کلاس ها، (با صرف نظر از کتابخانه های کمکی) به ازای هر کلاس باید یک فایل نگاشت XML و برای تنظیم آن نیز یک فایل XML نوشته شود. زمانی که یک دیتابیس داریم و می خواهیم کلاس های مدل خود را بسازیم NHibernate ابزاری برای این کار ندارد (با صرف نظر از ابزارهای کمکی) و باید نگاشت را به صورت دستی انجام داد. اما با استفاده از کتابخانه های کمکی مثل Fluent NHibernate می توان بدون نوشتن حتی یک خط کد XML نگاشت کلاس ها و تنظیم NHinernate را به خوبی انجام داد. ابزارهای Designer متعددی هم در حال حاضر برای نگاشت یک دیتابیس موجود برای NHibernate ساخته شده اند.</p>
<p style="text-align:justify;">در Entity Framework انجام عمل Mapping با استفاده از Designer قدرتمند ویژوال استادیو به راحتی قابل انجام است و (با صرف نظر از نسخه جدید EF) این Designer فقط زمانی که یک دیتابیس وجود داشته باشد به کار می آید. شما می توانید ابتدا دیتابیس خود را بسازید و با Import کردن جدول های مورد نظر خود به صورت ویژوال عملیات Mapping را انجام دهید. سپس EF از روی آن، کلاس های دامین شما را با ارتباط های مناسب خواهد ساخت. در نسخه بعدی EF شما می توانید از روش هایی شبیه به Fluent NHibernate و <a href="http://farasun.wordpress.com/tag/castle-activerecord/">Castle ActiveRecord</a> برای ساختن کلاس های دامین خود و سپس نگاشت آن ها به یک دیتابیس استفاده کنید.</p>
<p style="text-align:justify;"><strong>انجام پرس و جو</strong></p>
<p style="text-align:justify;">Entity Framework دو روش را برای ایجاد و اجرای کوئری ها به شما می دهد. یک روش، دستوراتی کاملاً شبیبه به SQL دارد به نام Entity SQL Language و روش دیگر روش محبوب LINQ to Entitis است که اکثراً از این روش استفاده می کنند. روش اول کاملاً شبیه به استفاده از زبان SQL است، فقط در اینجا به جای استفاده از نام جداول اطلاعاتی از نام کلاس ها و به جای نام فیلدها از نام پراپرتی ها استفاده می کنید. در روش دوم شما تمام قدرت LINQ را برای بدست آوردن نتایج از کلاس های دامین پروژه خود خواهید داشت.</p>
<p style="text-align:justify;">در NHibernate برای کوئری گرفتن انتخاب های بیشتری دارید. این موضوع می تواند هم خوب باشد و هم بد! خوب است چون شما می توانید بر اساس نیاز خود و کاری که می خواهید انجام دهید یک روش را انتخاب کنید و بد است چون در بعضی مواقع باعث سردرگمی شما می شود. محبوب ترین روش در هر دوی این ORMها استفاده از LINQ است که تا نسخه قبلی NHibernate مشکلاتی در پشتیبانی کامل LINQ وجود داشت که در نسخه جدید تا حدود زیادی برطرف شده است. NHibernate از زبان HQL که یک SQL شیء گرا برای نوشتن کوئری است پشتیبانی می کند که برای کسانی که پیش زمینه SQL دارند کار را راحت می کند. Criteria API روش دیگری است که اگر نحوه استفاده از آن را یاد بگیرید تقریباً هر کوئری که نیاز داشته باشید را می توانید با آن بنویسید. در نسخه 3.0 NHibernate روش جدیدی به نام QueryOver اضافه شده که همان Criteria API را با استفاده از اکستنشن متدها و عبارت های lambda به صورت type safe ارائه می دهد. کوئری های نوشته شده به این روش شباهت زیادی به کوئری های نوشته شده با LINQ دارند. MultiQuery نام روش دیگری است که NHibernate را قادر می سازد که فقط با یک بار رفت و برگشت به دیتابیس چند کوئری را اجرا کند و نتایج آن را برگرداند.</p>
<p style="text-align:justify;"><strong>سادگی در استفاده</strong></p>
<p style="text-align:justify;">فکر میکنم همه بدانیم که استفاده از Entity Framework در عمل از استفاده از NHibernate به مراتب ساده تر است. ابزارهایی که ویژوال استادیو برای ایجاد کلاس های دامین پروژه برای Entity Framework در اختیار شما قرار می دهد کار شما را بسیار آسان می کند. برای استفاده از EF شما نیازی به دانستن چیز خاصی ندارید و همین که کلاس های شما با استفاده از ویزارد ساخته شدند می توانید شروع به استفاده از آن ها کنید. اما در NH شما نیاز به یادگیری و مطالعه بیشتری دارید و احتمال برخورد به مشکل در آن نسبت به EF بسیار بیشتر است. اگر اهل مطالعه و یادگیری نیستید و در برنامه نویسی بی حوصله اید به هیچ وجه از NHibernate استفاده نکنید!</p>
<p style="text-align:justify;"><strong>پشتیبانی از دیتابیس های مختلف</strong></p>
<p style="text-align:justify;">EF و NH هر دو از دیتابیس های محتلفی پشتیبانی می کنند. اما پشتیبانی کردن آن ها با یکدیگر تفاوت دارد. EF محصول مایکروسافت است و به صورت توکار فقط از SQL Server پشتیبانی می کند. برای دیتابیس های دیگر مثل اوراکل یا Sybase باید از پروایدرهای تجاری استفاده کنید. به تازگی MySql و SQLite پروایدرهای خود را برای EF ارائه کرده اند و اوراکل نیز قرار است در نیمه دوم سال 2011 این کار را انجام دهد. البته شما خودتان هم می توانید برای دیتابیس مورد نیاز خود یک پروایدر برای EF بنویسید.</p>
<p style="text-align:justify;">در مورد NH چون یک محصول اوپن سورس است به صورت پیش فرض از دیتابیس های مختلفی مثل اوراکل، MySql، SQLite، SQL Server، Firebird پشتیبانی می کند.</p>
<p style="text-align:justify;"><strong>Second Level Cache</strong></p>
<p style="text-align:justify;">استفاده از Caching در یک ORM معمولاً در دو سطح امکان پذیر است. سطح اول که در سطح تراکنش است و تضمین می کند که دو رکورد یکسان در یک Session دو بار خوانده نخواهند شد. سطح دوم Cache در سطح DAL انجام می شود و باعث بالا رفتن سرعت اجرای کوئری ها بدون اتصال دوباره به دیتابیس می شود و فقط محدود به یک Session نخواهد شد. EF  تا نسخه 4.0 این قابلیت را به صورت توکار ارائه نمی کند اما NHibernate تعدادی Provider مناسب برای این کار دارد.</p>
<p style="text-align:justify;"><strong>کتابخانه های کمکی</strong></p>
<p style="text-align:justify;">در حال حاضر تعداد کتابخانه های کمکی NHibernate به علت کدباز بودن آن بسیار زیاد است. پروژه هایی مثل NHibernate Search و NH Validator که توسط جامعه کاربری توسعه می یابند برای EF وجود ندارند. برای EF باید به محصولات تجاری شرکت ها مراجعه کنید.</p>
<p style="text-align:justify;"><strong>کارایی و سرعت </strong></p>
<p style="text-align:justify;">Entity Framework و NHibernate به اندازه کافی کارایی خوبی دارند اگر به درستی به کار گرفته شوند. نکته ای که وجود دارد این است که با EF شما به سختی می توانید اشتباه کنید اما در NHibernate اشتباه کردن به راحتی آب خوردن است! در Entity Framework بدون اینکه شما کاری انجام دهید، کارایی خوبی خواهید داشت اما در مورد NHibernate اینطور نیست. اگر مستندات NHibernate را کامل بخوانید و تمام ملاحظات کارایی را در پیاده سازی لحاظ کنید به کارایی و سرعت بالاتری از EF هم خواهید رسید.</p>
<p style="text-align:justify;"><strong>زمان یادگیری </strong></p>
<p style="text-align:justify;">همانطور که گفته شد، یادگیری NHibernate معمولاً زمان بیشتری نسبت به Entity Framework نیاز دارد. با NHibernate شما نیاز به یادگیری مفاهیم بیشتری دارید و معمولاً برای حل یک مشکل زمان بیشتری را باید صرف کنید. هر دو، کتاب ها و منابع خوبی برای یادگیری دارند.</p>
<p style="text-align:justify;"><strong>نتیجه</strong></p>
<p style="text-align:justify;">برای تصمیم گیری درباره استفاده از هر کدام از این ORMها فاکتورهای دیگری نیز موثر هستند که در این مطلب به آن ها اشاره نشد. NHibernate در حال حاضر انتخاب های بیشتری را نسبت به EF ارائه می دهد و شما کنترل بیشتری بر روی ویژگی های آن دارید. انتخاب های بیشتر باعث پیچیده تر شدن NH شده است. EF به جای آن از سادگی خاص محصولات مایکروسافت بهره می برد و برای راه اندازی یک پروژه که وقت کمی دارد بسیار مناسب است. هر چند انتخاب ها و ویژگی های بیشتر همیشه نکته مثبتی نیستند، چون اگر ندانید چطور انتخاب کنید و یا نحوه کار ویژگی مورد نظر را درک نکرده باشید، به راحتی می توانید اشتباه کنید. EF و NH هر دو وظیفه های مهم یک ORM را به خوبی انجام می دهند و کمی در جزئیات با هم متفاوت اند که در این مطلب به آن ها اشاره شد.</p>
<br />دسته‌بندی شده در: <a href='http://farasun.wordpress.com/category/nhibernate/'>NHibernate</a>, <a href='http://farasun.wordpress.com/category/%d8%af%d8%a7%d8%aa-%d9%86%d8%aa/'>دات نت</a> Tagged: <a href='http://farasun.wordpress.com/tag/net/'>.NET</a>, <a href='http://farasun.wordpress.com/tag/entity-framework/'>Entity Framework</a>, <a href='http://farasun.wordpress.com/tag/nhibernate/'>NHibernate</a>, <a href='http://farasun.wordpress.com/tag/orm/'>ORM</a>, <a href='http://farasun.wordpress.com/tag/%d8%af%d8%a7%d8%aa-%d9%86%d8%aa/'>دات نت</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/farasun.wordpress.com/1916/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/farasun.wordpress.com/1916/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/farasun.wordpress.com/1916/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/farasun.wordpress.com/1916/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/farasun.wordpress.com/1916/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/farasun.wordpress.com/1916/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/farasun.wordpress.com/1916/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/farasun.wordpress.com/1916/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/farasun.wordpress.com/1916/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/farasun.wordpress.com/1916/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/farasun.wordpress.com/1916/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/farasun.wordpress.com/1916/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/farasun.wordpress.com/1916/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/farasun.wordpress.com/1916/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1916&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://farasun.wordpress.com/2011/01/26/entity-framework-vs-nhibernate/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">ایمان</media:title>
		</media:content>
	</item>
		<item>
		<title>10 نکته برای نوشتن بهتر توضیحات در سورس کد</title>
		<link>http://farasun.wordpress.com/2011/01/16/tips-for-commenting-your-codes/</link>
		<comments>http://farasun.wordpress.com/2011/01/16/tips-for-commenting-your-codes/#comments</comments>
		<pubDate>Sun, 16 Jan 2011 19:23:26 +0000</pubDate>
		<dc:creator>ایمان</dc:creator>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[Code Commenting]]></category>
		<category><![CDATA[Commenting]]></category>
		<category><![CDATA[Document Code]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://farasun.wordpress.com/?p=1909</guid>
		<description><![CDATA[نوشتن توضیحات یا Comment در تمام زبان های برنامه نویسی مرسوم است. برنامه نویس ها معمولاً برای خواناتر شدن کدهای خود توضیحات می نویسند، اما در برخی مواقع به طور خواسته یا ناخواسته این توضیحات به جای اینکه سودمند باشند آزاردهنده می شوند. در این مطلب نکاتی ذکر خواهد شد که با بکار بستن آن [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1909&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">نوشتن توضیحات یا Comment در تمام زبان های برنامه نویسی مرسوم است. برنامه نویس ها معمولاً برای خواناتر شدن کدهای خود توضیحات می نویسند، اما در برخی مواقع به طور خواسته یا ناخواسته این توضیحات به جای اینکه سودمند باشند آزاردهنده می شوند. در این مطلب نکاتی ذکر خواهد شد که با بکار بستن آن ها می توان توضیحاتی خوانا و قابل درک در برنامه ها نوشت.</p>
<p style="text-align:justify;"><strong>1) توضیحات را مرتب و پشت سر هم بنویسید : </strong>هنگامی که برای چند خط کد به صورت متوالی کامنت می نویسید بهتر است تمام کامنت ها در یک ستون عمودی تراز شوند تا خواناتر به نظر برسند.</p>
<p style="text-align:justify;" dir="ltr">List&lt;User&gt; users = User.GetAll(); <span style="color:#339966;">//Get all available users</span><br />
users.Add(aUser);                 <span style="color:#339966;">//Add a User</span></p>
<p style="text-align:justify;"><strong>2) در کوتاه ترین جملات منظور خود را برسانید :</strong> سعی نکنید قضیه را بپیچانید! با کمترین کلمات ممکن منظور خود را برسانید و از نوشتن توضیحات اضافی پرهیز کنید.</p>
<p style="text-align:justify;"><strong>3) بدانید برای چه چیزی توضیح می نویسید :</strong> نوشتن کامنت برای یک کلاس با نوشتن کامنت برای یک پراپرتی یا یک متد فرق می کند. برای یک کلاس شما باید یک خلاصه توضیحات، نام نویسنده و تاریخ آخرین تغییر را بنویسید و کاری را که این کلاس قرار است انجام بدهد را مشخص کنید. برای یک متد شما باید علاوه بر نوشتن یک توضیح خلاصه، توضیحی در مورد هر یک از پارامترهای متد و نوع خروجی متد بنویسید.</p>
<p style="text-align:justify;"><strong>4) به شعور خواننده توهین نکنید! :</strong> از توضیح بدیهیات پرهیز کنید. نوشتن توضیحاتی شبیه به توضیحات زیر را کنار بگذارید :</p>
<p style="text-align:justify;" dir="ltr">if(CanSave == true)<span style="color:#339966;"> //if User can Save</span><br />
SaveToFile();       <span style="color:#339966;">//then Save it to file!</span></p>
<p style="text-align:justify;">نوشتن این گونه توضیحات به جز اینکه وقت شما و خواننده کد را بگیرد، هیچ سود دیگری ندارد.</p>
<p style="text-align:justify;"><strong>5) از یک استاندارد مشخص پیروی کنید : </strong>مخصوصاً وقتی با یک تیم برنامه می نویسید این مورد را حتماً رعایت کنید. کامنت کردن کدها بر اساس استاندارد و استفاده از ابزارهای مربوطه بسیار توصیه می شود. به طور مثال در C# استفاده از توضیحات XML مرسوم است و کار شما را آسان می کند.</p>
<p style="text-align:justify;"><strong>6) توضیحات را همزمان با نوشتن کد بنویسید : </strong>زمانی که شروع به کد نویسی می کنید ذهن شما بر روی مسئله جاری متمرکز شده است و بهترین زمان برای نوشتن توضیحات در مورد کد مورد نظر است. اگر نوشتن توضیحات را به زمان دیگری موکول کنید ممکن است توضیحاتی که بعداً می نویسید همانی نباشد که در ابتدا در ذهن شما بوده است.</p>
<p style="text-align:justify;"><strong>7) طوری توضیحات بنویسید که دوست دارید دیگران برای شما بنویسند! :</strong> موقعیتی را در نظر بگیرید که باید کدهای کلاسی که یک برنامه نویس دیگر نوشته است را تغییر دهید و کدهای نوشته شده هم آنقدر ناخواناست که بدون خواندن توضیحات نمی توانید از آن ها سر در بیاورید. اگر آن برنامه نویس توضیحات خوانایی برای این کدها ننوشته باشد کار شما برای تغییر کدها بسیار سخت خواهد بود. پس طوری کامنت بنویسید که برنامه نویس بخت برگشته ای که بعد از شما می خواهد کدها را تغییر دهد عذاب نکشد! با این کار اول خودمان سود خواهیم کرد، زیرا ممکن است اولین نفری باشیم که در آینده می خواهیم کدهای خودمان را تغییر دهیم.</p>
<p style="text-align:justify;"><strong>8 ) با تغییر کدها، توضیحات را تغییر دهید :</strong> همیشه کامنت ها را به صورت موازی با کدهای خود تغییر دهید. اگر کدهای خود را تغییر دهید اما توضیحاتش را آپدیت نکنید، به جای اینکه این توضیحات در آینده سودمند باشند، نگهداری کد را سخت تر خواهند کرد. نداشتن توضیحات در سورس کد بهتر از داشتن توضیحات غلط در آن است. حواستان به ابزارهای Refactoring باشد که کدها را به صورت خودکار تغییر می دهند اما توضیحات را بدون تغییر رها می کنند.</p>
<p style="text-align:justify;"><strong>9) از برچسب های معنی دار استفاده کنید :</strong> زمانی که در یک تیم کار می کنید، سعی کنید از برچسب های معنی دار و قراردادی بین اعضای تیم برای منظورهای مختلف استفاده کنید. به طور مثال بسیاری از برنامه نویس ها از برچسبی مثل &#8220;//TODO :&#8221; استفاده می کنند تا مشخص کنند قسمتی از کد نیاز به کار اضافی دارد و یا از برچسبی مثل &#8220;Temp&#8221; جهت نوشتن کدهای موقت که بعداً باید حذف یا جایگزین شوند استفاده می کنند. شاید برچسب ها توضیحی در مورد کد نباشند، اما به جای آن پیغامی را به شما و دیگر هم تیمی های شما یادآوری می کنند.</p>
<p style="text-align:justify;"><strong>10) کد خوب، خودش را توضیح می دهد :</strong> همیشه بخاطر داشته باشید که <a href="http://softing.wordpress.com/2010/09/12/3/" target="_blank">کد خوب بهترین داکیومنت برای خودش است</a>. اگر دوست ندارید یا حوصله ندارید برای کدهایتان کامنت بنویسید بهتر است کدهایی بنویسید که خودشان را توضیح می دهند. برای نوشتن چنین کدهایی باید نام متغیرها، کلاس ها، متدها و پراپرتی ها را کاملاً معنی دار انتخاب کنید. به طور مثال شما نیازی به نوشتن کامنت برای متد زیر ندارید :</p>
<p style="text-align:justify;" dir="ltr">AddUserToDatabase(User user)</p>
<p style="text-align:justify;">هر کسی با مشاهده متد بالا متوجه می شود که کار آن اضافه کردن یک کاربر به دیتابیس است.</p>
<p style="text-align:justify;">&nbsp;</p>
<p style="text-align:justify;">منبع :<a title="13 Tips to comment your code" href="http://www.devtopics.com/13-tips-to-comment-your-code/"> 13 Tips to Comment Your Code</a></p>
<br />دسته‌بندی شده در: <a href='http://farasun.wordpress.com/category/%d9%85%d9%82%d8%a7%d9%84%d8%a7%d8%aa/'>مقالات</a> Tagged: <a href='http://farasun.wordpress.com/tag/code-commenting/'>Code Commenting</a>, <a href='http://farasun.wordpress.com/tag/commenting/'>Commenting</a>, <a href='http://farasun.wordpress.com/tag/document-code/'>Document Code</a>, <a href='http://farasun.wordpress.com/tag/programming/'>Programming</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/farasun.wordpress.com/1909/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/farasun.wordpress.com/1909/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/farasun.wordpress.com/1909/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/farasun.wordpress.com/1909/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/farasun.wordpress.com/1909/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/farasun.wordpress.com/1909/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/farasun.wordpress.com/1909/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/farasun.wordpress.com/1909/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/farasun.wordpress.com/1909/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/farasun.wordpress.com/1909/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/farasun.wordpress.com/1909/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/farasun.wordpress.com/1909/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/farasun.wordpress.com/1909/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/farasun.wordpress.com/1909/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1909&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://farasun.wordpress.com/2011/01/16/tips-for-commenting-your-codes/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">ایمان</media:title>
		</media:content>
	</item>
		<item>
		<title>استفاده از Castle ActiveRecord در پروژه های تحت وب</title>
		<link>http://farasun.wordpress.com/2011/01/04/using-castle-activerecord-in-web-projects/</link>
		<comments>http://farasun.wordpress.com/2011/01/04/using-castle-activerecord-in-web-projects/#comments</comments>
		<pubDate>Tue, 04 Jan 2011 19:25:03 +0000</pubDate>
		<dc:creator>ایمان</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[NHibernate]]></category>
		<category><![CDATA[Article]]></category>
		<category><![CDATA[Castle ActiveRecord]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[وب]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[آموزش]]></category>

		<guid isPermaLink="false">http://farasun.wordpress.com/?p=1902</guid>
		<description><![CDATA[در سری آموزشی Castle ActiveRecord با یک پروژه مثال تحت ویندوز پیش رفتیم و همانطور که مشاهده کردید نکته خاصی در مورد نوع پروژه که تحت ویندوز بود وجود نداشت. اما استفاده از یک ORM در پروژه های تحت وب به علت ماهیت خاص وب، استراتژی خاصی را نیز می طلبد. در یک پروژه تحت [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1902&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">در <a href="http://farasun.wordpress.com/tag/castle-activerecord">سری آموزشی Castle ActiveRecord</a> با یک پروژه مثال تحت ویندوز پیش رفتیم و همانطور که مشاهده کردید نکته  خاصی در مورد نوع پروژه که تحت ویندوز بود وجود نداشت. اما استفاده از یک  ORM در پروژه های تحت وب به علت ماهیت خاص وب، استراتژی خاصی را نیز می  طلبد. در یک پروژه تحت وب، ممکن است کاربران زیادی وجود داشته باشند که هر  کدام درخواست هایی را برای برنامه ما می فرستند که اکثر این درخواست ها  مربوط به دسترسی به داده ها باشند.</p>
<p style="text-align:justify;">ساده  ترین روش برای استفاده از Castle ActiveRecord در یک برنامه تحت وب اضافه  کردن خاصیت isWeb=&#8221;true&#8221; در بخش کانفیگ CAR در فایل web.config است. این  کار باعث می شود تا CAR مجبور به استفاده از استراتژی متفاوتی برای نگهداری  نمونه های Sessionهای NHibernate بکار بگیرد. در اینجا قصد نوشتن توضیحات  اضافه را ندارم، بهتر است نمونه کانفیگ ActiveRecord برای یک برنامه تحت وب  را مشاهده کنید :</p>
<pre class="brush: xml;">
&lt;activerecord
 isWeb=&quot;true&quot;
 isDebug=&quot;true&quot;
 threadinfotype=&quot;Castle.ActiveRecord.Framework.Scopes.HybridWebThreadScopeInfo, Castle.ActiveRecord&quot;&gt;
 &lt;config&gt;
 &lt;add key=&quot;connection.driver_class&quot;
 value=&quot;NHibernate.Driver.SqlClientDriver&quot;/&gt;
 &lt;add key=&quot;dialect&quot;
 value=&quot;NHibernate.Dialect.MsSql2008Dialect&quot;/&gt;
 &lt;add key=&quot;connection.provider&quot;
 value=&quot;NHibernate.Connection.DriverConnectionProvider&quot;/&gt;
 &lt;add key=&quot;connection.connection_string&quot;
 value=&quot;Data Source=.\SQLEXPRESS;Initial Catalog=RegisterUsers;Integrated Security=True;Pooling=False&quot;/&gt;
 &lt;add key=&quot;proxyfactory.factory_class&quot;
 value=&quot;NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle&quot;/&gt;
 &lt;add key=&quot;SessionScopeWebModule&quot;
 value=&quot;Castle.ActiveRecord.Framework.SessionScopeWebModule&quot;
 name=&quot;SessionScopeWebModule&quot;
 type=&quot;Castle.ActiveRecord.Framework.SessionScopeWebModule&quot;/&gt;
 &lt;/config&gt;
 &lt;/activerecord&gt;
 </pre>
<p style="text-align:justify;">برای  اینکه بتوانیم از الگوی Session per Request استفاده کنیم (همانطور که برای  NHibernate پیاده سازی می کنند) باید یک کلاس با کدهای زیر به پروژه  خودمان اضافه کنیم :</p>
<pre class="brush: csharp;">
public class SessionModule : HttpApplication
{
 public SessionModule()
 {
 BeginRequest += new EventHandler(OnBeginRequest);
 EndRequest += new EventHandler(OnEndRequest);
 }

 protected void Application_Start(Object sender, EventArgs e)
 {
 BeginRequest += new EventHandler(OnBeginRequest);
 EndRequest += new EventHandler(OnEndRequest);
 }

 public void OnBeginRequest(object sender, EventArgs e)
 {
 HttpContext.Current.Items.Add(&quot;ar.sessionscope&quot;, new SessionScope());
 }

 public void OnEndRequest(object sender, EventArgs e)
 {
 try
 {
 SessionScope scope = HttpContext.Current.Items[&quot;ar.sessionscope&quot;] as SessionScope;

 if (scope != null)
 {
 scope.Dispose();
 }
 }
 catch (Exception ex)
 {
 HttpContext.Current.Trace.Warn(&quot;Error&quot;, &quot;EndRequest: &quot; + ex.Message, ex);
 }
 }
}
</pre>
<p>و البته خطوط زیر را به بخش system.web فایل web.config اضافه کنیم :</p>
<pre class="brush: xml;">
&lt;httpModules&gt;
 &lt;add name=&quot;ar.sessionscope&quot;
 type=&quot;Castle.ActiveRecord.Framework.SessionScopeWebModule, Castle.ActiveRecord&quot;/&gt;
&lt;/httpModules&gt;
</pre>
<p style="text-align:justify;">هنوز  کارمان تمام نشده. باید ActiveRecord را در فقط برای اولین اجرای برنامه  راه اندازی کنیم. اگر یادتان باشد در یک برنامه تحت ویندوز، راه اندازه  اولیه ActiveRecord را در هنگام اجرای برنامه در متد main فایل Program.cs  می نوشتیم. در یک برنامه تحت وب این کار را باید در Application_Start  انجام دهیم. این متد در یک برنامه تحت وب فقط یکبار و در زمان اجرای اولیه  صدا زده می شود و بهترین مکان برای راه اندازی اولیه فریم ورک ActiveRecord  است. این متد زمانی که یک فایل Global.asax به پروژه خود اضافه می کنید  ایجاد می شود. بدنه این متد برای راه اندازی اولیه ActiveRecord چیزی شبیه  کدهای زیر می تواند باشد :</p>
<pre class="brush: csharp;">
protected void Application_Start(object sender, EventArgs e)
{
 IConfigurationSource configSource = ConfigurationManager.GetSection(&quot;activerecord&quot;)
 as IConfigurationSource;
 ActiveRecordStarter.Initialize(typeof(User).Assembly, configSource);
}
</pre>
<p>برای درک بهتر مطلب می توانید پروژه مثال این مطلب را از<a title="Download Sample Project" href="http://farasun.codeplex.com/SourceControl/changeset/changes/61354"> اینجا</a> دریافت کنید.</p>
<br />دسته‌بندی شده در: <a href='http://farasun.wordpress.com/category/aspnet/'>ASP.NET</a>, <a href='http://farasun.wordpress.com/category/nhibernate/'>NHibernate</a> Tagged: <a href='http://farasun.wordpress.com/tag/article/'>Article</a>, <a href='http://farasun.wordpress.com/tag/aspnet/'>ASP.NET</a>, <a href='http://farasun.wordpress.com/tag/castle-activerecord/'>Castle ActiveRecord</a>, <a href='http://farasun.wordpress.com/tag/nhibernate/'>NHibernate</a>, <a href='http://farasun.wordpress.com/tag/orm/'>ORM</a>, <a href='http://farasun.wordpress.com/tag/%d9%88%d8%a8/'>وب</a>, <a href='http://farasun.wordpress.com/tag/web-development/'>Web Development</a>, <a href='http://farasun.wordpress.com/tag/%d8%a2%d9%85%d9%88%d8%b2%d8%b4/'>آموزش</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/farasun.wordpress.com/1902/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/farasun.wordpress.com/1902/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/farasun.wordpress.com/1902/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/farasun.wordpress.com/1902/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/farasun.wordpress.com/1902/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/farasun.wordpress.com/1902/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/farasun.wordpress.com/1902/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/farasun.wordpress.com/1902/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/farasun.wordpress.com/1902/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/farasun.wordpress.com/1902/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/farasun.wordpress.com/1902/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/farasun.wordpress.com/1902/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/farasun.wordpress.com/1902/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/farasun.wordpress.com/1902/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1902&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://farasun.wordpress.com/2011/01/04/using-castle-activerecord-in-web-projects/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">ایمان</media:title>
		</media:content>
	</item>
		<item>
		<title>استفاده از jQuery UI Dialog در ASP.NET</title>
		<link>http://farasun.wordpress.com/2010/12/25/using-jquery-ui-dialog-with-asp-net/</link>
		<comments>http://farasun.wordpress.com/2010/12/25/using-jquery-ui-dialog-with-asp-net/#comments</comments>
		<pubDate>Sat, 25 Dec 2010 18:47:08 +0000</pubDate>
		<dc:creator>ایمان</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[مقالات]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://farasun.wordpress.com/?p=1891</guid>
		<description><![CDATA[یکی از نیازهای مهم برنامه نویسان وب، مخصوصاً هنگام توسعه وب اپلیکیشن ها، استفاده از دیالوگ ها برای کاربردهای مختلف است. در حالی که در برنامه های ویندوزی استفاده از پنجره های دیالوگ امری رایج و ساده است، در محیط وب اینگونه نیست. در واقع در وب چیزی که به عنوان دیالوگ در ویندوز می [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1891&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">یکی از نیازهای مهم برنامه نویسان وب، مخصوصاً هنگام توسعه وب اپلیکیشن ها، استفاده از دیالوگ ها برای کاربردهای مختلف است. در حالی که در برنامه های ویندوزی استفاده از پنجره های دیالوگ امری رایج و ساده است، در محیط وب اینگونه نیست. در واقع در وب چیزی که به عنوان دیالوگ در ویندوز می شناسیم وجود ندارد، و باید با همین صفحات معمولی و مقداری کد جاوا اسکریپت یک پنجره دیالوگ را ایجاد کنیم. این مسئله در برخی مواقع واقعاً مشکل ساز می شود و دست برنامه نویس را می بندد.</p>
<p style="text-align:justify;">خوشبختانه کتابخانه jQuery UI دارای یک کامپوننت Dialog مناسب برای استفاده در محیط وب است که با تمامی مرورگرهای مدرن سازگاری کامل دارد و به علت اینکه بر روی کتابخانه jQuery کار می کند در تمام پلت فرم های توسعه وب قابل استفاده است.</p>
<p style="text-align:justify;">برای استفاده از این Dialog در یک صفحه ASP.NET باید کتابخانه های <a href="http://jquery.com/">jQuery</a> و <a href="http://jqueryui.com/download" target="_blank">jQuery UI</a> را دانلود کنید و در صفحه مورد نظر خود به آن ها ارجاع اسکریپتی بدهید. در این مطلب یک مثال ساده در مورد استفاده از jQuery UI Dialog  را توضیح خواهیم داد. پروژه مثال این مطلب را از <a title="Download Sample Project" href="http://farasun.codeplex.com/SourceControl/changeset/view/61226" target="_blank">اینجا</a> دریافت کنید. قصد ندارم تمام کدهای نوشته شده در این پروژه مثال را توضیح بدهم، فقط نکات مهم مربوط به موضوع بحث را خواهید خواند. خواندن سورس کد و مشاهده مثال بهتر از توضیحات متنی به شما کمک می کند.</p>
<p style="text-align:justify;">پس از دانلود و اجرای پروژه، با یک صفحه ساده مواجه خواهید شد که یک دکمه با عنوان Set Values در آن وجود دارد. با کلیک کردن بر روی این دکمه یک دیالوگ jQuery شبیه به تصویر زیر خواهید داشت :</p>
<p style="text-align:justify;"><img class="aligncenter size-full wp-image-1896" title="jQuery UI Dialog Example" src="http://farasun.files.wordpress.com/2010/12/jquery-ui-dialog.png?w=320&#038;h=286" alt="jQuery UI Dialog Example" width="320" height="286" />دکمه Cancel دیالوگ را می بندد و دکمه OK برچسب های روی صفحه را با مقادیر تکست باکس ها هماهنگ می کند. jQuery UI Dialog در حالت معمول بعد از تگ form در ASP.NET رندر می شود که این باعث می شود تا دکمه های موجود در دیالوگ هیچ Post Backی به صفحه نداشته باشند که البته این مشکل به راحتی حل می شود. برای اینکه دکمه های موجود در دیالوگ بدون رفرش شدن صفحه کار خود را انجام بدهند، محتویات دیالوگ را درون یک UpdatePanel قرار می دهیم. مهمترین کدهایی که در مورد آن ها بحث می کنیم، کدهای جاوا اسکریپت زیر هستند :</p>
<pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot;&gt;
 $(document).ready(function () {
 $('#divValues').dialog({
 autoOpen: false,
 draggable: true,
 maxHeight: 440,
 width: 400,
 modal: true,
 title: &quot;Enter values&quot;,
 open: function (type, data) {
 $(this).parent().appendTo(&quot;form&quot;);
 }
 });
 });

 function openDialog(id) {
 $('#' + id).dialog(&quot;open&quot;);
 }

 function closeDialog(id) {
 $('#' + id).dialog(&quot;close&quot;);
 }

 &lt;/script&gt;</pre>
<p style="text-align:justify;">در واقع این کدهای بالا هستند که دیالوگ jQuery را می سازند و آن را باز و بسته می کنند. علامت $ که در ابتدای کد بکار رفته نشان دهنده این است که در حال استفاده از توابع کتابخانه jQuery هستیم. تابع اول دیالوگ را با خصوصیات مشخص شده مقدار دهی می کند. لیست کامل این خصوصیات را می توانید <a href="http://jqueryui.com/demos/dialog/">اینجا</a> مشاهده کنید و بر اساس نیاز خود تغییر دهید. بعد از اجرای برنامه، تا زمانی که تابع openDialog صدا زده نشود، دیالوگ ما هم نشان داده نخواهد شد و در واقع jQuery آن را از دید کاربر مخفی نگه خواهد داشت. محتویات یک دیالوگ باید در یک div قرار بگیرند که نام آن باید برای dialog مشخص شود. نکته ای که شما به عنوان یک برنامه نویس ASP.NET در این مورد باید بدانید این است که حتماً UpdatePanel دیالوگ را داخل این div قرار دهید تا کدهایتان به درستی کار کند.</p>
<p style="text-align:justify;">ویژگی خوب کتابخانه jQuery UI سبک بودن و سازگار بودن با اکثر مرورگرهای مدرن امروزی است. برای تغییر ظاهر دیالوگ هم دست شما بسیار باز است و می توانید از<a href="http://jqueryui.com/themeroller" target="_blank"> تم های آماده jQuery UI</a> استفاده کنید و یا حتی استایل خود را برای آن بسازید.</p>
<p><a title="Download Sample Project" href="http://farasun.codeplex.com/SourceControl/changeset/view/61226" target="_blank"><strong>دریافت پروژه مثال</strong></a></p>
<br />دسته‌بندی شده در: <a href='http://farasun.wordpress.com/category/aspnet/'>ASP.NET</a>, <a href='http://farasun.wordpress.com/category/%d9%85%d9%82%d8%a7%d9%84%d8%a7%d8%aa/'>مقالات</a> Tagged: <a href='http://farasun.wordpress.com/tag/net/'>.NET</a>, <a href='http://farasun.wordpress.com/tag/aspnet/'>ASP.NET</a>, <a href='http://farasun.wordpress.com/tag/c/'>C#</a>, <a href='http://farasun.wordpress.com/tag/jquery/'>jQuery</a>, <a href='http://farasun.wordpress.com/tag/jquery-ui/'>jQuery UI</a>, <a href='http://farasun.wordpress.com/tag/web-development/'>Web Development</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/farasun.wordpress.com/1891/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/farasun.wordpress.com/1891/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/farasun.wordpress.com/1891/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/farasun.wordpress.com/1891/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/farasun.wordpress.com/1891/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/farasun.wordpress.com/1891/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/farasun.wordpress.com/1891/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/farasun.wordpress.com/1891/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/farasun.wordpress.com/1891/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/farasun.wordpress.com/1891/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/farasun.wordpress.com/1891/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/farasun.wordpress.com/1891/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/farasun.wordpress.com/1891/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/farasun.wordpress.com/1891/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1891&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://farasun.wordpress.com/2010/12/25/using-jquery-ui-dialog-with-asp-net/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">ایمان</media:title>
		</media:content>

		<media:content url="http://farasun.files.wordpress.com/2010/12/jquery-ui-dialog.png" medium="image">
			<media:title type="html">jQuery UI Dialog Example</media:title>
		</media:content>
	</item>
		<item>
		<title>یادگیری Castle ActiveRecord با مثال – قسمت هفتم</title>
		<link>http://farasun.wordpress.com/2010/12/22/learn-castle-activerecord-with-example-7/</link>
		<comments>http://farasun.wordpress.com/2010/12/22/learn-castle-activerecord-with-example-7/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 17:05:41 +0000</pubDate>
		<dc:creator>ایمان</dc:creator>
				<category><![CDATA[NHibernate]]></category>
		<category><![CDATA[Castle ActiveRecord]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[آموزش NHibernate]]></category>

		<guid isPermaLink="false">http://farasun.wordpress.com/?p=1883</guid>
		<description><![CDATA[قسمت اول &#124; قسمت دوم &#124; قسمت سوم &#124; قسمت چهارم &#124; قسمت پنجم &#124; قسمت ششم نکته : اگر از گوگل ریدر یا هر فیدخوان دیگری استفاده می کنید و کدها را به درستی مشاهده نمی کنید، لطفاً مطلب اصلی را در وبلاگ بخوانید. یکی از مزیت های مهم استفاده از NHibernate که بسیاری [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1883&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="../2010/10/28/learn-castle-activerecord-with-example/">قسمت اول</a> | <a href="../2010/10/30/learn-castle-activerecord-with-example-2/">قسمت دوم</a> | <a href="../2010/11/03/learn-castle-activerecord-with-example-3/">قسمت سوم</a> | <a href="../2010/11/14/learn-castle-activerecord-with-example-4/">قسمت چهارم</a> | <a href="../2010/11/26/learn-castle-activerecord-with-example-5/">قسمت پنجم </a>| <a href="../2010/12/05/learn-castle-activerecord-with-example-6/">قسمت ششم</a></p>
<p><span style="color:#888888;">نکته : اگر از گوگل ریدر یا هر فیدخوان دیگری استفاده می کنید و کدها را به درستی مشاهده نمی کنید، لطفاً </span><a href="http://wp.me/p4fho-un"><span style="color:#888888;">مطلب اصلی</span></a> <a href="http://wp.me/p4fho-tC"> </a><span style="color:#888888;"> را در وبلاگ بخوانید.</span></p>
<p style="text-align:justify;">یکی از مزیت های مهم استفاده از <a href="../tag/nhibernate/">NHibernate</a> که بسیاری از شرکت ها و توسعه دهندگان فقط به همین دلیل از آن در پروژه ها   استفاده می کنند، پشتیبانی از پایگاه داده های محبوبی مثل Oracle, SQL   Server, MySQL, Firebird و SQLite است. در این قسمت یاد خواهیم گرفت که   چطور <a href="../tag/castle-activerecord/">Castle ActiveRecord</a> را برای کار با پایگاه داده های مختلف تنظیم کنیم.</p>
<p style="text-align:justify;">اگر   خاطرتان باشد در برنامه ویندوزی مثالی که نوشتیم تنظیمات CAR را در فایل   App.config ذخیره کردیم (در برنامه های وب در فایل Web.config). این فایل   را باز کنید و برای دیتابیس های مختلف به صورت زیر تغییر دهید :</p>
<h2>SQL Server</h2>
<pre class="brush: xml;">&lt;activerecord&gt;
 &lt;config&gt;
 &lt;add key=&quot;connection.driver_class&quot;
 value=&quot;NHibernate.Driver.SqlClientDriver&quot;/&gt;
 &lt;add key=&quot;dialect&quot;
 value=&quot;NHibernate.Dialect.MsSql2008Dialect&quot;/&gt;
 &lt;add key=&quot;connection.provider&quot;
 value=&quot;NHibernate.Connection.DriverConnectionProvider&quot;/&gt;
 &lt;add key=&quot;connection.connection_string&quot;
 value=&quot;Data Source=.\SQLEXPRESS;Initial Catalog=MyBookStore;Integrated Security=True;Pooling=False&quot;/&gt;
 &lt;add key=&quot;proxyfactory.factory_class&quot;
 value=&quot;NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle&quot;/&gt;
 &lt;/config&gt;
&lt;/activerecord&gt;</pre>
<h2>Oracle</h2>
<pre class="brush: xml;">&lt;activerecord&gt;
 &lt;config&gt;
 &lt;add key=&quot;connection.driver_class&quot;
 value=&quot;NHibernate.Driver.OracleClientDriver&quot; /&gt;
 &lt;add key=&quot;dialect&quot;
 value=&quot;NHibernate.Dialect.Oracle10gDialect&quot; /&gt;
 &lt;add key=&quot;connection.provider&quot;
 value=&quot;NHibernate.Connection.DriverConnectionProvider&quot; /&gt;
 &lt;add key=&quot;connection.connection_string&quot;
 value=&quot;Data Source=./Oracle;User ID=MyBookStore;Password=MyBookStore;Unicode=true&quot; /&gt;
 &lt;/config&gt;
&lt;/activerecord&gt;</pre>
<h2>MySQL</h2>
<pre class="brush: xml;">&lt;activerecord&gt;
 &lt;config&gt;
 &lt;add
 key=&quot;connection.driver_class&quot;
 value=&quot;NHibernate.Driver.MySqlDataDriver&quot; /&gt;
 &lt;add
 key=&quot;dialect&quot;
 value=&quot;NHibernate.Dialect.MySQLDialect&quot; /&gt;
 &lt;add
 key=&quot;connection.provider&quot;
 value=&quot;NHibernate.Connection.DriverConnectionProvider&quot; /&gt;
 &lt;add
 key=&quot;connection.connection_string&quot;
 value=&quot;Database=MyBookStore;Data Source=localhost;User Id=root;Password=&quot; /&gt;
 &lt;/config&gt;
&lt;/activerecord&gt;</pre>
<h2>Firebird</h2>
<pre class="brush: xml;">&lt;activerecord&gt;
 &lt;config&gt;
 &lt;add
 key=&quot;connection.driver_class&quot;
 value=&quot;NHibernate.Driver.FirebirdDriver&quot; /&gt;
 &lt;add
 key=&quot;dialect&quot;
 value=&quot;NHibernate.Dialect.FirebirdDialect&quot; /&gt;
 &lt;add
 key=&quot;connection.provider&quot;
 value=&quot;NHibernate.Connection.DriverConnectionProvider&quot; /&gt;
 &lt;add
 key=&quot;connection.connection_string&quot;
 value=&quot;Server=localhost;Database=MyBookStore.fdb;User=;password=;ServerType=1;Pooling=false&quot; /&gt;
 &lt;add
 key=&quot;query.substitutions&quot;
 value=&quot;true 1, false 0&quot; /&gt;
 &lt;/config&gt;
&lt;/activerecord&gt;</pre>
<h2>PostgreSQL</h2>
<pre class="brush: xml;">&lt;activerecord&gt;
 &lt;config&gt;
 &lt;add
 key=&quot;connection.driver_class&quot;
 value=&quot;NHibernate.Driver.NpgsqlDriver&quot; /&gt;
 &lt;add
 key=&quot;dialect&quot;
 value=&quot;NHibernate.Dialect.PostgreSQLDialect&quot; /&gt;
 &lt;add
 key=&quot;connection.provider&quot;
 value=&quot;NHibernate.Connection.DriverConnectionProvider&quot; /&gt;
 &lt;add
 key=&quot;connection.connection_string&quot;
 value=&quot;Server=localhost;initial catalog=MyBookStore;User ID=;Password=;&quot; /&gt;
 &lt;/config&gt;
&lt;/activerecord&gt;</pre>
<h2>SQLite</h2>
<pre class="brush: xml;">&lt;activerecord&gt;
 &lt;config&gt;
 &lt;add key=&quot;connection.driver_class&quot;
 value=&quot;NHibernate.Driver.SQLite20Driver&quot;/&gt;
 &lt;add key=&quot;dialect&quot;
 value=&quot;NHibernate.Dialect.SQLiteDialect&quot;/&gt;
 &lt;add key=&quot;connection.provider&quot;
 value=&quot;MyBookStore.Model.SQLite.SQLiteConnectionProvider, MyBookStore.Model&quot;/&gt;
 &lt;add key=&quot;connection.connection_string&quot;
 value=&quot;Data Source=Data.db&quot;/&gt;
 &lt;add key=&quot;proxyfactory.factory_class&quot;
 value=&quot;NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle&quot;/&gt;
 &lt;/config&gt;
 &lt;/activerecord&gt;</pre>
<p>اگر به کدهای بالا توجه کنید متوجه خواهید شد که Connection Provider مربوط  به تنظیمات SQLite با بقیه فرق دارد. این تفاوت به این علت است که  NHibernate در نسخه 2 از System.Data.SQLite به صورت توکار پشتیبانی نمی  کند. برای اینکه این پشتیبانی را خودمان اضافه کنیم یک کلاس جدید به پروژه  Model برنامه مثال اضافه می کنیم که کدهای آن را در زیر مشاهده می کنید :</p>
<pre class="brush: csharp;">public class SQLiteConnectionProvider : NHibernate.Connection.DriverConnectionProvider
 {
 private static System.Data.IDbConnection m_Connection;

 public override System.Data.IDbConnection GetConnection()
 {
 if (m_Connection == null)
 m_Connection = base.GetConnection();
 return m_Connection;
 }

 public override void CloseConnection(System.Data.IDbConnection conn)
 {
 //Do nothing
 }
 }
</pre>
<p style="text-align:justify;">همانطور   که مشاهده می کنید انتخاب دیتابیس برای ذخیره داده ها هنگامی که از   NHibernate استفاده می کنید کار آسانی است. پروژه مثال این مطالب با SQL   Server، Oracle و SQLite با موفقیت آزمایش شده است. مستقل شدن از دیتابیس   برای ذخیره داده های یک برنامه، ویژگی بسیار کارآمدی است که با استفاده از   Castle ActiveRecord آسان و قابل دسترس است.</p>
<p>این مطلب آخرین قسمت <a href="../tag/castle-activerecord/">سری آموزشی Castle ActiveRecord</a> به همراه مثال بود اما باز هم در مورد آن در<a href="../"> این وبلاگ</a> مطلب خواهیم داشت. اگر خواننده این سری مطالب بودید، لطفاً نظر کلی خودتان را در قسمت نظرات همین پست با من در میان بگذارید.</p>
<p>پ.ن : برای دانلود پروژه مثال این سری مطالب باید چند روز صبر کنید تا کامل شود.</p>
<br />دسته‌بندی شده در: <a href='http://farasun.wordpress.com/category/nhibernate/'>NHibernate</a> Tagged: <a href='http://farasun.wordpress.com/tag/castle-activerecord/'>Castle ActiveRecord</a>, <a href='http://farasun.wordpress.com/tag/nhibernate/'>NHibernate</a>, <a href='http://farasun.wordpress.com/tag/orm/'>ORM</a>, <a href='http://farasun.wordpress.com/tag/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-nhibernate/'>آموزش NHibernate</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/farasun.wordpress.com/1883/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/farasun.wordpress.com/1883/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/farasun.wordpress.com/1883/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/farasun.wordpress.com/1883/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/farasun.wordpress.com/1883/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/farasun.wordpress.com/1883/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/farasun.wordpress.com/1883/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/farasun.wordpress.com/1883/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/farasun.wordpress.com/1883/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/farasun.wordpress.com/1883/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/farasun.wordpress.com/1883/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/farasun.wordpress.com/1883/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/farasun.wordpress.com/1883/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/farasun.wordpress.com/1883/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1883&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://farasun.wordpress.com/2010/12/22/learn-castle-activerecord-with-example-7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">ایمان</media:title>
		</media:content>
	</item>
		<item>
		<title>فقط برای یلدا!</title>
		<link>http://farasun.wordpress.com/2010/12/21/just-for-yalda/</link>
		<comments>http://farasun.wordpress.com/2010/12/21/just-for-yalda/#comments</comments>
		<pubDate>Tue, 21 Dec 2010 18:41:02 +0000</pubDate>
		<dc:creator>ایمان</dc:creator>
				<category><![CDATA[روزانه]]></category>
		<category><![CDATA[یلدا]]></category>
		<category><![CDATA[شب یلدا]]></category>
		<category><![CDATA[شخصی]]></category>

		<guid isPermaLink="false">http://farasun.wordpress.com/?p=1875</guid>
		<description><![CDATA[از طرف دوستان عزیزم، آقای آواژ و آقای واحد به یک بازی وبلاگی متفاوت دعوت شده ام که هر کس یک خاطره شاد شبانه برای شب یلدا تعریف می کند. هر چند خاطره نویسی و شخصی نویسی در این وبلاگ جایی ندارند اما سعی میکنم خاطره ای تعریف کنم که یک جواریی یک ربطی به [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1875&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p align="justify">از طرف دوستان عزیزم، <a href="http://www.behsad.org/weblog/1389/09/خاطراتي-براي-يلدا/">آقای آواژ</a> و <a href="http://weblog.radmanitd.com/index.php/archives/974">آقای واحد</a> به <a href="http://www.blognevesht.com/1389/09/28/idea-for-blog-game-in-yalda/">یک بازی وبلاگی</a> متفاوت دعوت شده ام که هر کس یک خاطره شاد شبانه برای شب یلدا تعریف می کند. هر چند خاطره نویسی و شخصی نویسی در این وبلاگ جایی ندارند اما سعی میکنم خاطره ای تعریف کنم که یک جواریی یک ربطی به نرم افزار و برنامه نویسی داشته باشد.</p>
<p align="justify"><strong>1)</strong> سال اول دانشگاه، درس برنامه سازی پیشرفته را با استادی برداشتم که از قبل با هم آشنایی داشتیم و روی من حساب خاصی میکرد. جلسه اول یا دوم بود که این استاد کلاس را برای یک ساعت به امان خدا گذاشت و رفت تا کاری را انجام بدهد و برگردد. دقیقاً به خاطر ندارم که چه تمرینی برای بچه ها مشخص کرده بود اما درست به خاطر دارم که خودم چه برنامه ای برای تمرین نوشتم! آن زمان دوستی داشتم که همیشه با هم بودیم و شوخی زیادی با هم داشتیم. برای شوخی با این رفیقم، برنامه مسخره ای نوشتم که اگر هر اسمی بهش میدادی شروع به سلام علیک و احوال پرسی میکرد جز اسم کوچک این دوستم که اگر وارد میشد یک صفحه فحش و حرف های ناجور خطاب به اون روی صفحه چاپ میکرد و برنامه در یک حلقه بی نهایت این کار را ادامه می داد! تا اینکه کسی یا چیزی برنامه را Terminate میکرد. دوستم یکبار اسمش را وارد کرد و با این صفحه مواجه شد و خندیدیم و گذشت&#8230; تا اینکه وجود استاد گرامی را بالای سر خودمان حس کردیم! ایشون هم از راه نرسیده شروع کرد به نگاه کردن تمرین های بچه ها و اول از همه به سراغ من اومد و برنامه ام را با فشار یک دکمه اجرا کرد و با شوق و ذوق فراوان نام کوچکش را تایپ کرد و دکمه Enter را با خوشحالی فشار داد! &#8230;&#8230; انگشت استاد عزیز بر روی همان دکمه Enter خشک ماند و چشمانش فحش هایی که به اعضای درجه یک خانواده اش داده می شد دنبال می کرد!!! همان لحظه بود که با نام کوچک استاد آشنا شدم! و پس از دو سه بار غیبت بر سر کلاسش از آن به بعد و با توافق یکدیگر او را با نام کوچک صدا میکردم!</p>
<p align="justify"><strong>2)</strong> دومین خاطره مربوط میشه به همین چند وقت پیش و در شرکتی که در حال حاضر در آن کار میکنم. در جریان دو سه بار نصب یکی از سیستم های تحت وب شرکت، هر بار همکاران ما یادشون میرفت بنر بالای صفحات سیستم را برای سازمان طرف قرارداد عوض کنند. این در حالی بود که هر بار برای نصب سیستم ها کاملاً برنامه ریزی میشد و همه کارشان را به خوبی برای نصب و استقرار سیستم در سازمان مشتری انجام میدادند، به جز یک چیز که همان بنر بالای صفحات سیستم بود که باید برای هر کدام از سازمان ها عوض میشد و پس از نصب سیستم متوجه می شدیم که عوض نشده! بعد از چند بار اتفاق افتادن این مشکل، قرار گذاشته شد که قبل از هر کاری جهت آماده کردن سیستم برای نصب در سازمان مشتری، اول آن بنر نظر کرده را عوض کنیم و بعد کارهای مهم تر را انجام دهیم. همین کار را هم کردیم تا اینکه یک روز همکاران برای نصب سیستم به سازمان مشتری در یک شهر دیگر رفتند و با اینکه بنر را شب قبل عوض کرده بودیم اما باز هم بنر قبلی که برای یک سازمان دیگر بود نشان داده میشد! خودمان بنر جدید را می دیدیم اما آن ها در سازمان مشتری بنر جدید را نمی دیدند! به ناچار دوباره به سرور مشتری ریموت شدیم و فایل بنر جدید را با بنر قبلی جایگزین کردیم اما باز هم اثری نداشت. با استفاده از مرورگر سیستم مشتری همان بنر قبلی نشان داده میشد! تلفنم زنگ خورد. همکارم بود که میخواست هر چه زودتر این مشکل حل شود. اون موقع استرس زیادی من و همکاران داخل شرکت داشتیم که چرا این بنر لعنتی تغییر نمی کند! به علت استرسی که داشتیم هیچ کدام فکرمان به جایی نمی رسید و تلفن من همچنان زنگ میخورد&#8230; تا اینکه من این مشکل را با گوگل عزیز در میان گذاشتم و Boom! دفعه بعدی که همکارم زنگ زد و گفت که هنوز بنر عوض نشده، با خونسردی همراه با کمی طلبکاری گفتم : یعنی نمی دانید که باید Ctrl+F5 را بزنید تا مرورگر فایل های کش شده را نادیده بگیرد!!</p>
<p align="justify"><strong>3)</strong> آخرین خاطره ای که شاید فقط برای خودم و چند تا از همکلاسی هام جالب باشه اینه که دقیقاً شب یلدای سال پیش من به یکی از همکلاسی هام قول داده بودم که مطلبی راجع به ASP.NET را بهش یاد بدم و اون روز چون خیلی فریاد زده بودم (یادتون میاد <a href="http://fa.wikipedia.org/wiki/%DB%B2%DB%B9_%D8%A2%D8%B0%D8%B1">اون روز</a> چه خبر بود!) کاملاً صدام گرفته بود و به هیچ وجه صدام در نمی آمد! با این حال وقتی همکلاسیم زنگ زد ازش خواستم که حتماً بیاد تا بهش یاد بدم. شب یلدا بود و ما هم دانشجو در یک شهر دیگه و چیزی هم برای خوردن نداشتیم جز چند تا میوه! دو نفر از همکلاسی هام اون شب با یه کم خوراکی اومدن و من با همون صدایی که از انتهای یک چاه عمیق بیرون می آمد موضوعی که قرار بود توضیح بدم را شروع کردم. صدای من روی اعصاب تمام بچه ها بود و بنده خدا اون همکلاسیم به دقت گوش میکرد که من دارم چی میگم و وسط بحث اینقدر صدای من ناهنجار بود که بیخیال بقیه داستان شد و گفت فهمیدم و رفت! اون موقع واقعاً نمی تونستم حرف بزنم و اون روز را هیچ وقت فراموش نمیکنم!</p>
<p align="justify">امیدوارم امشب اوقات بسیار خوشی را در کنار کسانی که دوستشان دارید بگذرانید. به علت اینکه فکر میکنم زمانش گذشته من کسی را برای ادامه این بازی دعوت نمیکنم. همیشه شاد باشید.</p>
<p>یلدای 1389</p>
<br />دسته‌بندی شده در: <a href='http://farasun.wordpress.com/category/%d8%b1%d9%88%d8%b2%d8%a7%d9%86%d9%87/'>روزانه</a> Tagged: <a href='http://farasun.wordpress.com/tag/%db%8c%d9%84%d8%af%d8%a7/'>یلدا</a>, <a href='http://farasun.wordpress.com/tag/%d8%b4%d8%a8-%db%8c%d9%84%d8%af%d8%a7/'>شب یلدا</a>, <a href='http://farasun.wordpress.com/tag/%d8%b4%d8%ae%d8%b5%db%8c/'>شخصی</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/farasun.wordpress.com/1875/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/farasun.wordpress.com/1875/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/farasun.wordpress.com/1875/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/farasun.wordpress.com/1875/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/farasun.wordpress.com/1875/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/farasun.wordpress.com/1875/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/farasun.wordpress.com/1875/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/farasun.wordpress.com/1875/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/farasun.wordpress.com/1875/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/farasun.wordpress.com/1875/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/farasun.wordpress.com/1875/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/farasun.wordpress.com/1875/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/farasun.wordpress.com/1875/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/farasun.wordpress.com/1875/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=farasun.wordpress.com&amp;blog=1012050&amp;post=1875&amp;subd=farasun&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://farasun.wordpress.com/2010/12/21/just-for-yalda/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">ایمان</media:title>
		</media:content>
	</item>
	</channel>
</rss>
