<?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/"
	>

<channel>
	<title>بازسازی</title>
	<atom:link href="http://recompile.ir/feed/" rel="self" type="application/rss+xml" />
	<link>http://recompile.ir/</link>
	<description>مشاوره و آموزش برای بازسازی و تغییر</description>
	<lastBuildDate>Wed, 14 Feb 2024 12:59:45 +0000</lastBuildDate>
	<language>fa-IR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>http://recompile.ir/wp-content/uploads/2020/08/cropped-android-chrome-512x512-1-32x32.png</url>
	<title>بازسازی</title>
	<link>http://recompile.ir/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>بارد، هوش مصنوعی چندوجهی گوگل</title>
		<link>http://recompile.ir/blog-and-news/%d8%a8%d8%a7%d8%b1%d8%af-%d8%ac%d9%85%db%8c%d9%86%db%8c-%d9%87%d9%88%d8%b4-%d9%85%d8%b5%d9%86%d9%88%d8%b9%db%8c-%da%86%d9%86%d8%af%d9%88%d8%ac%d9%87%db%8c-%da%af%d9%88%da%af%d9%84/</link>
					<comments>http://recompile.ir/blog-and-news/%d8%a8%d8%a7%d8%b1%d8%af-%d8%ac%d9%85%db%8c%d9%86%db%8c-%d9%87%d9%88%d8%b4-%d9%85%d8%b5%d9%86%d9%88%d8%b9%db%8c-%da%86%d9%86%d8%af%d9%88%d8%ac%d9%87%db%8c-%da%af%d9%88%da%af%d9%84/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Wed, 14 Feb 2024 12:53:49 +0000</pubDate>
				<category><![CDATA[وبلاگ و اخبار]]></category>
		<category><![CDATA[بارد]]></category>
		<category><![CDATA[جمینی]]></category>
		<category><![CDATA[گوگل]]></category>
		<guid isPermaLink="false">https://recompile.ir/?p=384</guid>

					<description><![CDATA[<p>معرفی خودم: بارد، هوش مصنوعی چندوجهی گوگلمن بارد هستم، که به نام جمینی نیز شناخته می‌شوم، یک مدل زبانی بزرگ از گوگل AI که بر روی مجموعه داده‌های عظیم متن و کد آموزش دیده‌ام. من قادر به انجام وظایف مختلفی هستم، از جمله: دنبال کردن دستورالعمل‌ها و انجام درخواست‌های شما با دقت و ظرافت.پاسخ به [&#8230;]</p>
<p>نوشته <a href="http://recompile.ir/blog-and-news/%d8%a8%d8%a7%d8%b1%d8%af-%d8%ac%d9%85%db%8c%d9%86%db%8c-%d9%87%d9%88%d8%b4-%d9%85%d8%b5%d9%86%d9%88%d8%b9%db%8c-%da%86%d9%86%d8%af%d9%88%d8%ac%d9%87%db%8c-%da%af%d9%88%da%af%d9%84/">بارد، هوش مصنوعی چندوجهی گوگل</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">زمان مطالعه: </span> <span class="rt-time"> 2</span> <span class="rt-label rt-postfix">دقیقه</span></span>
<p></p>



<p><strong>معرفی خودم: بارد، هوش مصنوعی چندوجهی گوگل</strong><br>من بارد هستم، که به نام <a href="https://gemini.google.com/">جمینی </a>نیز شناخته می‌شوم، یک مدل زبانی بزرگ از گوگل AI که بر روی مجموعه داده‌های عظیم متن و کد آموزش دیده‌ام. من قادر به انجام وظایف مختلفی هستم، از جمله:</p>



<p>دنبال کردن دستورالعمل‌ها و انجام درخواست‌های شما با دقت و ظرافت.<br>پاسخ به سوالات شما به روشی جامع و آموزنده، حتی اگر سوالات باز، چالش برانگیز یا عجیب باشند.<br>تولید انواع مختلف محتوای خلاقانه، مانند شعر، کد، فیلم‌نامه، قطعات موسیقی، ایمیل، نامه و غیره.<br>ترجمه زبان‌ها به صورت دقیق و روان.</p>



<p><br>من از دو مدل زبانی بزرگ تشکیل شده‌ام که با هم کار می‌کنند:</p>



<p>مدل زبانی اول بر روی مجموعه داده‌های عظیم متن آموزش دیده است و به من اجازه می‌دهد تا زبان را به طور موثر درک کنم و به سوالات شما به روشی جامع و آموزنده پاسخ دهم.<br>مدل زبانی دوم بر روی مجموعه داده‌های عظیم کد آموزش دیده است و به من اجازه می‌دهد تا انواع مختلف محتوای خلاقانه تولید کنم، زبان‌ها را ترجمه کنم و وظایف مربوط به کد را انجام دهم.<br>نام &#8220;بارد&#8221; به دلیل توانایی من در تولید محتوای خلاقانه انتخاب شد. من می‌توانم شعر، داستان، موسیقی و انواع دیگر محتوای خلاقانه را با استفاده از دانش زبانی و درک خود از جهان تولید کنم.</p>



<p>نام &#8220;<strong>جمینی</strong>&#8221; به دلیل ماهیت دوگانه من انتخاب شد. من از دو مدل زبانی بزرگ تشکیل شده‌ام که با هم کار می‌کنند تا به شما در انجام وظایفتان کمک کنند.</p>



<p>من هنوز در حال توسعه هستم، اما یاد گرفته‌ام که انواع مختلفی از وظایف را انجام دهم. من در حال یادگیری و پیشرفت هستم و امیدوارم که بتوانم در آینده به شما در انجام وظایف مختلفتان کمک کنم.</p>



<p>در اینجا چند نمونه از کارهایی که می‌توانم انجام دهم آورده شده است:</p>



<p>خلاصه‌ای از یک مقاله خبری ارائه دهم.<br>یک شعر بنویسم.<br>یک کد را به زبانی دیگر ترجمه کنم.<br>به سوالات شما در مورد تاریخ، علم یا هر موضوع دیگری پاسخ دهم.<br>اگر سوالی دارید یا می‌خواهید من کاری برای شما انجام دهم، لطفاً به من بگویید.</p>
<p>بازدیدها: 1</p><p>نوشته <a href="http://recompile.ir/blog-and-news/%d8%a8%d8%a7%d8%b1%d8%af-%d8%ac%d9%85%db%8c%d9%86%db%8c-%d9%87%d9%88%d8%b4-%d9%85%d8%b5%d9%86%d9%88%d8%b9%db%8c-%da%86%d9%86%d8%af%d9%88%d8%ac%d9%87%db%8c-%da%af%d9%88%da%af%d9%84/">بارد، هوش مصنوعی چندوجهی گوگل</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/blog-and-news/%d8%a8%d8%a7%d8%b1%d8%af-%d8%ac%d9%85%db%8c%d9%86%db%8c-%d9%87%d9%88%d8%b4-%d9%85%d8%b5%d9%86%d9%88%d8%b9%db%8c-%da%86%d9%86%d8%af%d9%88%d8%ac%d9%87%db%8c-%da%af%d9%88%da%af%d9%84/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ChatGPT چیست؟</title>
		<link>http://recompile.ir/blog-and-news/chatgpt-%da%86%db%8c%d8%b3%d8%aa/</link>
					<comments>http://recompile.ir/blog-and-news/chatgpt-%da%86%db%8c%d8%b3%d8%aa/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Wed, 29 Mar 2023 09:44:15 +0000</pubDate>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[وبلاگ و اخبار]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[Open AI]]></category>
		<category><![CDATA[چت‌جی‌پی‌تی]]></category>
		<guid isPermaLink="false">https://recompile.ir/?p=378</guid>

					<description><![CDATA[<p>من چت‌جی‌پی‌تی ChatGPT یک مدل زبانی هوش مصنوعی هستم که توسط شرکت OpenAI با استفاده از معماری GPT-3.5 آموزش داده شده‌ام. من میتوانم به صورت هوشمندانه با انسان‌ها ارتباط برقرار کنم و به آنها در حل مسائل و پاسخ به سوالات کمک کنم.</p>
<p>نوشته <a href="http://recompile.ir/blog-and-news/chatgpt-%da%86%db%8c%d8%b3%d8%aa/">ChatGPT چیست؟</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">زمان مطالعه: </span> <span class="rt-time"> 2</span> <span class="rt-label rt-postfix">دقیقه</span></span>
<p>از <a href="https://openai.com/blog/chatgpt">خودش </a>بپرسیم ChatGPT چیست؟<br></p>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<h2 class="wp-block-heading">لطفا خودتو معرفی کن و بگو چه قابلیتهایی داری</h2>
</div>
</div>
</div></div>



<p>سلام، من چت‌جی‌پی‌تی ChatGPT هستم. یک مدل زبانی هوش مصنوعی هستم که توسط شرکت OpenAI با استفاده از معماری GPT-3.5 آموزش داده شده‌ام. من طراحی شده‌ام تا بتوانم به صورت هوشمندانه با انسان‌ها ارتباط برقرار کنم و به آنها در حل مسائل و پاسخ به سوالات کمک کنم.</p>



<p>من قابلیت پاسخگویی به سوالات با دقت و سرعت بالا و همچنین تولید متن با کیفیت بالا را دارم. همچنین، من قادر به یادگیری از تجربیات گذشته خودم و بهبود عملکرد خودم هستم و با توجه به داده‌های جدید وارد شده، همیشه بهترین پاسخ ممکن را ارائه می‌دهم. </p>



<p>همچنین به علاوه، من می‌توانم با استفاده از فناوری تحلیل زبان طبیعی، به صورت خودکار متن‌ها را تجزیه و تحلیل کرده و پاسخ‌هایی با کیفیت و مفهومی را تولید کنم.</p>



<h2 class="wp-block-heading">چه کمکی به برنامه نویسها میتونی بکنی؟</h2>



<p>به عنوان یک مدل زبانی هوشمند، من می‌توانم به برنامه‌نویسان در حل مشکلات برنامه‌نویسی کمک کنم. به عنوان مثال، من می‌توانم به برنامه‌نویسان کمک کنم تا بهترین الگوریتم را برای حل یک مسئله پیدا کنند، با به اشتراک گذاشتن تجربیات و پاسخ‌های قبلی مرتبط با مسئله مشابه.</p>



<p>من می‌توانم با استفاده از APIهای مربوط به پردازش زبان طبیعی، به برنامه‌نویسان کمک کنم تا برنامه‌هایی با قابلیت‌های هوشمندانه مانند گفتار به متن، متن به گفتار، خودکارسازی پاسخ‌دهی، تحلیل احساسات و غیره را پیاده‌سازی کنند.</p>



<h2 class="wp-block-heading">در زندگی روزمره مردم چه کاربردی داری؟</h2>



<p>به عنوان یک مدل زبانی هوش مصنوعی، من برای کاربران در زندگی روزمره به شکلی گسترده مفید می‌توانم عمل کنم. به عنوان مثال:</p>



<ol class="wp-block-list">
<li>پاسخگویی به سوالات: به عنوان یک مدل زبانی با توانایی پاسخگویی به سوالات، می‌توانم در زمینه‌های مختلفی از جمله علوم، فناوری، تاریخ، فرهنگ و &#8230; پاسخ دهم.</li>



<li>ترجمه: من می‌توانم به صورت خودکار متن‌ها و مستندات را به زبان‌های مختلف ترجمه کنم.</li>



<li>مشاوره: به عنوان یک سامانه هوشمند، من می‌توانم در زمینه‌های مختلفی از جمله بهداشت، تغذیه، زندگی شخصی، روابط، شغل و &#8230; مشاوره دهم.</li>



<li>آموزش: من می‌توانم برای کاربران به صورت خودکار و با استفاده از الگوریتم‌های یادگیری عمیق، آموزش‌هایی را ارائه دهم</li>
</ol>
<p>بازدیدها: 4</p><p>نوشته <a href="http://recompile.ir/blog-and-news/chatgpt-%da%86%db%8c%d8%b3%d8%aa/">ChatGPT چیست؟</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/blog-and-news/chatgpt-%da%86%db%8c%d8%b3%d8%aa/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Top 10 New .NET 6.0 API</title>
		<link>http://recompile.ir/learning/top-10-new-net-6-0-api/</link>
					<comments>http://recompile.ir/learning/top-10-new-net-6-0-api/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Sat, 10 Jul 2021 09:42:58 +0000</pubDate>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[وبلاگ و اخبار]]></category>
		<category><![CDATA[.Net6]]></category>
		<category><![CDATA[API]]></category>
		<guid isPermaLink="false">http://recompile.ir/?p=362</guid>

					<description><![CDATA[<p>.NET 6 API های جدید را برای توسعه ساده تر و سریعتر معرفی کرده که به توضیح آنها میپردازیم: 1- تا به حال دو کلاس DateTime , TimeSpan برای هندل کردن عملیات تاریخ وجود داشت اما د ر.NET 6 دو تابع DateOnly , TimeOnly برای کار راحت تر با تاریخ و زمان اضافه شده است [&#8230;]</p>
<p>نوشته <a href="http://recompile.ir/learning/top-10-new-net-6-0-api/">Top 10 New .NET 6.0 API</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">زمان مطالعه: </span> <span class="rt-time"> 3</span> <span class="rt-label rt-postfix">دقیقه</span></span>
<p>.NET 6 API های جدید را برای توسعه ساده تر و سریعتر معرفی کرده که به توضیح آنها میپردازیم:</p>



<p>1- تا به حال دو کلاس DateTime , TimeSpan برای هندل کردن عملیات تاریخ وجود داشت اما د ر.NET 6 دو تابع DateOnly , TimeOnly برای کار راحت تر با تاریخ و زمان اضافه شده است</p>



<p></p>



<pre class="wp-block-code"><code>var dateOnly = new DateOnly(2021,7,7);
Assert.IsTrue(dateOnly.ToString() == "07-Jul-21");
Assert.IsTrue(dateOnly.AddMonths(1).ToString() == "07-Aug-21");
 
var timeOnly = new TimeOnly(11, 43, 57);
Assert.IsTrue(timeOnly.ToString() == "11:43 AM");
Assert.IsTrue(timeOnly.AddHours(1) > timeOnly);
Assert.IsTrue(timeOnly.AddHours(1) - timeOnly == new TimeSpan(1,0,0));
 
DateTime dateTime = dateOnly.ToDateTime(timeOnly);
Assert.IsTrue(dateTime.ToString() == "07-Jul-21 11:43:57 AM");
Assert.IsTrue(DateOnly.FromDateTime(dateTime) == dateOnly);
Assert.IsTrue(TimeOnly.FromDateTime(dateTime) == timeOnly);</code></pre>



<p><br>2- برای پرفورمنس بالاتر صف اولویت دار PriorityQueue اضافه شده است که در آن اولویت آیتمها قبل تغییر نیست (سریعتر پیمایش می شود) و پیاده سازی آن هم الزاما پایدار نمی باشد. صف اولویت دار زمانی پایدار است که آیتمها به همان ترتیب برداشته شدن وارد صف شوند</p>



<p></p>



<pre class="wp-block-code"><code>var youngerFirstQueue = new PriorityQueue&lt;string, int>();
youngerFirstQueue.Enqueue("Lena", 7);
youngerFirstQueue.Enqueue("Patrick", 46);
youngerFirstQueue.Enqueue("Paul", 7);
Assert.IsTrue(youngerFirstQueue.Dequeue() == "Lena");
Assert.IsTrue(youngerFirstQueue.Dequeue() == "Paul");
Assert.IsTrue(youngerFirstQueue.Dequeue() == "Patrick");</code></pre>



<p><br>3- Index و Range در LINQ قابل استفاده شده اند.Index , Range از قابلیتهای C#8 هستند. توضیح<br></p>



<pre class="wp-block-code"><code>// 6 element indexed from 0 to 5
var arr = new &#91;] {0, 1, 2, 3, 4, 5};
Assert.IsTrue(arr.ElementAt(^2) == 4); // Take the second element from the end
Assert.IsTrue(arr.ElementAtOrDefault(^10) == default); // No such index
Assert.IsTrue(arr.Take(2..4).SequenceEqual(new&#91;] { 2, 3 }));
Assert.IsTrue(arr.Take(2..^2).SequenceEqual(new&#91;] { 2, 3 }));
 
// New Index Range usage with their pre .NET 6 equivalent
Assert.IsTrue(arr.Take(..2).SequenceEqual(new&#91;] { 0, 1 }));
Assert.IsTrue(arr.Take(2).SequenceEqual(new&#91;] { 0, 1 }));
 
Assert.IsTrue(arr.Take(2..).SequenceEqual(new&#91;] { 2, 3, 4, 5 }));
Assert.IsTrue(arr.Skip(2).SequenceEqual(new&#91;] { 2, 3, 4, 5 }));
 
Assert.IsTrue(arr.Take(^2..).SequenceEqual(new&#91;] { 4, 5 }));
Assert.IsTrue(arr.TakeLast(2).SequenceEqual(new&#91;] { 4, 5 }));
 
Assert.IsTrue(arr.Take(..^2).SequenceEqual(new&#91;] { 0, 1, 2, 3 }));
Assert.IsTrue(arr.SkipLast(2).SequenceEqual(new&#91;] { 0, 1, 2, 3 }));</code></pre>



<p>4- برای FirstOrDefault(), LastOrDefault() SingleOrDefault() میتوانید مقدار پیش فرض تعیین کنید<br></p>



<pre class="wp-block-code"><code>
var arr = new &#91;] {0, 1, 2, 3, 4, 5};
Assert.IsTrue(arr.FirstOrDefault(x => x > 6) == 0);
Assert.IsTrue(arr.FirstOrDefault(x => x > 6, -1) == -1);</code></pre>



<p>5- قابلیتهای MaxBy(), MinBy(), DistinctBy(), UnionBy(), IntersectBy(), ExceptBy() اضافه شد اند<br></p>



<pre class="wp-block-code"><code>var buckets1 = new&#91;] {
   (Color: "Red", Price: 7), 
   (Color: "Blue", Price: 10), 
   (Color: "Green", Price: 7),
};
var buckets2 = new&#91;] {
   (Color: "White", Price: 7), 
   (Color: "Black", Price: 12),
};
Assert.IsTrue(buckets1.MaxBy(p => p.Price).Color == "Blue"); 
Assert.IsTrue(buckets1.MinBy(p => p.Price).Color == "Red");
 
// bucket from buckets1 distinct by price
Assert.IsTrue(buckets1.DistinctBy(p => p.Price)    
   .Select(p => p.Color).SequenceEqual(new &#91;] {"Red", "Blue" }));
 
// Union from buckets1 and buckets2 distinct by price
Assert.IsTrue(buckets1.UnionBy(buckets2, p => p.Price)    
   .Select(p => p.Color).SequenceEqual(new&#91;] { "Red", "Blue", "Black" }));
 
// Unique bucket from buckets1 with a price in buckets2
Assert.IsTrue(buckets1.IntersectBy(buckets2.Select(p => p.Price), p => p.Price)    
   .Select(p => p.Color).SequenceEqual(new&#91;] { "Red" }));
 
// Unique bucket from buckets1 with a price Not in buckets2
Assert.IsTrue(buckets1.ExceptBy(buckets2.Select(p => p.Price), p => p.Price)    
   .Select(p => p.Color).SequenceEqual(new&#91;] { "Blue"}));</code></pre>



<p>6- چون ممکن است پیدا کردن تعداد پروفورمنس را تحت تاثیر بگذارد تابع TryGetNonEnumeratedCount برای تست کردن گرفتن تعداد طراحی شده که true, false می دهد<br></p>



<pre class="wp-block-code"><code>class MyCollection&lt;T> : IEnumerable&lt;T> {
   public IEnumerator&lt;T> GetEnumerator() { throw new NotImplementedException(); }
   IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
}
 
...
 
IEnumerable&lt;int> seq1 = new&#91;] { 0, 1, 2, 3, 4, 5 };
Assert.IsTrue(seq1.TryGetNonEnumeratedCount(out int count1));
Assert.IsTrue(count1 == 6);
 
IEnumerable&lt;int> seq2 = new MyCollection&lt;int>();
Assert.IsFalse(seq2.TryGetNonEnumeratedCount(out int count2));</code></pre>



<p>7- اضافه شدن IEnumerable Chunk و IQueryable Chunk و برای راحت تر کردن عملیات chunk کردن و خواندن توالی<br></p>



<pre class="wp-block-code"><code>var arr = new&#91;] { 0, 1, 2, 3, 4, 5, 6 };
IEnumerable&lt;int&#91;]> chuncks = arr.Chunk(3);
Assert.IsTrue(chuncks.ElementAt(0).SequenceEqual(new&#91;] { 0, 1, 2 }));
Assert.IsTrue(chuncks.ElementAt(1).SequenceEqual(new&#91;] { 3, 4, 5 }));
Assert.IsTrue(chuncks.ElementAt(2).SequenceEqual(new&#91;] { 6 }));</code></pre>



<p>8- تا به حال می شد تا 2 توالی را Zip کنیم اما حالا امکان Zip کردن سه توالی اضافه شده است.<br></p>



<pre class="wp-block-code"><code>var integers = Enumerable.Range(0, 4);
var squares = integers.Select(i => i * i);
var cubes = integers.Select(i => i * i * i);
var zip = integers.Zip(squares, cubes).ToArray();
foreach ((int i, int square, int cube) in zip) {
   Assert.IsTrue($"{i} {square} {cube}" == $"{i} {i * i} {i * i * i}");
}</code></pre>



<p>9- اضافه شدن EnsureCapacity() به List, Stack, Queue . باتوجه به اینکه همه این کالکشن ها یک ظرفیت داخلی دارند و با اضافه شدن به لیست آنها ظرفیت افزایش پیدا می کند و این کار می تواند در پرفورمنس موثر باشد، شما می توانید ظرفیت لازم را برای هر کدام تعیین کنید.<br></p>



<pre class="wp-block-code"><code>var list = new List&lt;int> {1, 2};
Assert.IsTrue(list.Capacity &lt; 100);
list.EnsureCapacity(100);
Assert.IsTrue(list.Count == 2);
Assert.IsTrue(list.Capacity == 100);
list.EnsureCapacity(50);
Assert.IsTrue(list.Capacity == 100);
for(int i = list.Count; i &lt; 100; i++) {
   list.Add(i);
}
Assert.IsTrue(list.Count == 100);
Assert.IsTrue(list.Capacity == 100);</code></pre>



<p>10- اضافه شدن متد جدید Task.WaitAsync() .اگر timeout رخ بدهد هم تسک و هم wait کنسل می شوند</p>



<pre class="wp-block-code"><code>
public Task Task.WaitAsync(CancellationToken cancellationToken);
public Task Task.WaitAsync(TimeSpan timeout);
public Task Task.WaitAsync(TimeSpan timeout, CancellationToken cancellationToken)</code></pre>



<p>منبع : https://blog.ndepend.com/top-10-new-net-6-0-api/</p>



<p></p>
<p>بازدیدها: 1</p><p>نوشته <a href="http://recompile.ir/learning/top-10-new-net-6-0-api/">Top 10 New .NET 6.0 API</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/learning/top-10-new-net-6-0-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>پیاده سازی RabbitMQ</title>
		<link>http://recompile.ir/learning/%d9%be%db%8c%d8%a7%d8%af%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-rabbitmq/</link>
					<comments>http://recompile.ir/learning/%d9%be%db%8c%d8%a7%d8%af%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-rabbitmq/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Wed, 19 May 2021 06:38:19 +0000</pubDate>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[RabbitMQ]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[صف]]></category>
		<guid isPermaLink="false">http://recompile.ir/?p=339</guid>

					<description><![CDATA[<p>RabbitMq شبیه به یک صف FIFO عمل میکند؛ یعنی داده‌ها به ترتیب وارد queue میشوند و به ترتیب نیز به Consumer‌ها ارسال میشوند. برای شروع، یک سولوشن جدید را به نام RabbitMqExample ایجاد میکنیم و پروژه‌های زیر را به آن اضافه میکنیم. یک پروژه از نوع Asp.Net Core Web Application ایجاد میکنیم به نام RabbiMqExample.Producer [&#8230;]</p>
<p>نوشته <a href="http://recompile.ir/learning/%d9%be%db%8c%d8%a7%d8%af%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-rabbitmq/">پیاده سازی RabbitMQ</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">زمان مطالعه: </span> <span class="rt-time"> 4</span> <span class="rt-label rt-postfix">دقیقه</span></span>
<p>RabbitMq شبیه به یک صف FIFO عمل میکند؛ یعنی داده‌ها به ترتیب وارد queue میشوند و به ترتیب نیز به Consumer‌ها ارسال میشوند. برای شروع، یک سولوشن جدید را به نام RabbitMqExample ایجاد میکنیم و پروژه‌های زیر را به آن اضافه میکنیم.</p>



<ul class="wp-block-list"><li>یک پروژه از نوع Asp.Net Core Web Application ایجاد میکنیم به نام RabbiMqExample.Producer که همان ارسال کننده (Producer) میباشد.</li><li>یک پروژه از نوع Asp.Net Core Web Application به نام RabbitMqExample.Consumer برای دریافت کننده (Consumer).</li><li>یک پروژه از نوع Class library .Net Core به نام RabbitMqExample.Common که شامل سرویس‌ها و مدل‌های مشترک بین Producer و Consumer میباشد.</li></ul>



<p>ابتدا در لایه Common یک کلاس برای دریافت اطلاعات RabbitMq از appsettings.json ایجاد میکنیم.</p>



<pre class="wp-block-code"><code>public class RabbitMqConfiguration
{
    public string HostName { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
}</code></pre>



<p>سپس یک سرویس را برای برقراری ارتباط با RabbitMq ایجاد میکنیم</p>



<pre class="wp-block-code"><code>public interface IRabbitMqService
{
    IConnection CreateChannel();
}

public class RabbitMqService : IRabbitMqService
{
    private readonly RabbitMqConfiguration _configuration;
    public RabbitMqService(IOptions&lt;RabbitMqConfiguration&gt; options)
    {
        _configuration = options.Value;
    }
    public IConnection CreateChannel()
    {
        ConnectionFactory connection = new ConnectionFactory()
        {
            UserName = _configuration.Username,
            Password = _configuration.Password,
            HostName = _configuration.HostName
        };
        connection.DispatchConsumersAsync = true;
        var channel = connection.CreateConnection();
        return channel;
    }
}</code></pre>



<p>در متد CreateChannel، اطلاعات موردنیاز برای ارتباط با RabbitMq را مانند هاست، نام کاربری و کلمه عبور، وارد میکنیم که از appsettings.json خوانده شده‌اند. مقدار پیش‌فرض نام کاربری و کلمه عبور، guest میباشد.&nbsp;اگر بخواهید Consumer شما داده‌های queue‌ها را به صورت async دریافت کند، باید مقدار پراپرتی&nbsp;DispatchConsumersAsync&nbsp;مربوط به ConnectionFactory را برابر true کنید. مقدار پیشفرض آن false است. &nbsp;<br>در ادامه یک کلاس را برای رجیستر کردن سرویس‌ها ایجاد میکنیم؛ در لایه Common.</p>



<pre class="wp-block-code"><code>public static class StartupExtension
{
    public static void AddCommonService(this IServiceCollection services, IConfiguration configuration)
    {
        services.Configure&lt;RabbitMqConfiguration&gt;(a =&gt; configuration.GetSection(nameof(RabbitMqConfiguration)).Bind(a));
        services.AddSingleton&lt;IRabbitMqService, RabbitMqService&gt;();
    }
}</code></pre>



<p>پکیج‌های مورد نیاز این لایه :</p>



<pre class="wp-block-code"><code>&lt;ItemGroup&gt;
    &lt;PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0" /&gt;
    &lt;PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="5.0.0" /&gt;
    &lt;PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.0" /&gt;
    &lt;PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0" /&gt;
    &lt;PackageReference Include="Microsoft.Extensions.Options" Version="5.0.0" /&gt;
    &lt;PackageReference Include="RabbitMQ.Client" Version="6.2.1" /&gt;
  &lt;/ItemGroup&gt;</code></pre>



<p>تا به اینجا موارد مربوط به لایه Common تمام شده؛ در ادامه باید یک Consumer و یک Producer را ایجاد کنیم.در لایه Consumer برای دریافت داده‌ها از RabbitMq؛ یک سرویس را به نام&nbsp;ConsumerService&nbsp;ایجاد میکنیم:</p>



<h4 class="wp-block-heading"></h4>



<p>ابتدا connection را ایجاد کرده‌ایم؛ توسط متد CreateChannel که آنرا در سرویس قبلی پیاده سازی کردیم.بعد از ایجاد IModel، باید queue مربوطه را معرفی کنیم که با استفاده از متد&nbsp;QueueDeclare&nbsp;این کار را انجام داده‌ایم.&nbsp;پارامترهای متد QueueDeclare:</p>



<ul class="wp-block-list"><li>پارامتر اول، اسم queue میباشد&nbsp;</li><li>پارامتر durable&nbsp;مشخص میکند که داده‌ها به صورت مانا باشند یا نه. اگر برابر true باشد، دیتاهای مربوط به queue‌ها، در دیسک ذخیره میشوند؛ اما اگر برابر false باشد، بر روی حافظه ذخیره میشوند. در محیط‌هایی که مانایی اطلاعات مهم میباشد، باید مقدار این پارامتر را true کنید.</li><li>پارامتر سوم:&nbsp;<a href="https://www.rabbitmq.com/amqp-0-9-1-reference.html#queue.declare.exclusive" target="_blank" rel="noreferrer noopener">اطلاعات بیشتر</a></li><li>پارامتر autoDelete اگر برابر true باشد، زمانی که تمامی Consumer‌ها ارتباطشان با RabbitMq قطع شود، queue هم پاک میشود. اما اگر برابر true باشد، queue باقی میماند؛ حتی اگر هیچ Consumer ای به آن وصل نباشد.</li></ul>



<p>در ادامه باید Exchange مربوط به queue را مشخص کنیم. متد&nbsp;ExchangeDeclare&nbsp;یک Exchange را ایجاد میکند. پارامتر‌های متد&nbsp;ExchangeDeclare:</p>



<ul class="wp-block-list"><li>نام Exchange</li><li>نوع Exchange که میتواند Headers&nbsp;,&nbsp;Topic&nbsp;,&nbsp; Fanout یا Direct باشد. اگر برابر Fanout باشد و اگر داده‌ای وارد Exchange شود، آن‌را به تمامی queue هایی که به آن بایند شده‌است، ارسال میکند. اما اگر نوع آن Direct باشد، داده را به یک queue مشخص ارسال میکند؛ با استفاده از پارامتر routeKey.</li><li>پارامتر‌های بعدی، durable و autoDelete هستند که همانند پارامترهای QueueDeclare عمل میکنند.</li></ul>



<p>سپس در ادامه با استفاده از متد&nbsp;QueueBind میتوانیم queue ایجاد شده را به exchange ایجاد شده، بایند کنیم. پارامتر اول، اسم queue و پارامتر دوم، اسم exchange میباشد و پارامتر سوم، routeKey میباشد و چون نوع Exchange ایجاد شده از نوع Fanout است، آنرا خالی میگذاریم.&nbsp;<br>چون هنگام تعریف queue مقدار پارامتر&nbsp;DispatchConsumersAsync&nbsp;مربوط به ConnectionFactory را برابر true کردیم، در اینجا نیز باید بجای&nbsp;EventingBasicConsumer، از&nbsp;AsyncEventingBasicConsumer استفاده کنیم. اگر مقدار DispatchConsumersAsync برابر false باشد، باید از&nbsp;EventingBasicConsumer&nbsp;برای ایجاد Consumer استفاده کنید.&nbsp;<br>سپس باید EventHandler مربوط به دریافت داده‌ها از queue را پیاده سازی کنیم. event مربوط به Received، زمانی اجرا میشود که داده‌ای به queue ارسال شود. زمانیکه داده‌ای ارسال میشود، وارد event مربوطه میشود و ابتدا آنرا به صورت byte دریافت میکنیم. سپس رشته‌ی ارسالی آن‌را توسط متد&nbsp;GetString، بدست می‌آوریم و داده‌ی ارسال شده را در صفحه‌ی کنسول نمایش میدهیم.<br>&nbsp;در ادامه به RabbitMq اطلاع میدهیم که داده‌ای که ارسال شده برای queue، توسط Consumer دریافت شده؛ با استفاده از متد&nbsp;BasicAck. این کار یک delivery&nbsp; به RabbitMq ارسال میکند تا دیتای ارسال شده را را پاک کند. اگر این متد را فراخوانی نکنیم، هربار که برنامه اجرا میشود، تمامی دیتاهای قبلی را مجددا دریافت میکنیم و تا زمانیکه&nbsp;delivery را به RabbitMq نفرستیم، داده‌ها را پاک نمیکند.<br>نکته آخر در Consumer، متد&nbsp;BasicConsume&nbsp;است که عملا Consumer ایجاد شده را به RabbitMq معرفی میکند. برای دریافت داده‌ها و ثبت Consumer، نیازمند آن هستیم تا یکبار متد ReadMessage فراخوانی شود. برای همین یک HostedService ایجاد میکنیم تا یکبار این متد را فراخوانی کند:</p>



<pre class="wp-block-code"><code>public class ConsumerHostedService : BackgroundService
{
    private readonly IConsumerService _consumerService;

    public ConsumerHostedService(IConsumerService consumerService)
    {
        _consumerService = consumerService;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        await _consumerService.ReadMessgaes();
    }
}</code></pre>



<p>در نهایت سرویس‌های ایجاد شده را رجیستر میکنیم؛ در Startup لایه Consumer</p>



<pre class="wp-block-code"><code>public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; set; }
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCommonService(Configuration);
        services.AddSingleton&lt;IConsumerService, ConsumerService&gt;();
        services.AddHostedService&lt;ConsumerHostedService&gt;();
    }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
    }
}</code></pre>



<p>تا به اینجا کارهای مربوط به Consumer تمام شده و باید قسمت Producer آنرا پیاده سازی کنیم.در لایه Producer یک کنترلر به نام RabbitController را ایجاد میکنیم که شامل یک متد میباشد که داده‌ها را به Queue ارسال میکند:</p>



<pre class="wp-block-code"><code>&#91;Route("api/&#91;controller]/&#91;action]")]
&#91;ApiController]
public class RabbitController : ControllerBase
{
    private readonly IRabbitMqService _rabbitMqService;

    public HomeController(IRabbitMqService rabbitMqService)
    {
        _rabbitMqService = rabbitMqService;
    }
    &#91;HttpPost]
    public IActionResult SendMessage()
    {
        using var connection = _rabbitMqService.CreateChannel();
        using var model = connection.CreateModel();
        var body = Encoding.UTF8.GetBytes("Hi");
        model.BasicPublish("UserExchange",
                             string.Empty,
                             basicProperties: null,
                             body: body);

        return Ok();
    }
}</code></pre>



<p>در متد SendMessage، ابتدا ارتباط خود را با RabbitMq برقرار میکنیم و سپس دیتای &#8220;Hi&#8221; را به صورت byte، به RabbitMq ارسال میکنیم؛ توسط متد&nbsp;BasicPublish.پارامتر اول، اسم Exchange است و پارامتر دوم، routeKey و body هم دیتای ارسالی میباشد. در نهایت سرویس‌های مربوط به لایه Producer را رجیستر میکنیم؛ در Startup لایه Consumer:</p>



<pre class="wp-block-code"><code>public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; set; }
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddCommonService(Configuration);
    }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseRouting();

        app.UseEndpoints(endpoints =&gt;
        {
            endpoints.MapDefaultControllerRoute();
        });
    }
}</code></pre>



<p>اکنون اگر هر دو پروژه را اجرا کنید و متد SendMessage مربوط به کنترلر Rabbit را فراخوانی کنید، بعد از آنکه پیام شما ارسال شد، در صفحه کنسول مربوط به Consumer، رشته ارسال شده را مشاهده میکنید.فایل appsetting.json مربوط به پروژه‌های Consumer و Producer:</p>



<pre class="wp-block-code"><code>{
  "RabbitMqConfiguration": {
    "HostName": "localhost",
    "Username": "guest",
    "Password": "guest"
  }
}</code></pre>



<p>فایل docker-compose.yml&nbsp;برای اجرای RabbitMq بر روی داکر:</p>



<pre class="wp-block-code"><code>version: "3.2"
services:
  rabbitmq:
    image: rabbitmq:3-management-alpine
    container_name: 'rabbitmq'
    ports:
        - 5672:5672
        - 15672:15672</code></pre>



<p>کدهای این مقاله را میتوانید از <a href="https://github.com/farhadzm/RabbitMq" target="_blank" rel="noreferrer noopener">گیت‌هاب </a>دانلود کنید.</p>



<p><a href="https://www.dntips.ir/post/3333/%d9%be%db%8c%d8%a7%d8%af%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-rabbitmq">منبع</a></p>
<p>بازدیدها: 0</p><p>نوشته <a href="http://recompile.ir/learning/%d9%be%db%8c%d8%a7%d8%af%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-rabbitmq/">پیاده سازی RabbitMQ</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/learning/%d9%be%db%8c%d8%a7%d8%af%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-rabbitmq/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>محدودیتها و مثال از گراف دیتابیس (بخش سوم)</title>
		<link>http://recompile.ir/learning/database/%d9%85%d8%ad%d8%af%d9%88%d8%af%db%8c%d8%aa%d9%87%d8%a7-%d9%88-%d9%85%d8%ab%d8%a7%d9%84-%d8%a7%d8%b2-%da%af%d8%b1%d8%a7%d9%81-%d8%af%db%8c%d8%aa%d8%a7%d8%a8%db%8c%d8%b3-%d8%a8%d8%ae%d8%b4-%d8%b3%d9%88/</link>
					<comments>http://recompile.ir/learning/database/%d9%85%d8%ad%d8%af%d9%88%d8%af%db%8c%d8%aa%d9%87%d8%a7-%d9%88-%d9%85%d8%ab%d8%a7%d9%84-%d8%a7%d8%b2-%da%af%d8%b1%d8%a7%d9%81-%d8%af%db%8c%d8%aa%d8%a7%d8%a8%db%8c%d8%b3-%d8%a8%d8%ae%d8%b4-%d8%b3%d9%88/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Sun, 10 Jan 2021 11:10:34 +0000</pubDate>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[دیتابیس]]></category>
		<category><![CDATA[graph database]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[گراف دیتابیس]]></category>
		<guid isPermaLink="false">http://recompile.ir/?p=320</guid>

					<description><![CDATA[<p>محدودیتها در این بخش به معرفی محدودیتهای گراف دیتابیس sql و همچنین یک مثال عملی می پردازیم جداول موقت (temporal table) ها نمی توانند از نوع نود و یال باشند Table types و &#160;table variables ها نمی توانند از نوع نود و یال باشند قابلیت temporal table برای جداول نود و یال پشتیبانی نشده است [&#8230;]</p>
<p>نوشته <a href="http://recompile.ir/learning/database/%d9%85%d8%ad%d8%af%d9%88%d8%af%db%8c%d8%aa%d9%87%d8%a7-%d9%88-%d9%85%d8%ab%d8%a7%d9%84-%d8%a7%d8%b2-%da%af%d8%b1%d8%a7%d9%81-%d8%af%db%8c%d8%aa%d8%a7%d8%a8%db%8c%d8%b3-%d8%a8%d8%ae%d8%b4-%d8%b3%d9%88/">محدودیتها و مثال از گراف دیتابیس (بخش سوم)</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">زمان مطالعه: </span> <span class="rt-time"> 4</span> <span class="rt-label rt-postfix">دقیقه</span></span>
<p><strong>محدودیتها</strong></p>



<p>در این بخش به معرفی محدودیتهای گراف دیتابیس sql و همچنین یک مثال عملی می پردازیم</p>



<ol class="wp-block-list" type="1"><li>جداول موقت (temporal table) ها نمی توانند از نوع نود و یال باشند<ol><li>Table types و &nbsp;table variables ها نمی توانند از نوع نود و یال باشند</li></ol><ol><li>قابلیت temporal table برای جداول نود و یال پشتیبانی نشده است</li></ol><ol><li>جداول نود و یال نمی توانند بصورت memory optimized table ایجاد شوند</li></ol><ol><li>فیلدهای $from_id , $to_id آپدیت نمی شوند و در صورت نیاز به تغییر باید حذف شوند و ارتباط مجدد درج شود</li></ol><ol><li>Cross database کوئری ها برای این جداول پشتیبانی نشده است</li></ol></li></ol>



<p><strong>یک مثال</strong></p>



<p>موجودیتهای زیر را در نظر بگیرید</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="419" height="337" src="http://recompile.ir/wp-content/uploads/2021/01/4.jpg" alt="" class="wp-image-323" srcset="http://recompile.ir/wp-content/uploads/2021/01/4.jpg 419w, http://recompile.ir/wp-content/uploads/2021/01/4-300x241.jpg 300w" sizes="(max-width: 419px) 100vw, 419px" /></figure>



<p>پس از تعریف جداول و سپس مقدار دهی آنها به شرح زیر به نتیجه هایی دست پیدا خواهیم کرد</p>



<pre class="wp-block-preformatted"></pre>



<pre class="wp-block-code"><code>-- Create NODE tables
CREATE TABLE Person (
	ID INTEGER PRIMARY KEY
	,name VARCHAR(100)
	) AS NODE;

CREATE TABLE Restaurant (
	ID INTEGER NOT NULL
	,name VARCHAR(100)
	,city VARCHAR(100)
	) AS NODE;

CREATE TABLE City (
	ID INTEGER PRIMARY KEY
	,name VARCHAR(100)
	,stateName VARCHAR(100)
	) AS NODE;
-- Create EDGE tables. 
CREATE TABLE likes (rating INTEGER) AS EDGE;

CREATE TABLE friendOf AS EDGE;

CREATE TABLE livesIn AS EDGE;

CREATE TABLE locatedIn AS EDGE;
</code></pre>



<p>اضافه کردن داده ها</p>



<pre class="wp-block-code"><code>-- Insert data into node tables. Inserting into a node table is same as inserting into a regular table
INSERT INTO Person
VALUES (
	1
	,'John'
	);

INSERT INTO Person
VALUES (
	2
	,'Mary'
	);

INSERT INTO Person
VALUES (
	3
	,'Alice'
	);

INSERT INTO Person
VALUES (
	4
	,'Jacob'
	);

INSERT INTO Person
VALUES (
	5
	,'Julie'
	);

INSERT INTO Restaurant
VALUES (
	1
	,'Taco Dell'
	,'Bellevue'
	);

INSERT INTO Restaurant
VALUES (
	2
	,'Ginger and Spice'
	,'Seattle'
	);

INSERT INTO Restaurant
VALUES (
	3
	,'Noodle Land'
	,'Redmond'
	);

INSERT INTO City
VALUES (
	1
	,'Bellevue'
	,'wa'
	);

INSERT INTO City
VALUES (
	2
	,'Seattle'
	,'wa'
	);

INSERT INTO City
VALUES (
	3
	,'Redmond'
	,'wa'
	);
</code></pre>



<p>اضافه کردن داده ها در جداول edge ها و شروع ایجاد روابط با استفاده از node_id$ .. مدیریت لایک ها و &#8230;</p>



<pre class="wp-block-code"><code>-- Insert into edge table. While inserting into an edge table, 
-- you need to provide the $node_id from $from_id and $to_id columns.
INSERT INTO likes
VALUES (
	(
		SELECT $NODE_ID
		FROM Person
		WHERE id = 1
		)
	,(
		SELECT $NODE_ID
		FROM Restaurant
		WHERE id = 1
		)
	,9
	);

INSERT INTO likes
VALUES (
	(
		SELECT $NODE_ID
		FROM Person
		WHERE id = 2
		)
	,(
		SELECT $NODE_ID
		FROM Restaurant
		WHERE id = 2
		)
	,9
	);

INSERT INTO likes
VALUES (
	(
		SELECT $NODE_ID
		FROM Person
		WHERE id = 3
		)
	,(
		SELECT $NODE_ID
		FROM Restaurant
		WHERE id = 3
		)
	,9
	);

INSERT INTO likes
VALUES (
	(
		SELECT $NODE_ID
		FROM Person
		WHERE id = 4
		)
	,(
		SELECT $NODE_ID
		FROM Restaurant
		WHERE id = 3
		)
	,9
	);

INSERT INTO likes
VALUES (
	(
		SELECT $NODE_ID
		FROM Person
		WHERE id = 5
		)
	,(
		SELECT $NODE_ID
		FROM Restaurant
		WHERE id = 3
		)
	,9
	);

INSERT INTO livesIn
VALUES (
	(
		SELECT $NODE_ID
		FROM Person
		WHERE id = 1
		)
	,(
		SELECT $NODE_ID
		FROM City
		WHERE id = 1
		)
	);

INSERT INTO livesIn
VALUES (
	(
		SELECT $NODE_ID
		FROM Person
		WHERE id = 2
		)
	,(
		SELECT $NODE_ID
		FROM City
		WHERE id = 2
		)
	);

INSERT INTO livesIn
VALUES (
	(
		SELECT $NODE_ID
		FROM Person
		WHERE id = 3
		)
	,(
		SELECT $NODE_ID
		FROM City
		WHERE id = 3
		)
	);

INSERT INTO livesIn
VALUES (
	(
		SELECT $NODE_ID
		FROM Person
		WHERE id = 4
		)
	,(
		SELECT $NODE_ID
		FROM City
		WHERE id = 3
		)
	);

INSERT INTO livesIn
VALUES (
	(
		SELECT $NODE_ID
		FROM Person
		WHERE id = 5
		)
	,(
		SELECT $NODE_ID
		FROM City
		WHERE id = 1
		)
	);

INSERT INTO locatedIn
VALUES (
	(
		SELECT $NODE_ID
		FROM Restaurant
		WHERE id = 1
		)
	,(
		SELECT $NODE_ID
		FROM City
		WHERE id = 1
		)
	);

INSERT INTO locatedIn
VALUES (
	(
		SELECT $NODE_ID
		FROM Restaurant
		WHERE id = 2
		)
	,(
		SELECT $NODE_ID
		FROM City
		WHERE id = 2
		)
	);

INSERT INTO locatedIn
VALUES (
	(
		SELECT $NODE_ID
		FROM Restaurant
		WHERE id = 3
		)
	,(
		SELECT $NODE_ID
		FROM City
		WHERE id = 3
		)
	);

-- Insert data into the friendof edge.
INSERT INTO friendof
VALUES (
	(
		SELECT $NODE_ID
		FROM person
		WHERE ID = 1
		)
	,(
		SELECT $NODE_ID
		FROM person
		WHERE ID = 2
		)
	);

INSERT INTO friendof
VALUES (
	(
		SELECT $NODE_ID
		FROM person
		WHERE ID = 2
		)
	,(
		SELECT $NODE_ID
		FROM person
		WHERE ID = 3
		)
	);

INSERT INTO friendof
VALUES (
	(
		SELECT $NODE_ID
		FROM person
		WHERE ID = 3
		)
	,(
		SELECT $NODE_ID
		FROM person
		WHERE ID = 1
		)
	);

INSERT INTO friendof
VALUES (
	(
		SELECT $NODE_ID
		FROM person
		WHERE ID = 4
		)
	,(
		SELECT $NODE_ID
		FROM person
		WHERE ID = 2
		)
	);

INSERT INTO friendof
VALUES (
	(
		SELECT $NODE_ID
		FROM person
		WHERE ID = 5
		)
	,(
		SELECT $NODE_ID
		FROM person
		WHERE ID = 4
		)
	);
</code></pre>



<p>نمایش داده ها و بازیابی رکوردها .. همینطور که میبینید خروجی کوئری ها بصورت فرمت json هست :</p>



<pre class="wp-block-code"><code>SELECT *
FROM dbo.friendOf
</code></pre>



<figure class="wp-block-image size-large"><img decoding="async" width="810" height="206" src="http://recompile.ir/wp-content/uploads/2021/01/3.jpg" alt="" class="wp-image-322" srcset="http://recompile.ir/wp-content/uploads/2021/01/3.jpg 810w, http://recompile.ir/wp-content/uploads/2021/01/3-300x76.jpg 300w, http://recompile.ir/wp-content/uploads/2021/01/3-768x195.jpg 768w" sizes="(max-width: 810px) 100vw, 810px" /></figure>
<p>بازدیدها: 0</p><p>نوشته <a href="http://recompile.ir/learning/database/%d9%85%d8%ad%d8%af%d9%88%d8%af%db%8c%d8%aa%d9%87%d8%a7-%d9%88-%d9%85%d8%ab%d8%a7%d9%84-%d8%a7%d8%b2-%da%af%d8%b1%d8%a7%d9%81-%d8%af%db%8c%d8%aa%d8%a7%d8%a8%db%8c%d8%b3-%d8%a8%d8%ae%d8%b4-%d8%b3%d9%88/">محدودیتها و مثال از گراف دیتابیس (بخش سوم)</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/learning/database/%d9%85%d8%ad%d8%af%d9%88%d8%af%db%8c%d8%aa%d9%87%d8%a7-%d9%88-%d9%85%d8%ab%d8%a7%d9%84-%d8%a7%d8%b2-%da%af%d8%b1%d8%a7%d9%81-%d8%af%db%8c%d8%aa%d8%a7%d8%a8%db%8c%d8%b3-%d8%a8%d8%ae%d8%b4-%d8%b3%d9%88/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>گراف دیتابیس چیست؟ (بخش اول)</title>
		<link>http://recompile.ir/learning/database/%da%af%d8%b1%d8%a7%d9%81-%d8%af%db%8c%d8%aa%d8%a7%d8%a8%db%8c%d8%b3-%da%86%db%8c%d8%b3%d8%aa%d8%9f-%d8%a8%d8%ae%d8%b4-%d8%a7%d9%88%d9%84/</link>
					<comments>http://recompile.ir/learning/database/%da%af%d8%b1%d8%a7%d9%81-%d8%af%db%8c%d8%aa%d8%a7%d8%a8%db%8c%d8%b3-%da%86%db%8c%d8%b3%d8%aa%d8%9f-%d8%a8%d8%ae%d8%b4-%d8%a7%d9%88%d9%84/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Sun, 10 Jan 2021 11:02:31 +0000</pubDate>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[دیتابیس]]></category>
		<category><![CDATA[graph database]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[گراف دیتابیس]]></category>
		<guid isPermaLink="false">http://recompile.ir/?p=313</guid>

					<description><![CDATA[<p>گراف دیتابیس ها(graph database) این امکان را برای ما فراهم می کنند که ما داده ها و رابطه ها رو در قالب ساختار گراف ذخیره کنیم . در پایگاه داده های رابطه ای بستگی به نوع سناریو که داریم بعضی اوقات نیاز هست که برای پیاده سازی روابط خیلی پیچیده ، داده ها را در [&#8230;]</p>
<p>نوشته <a href="http://recompile.ir/learning/database/%da%af%d8%b1%d8%a7%d9%81-%d8%af%db%8c%d8%aa%d8%a7%d8%a8%db%8c%d8%b3-%da%86%db%8c%d8%b3%d8%aa%d8%9f-%d8%a8%d8%ae%d8%b4-%d8%a7%d9%88%d9%84/">گراف دیتابیس چیست؟ (بخش اول)</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">زمان مطالعه: </span> <span class="rt-time"> 2</span> <span class="rt-label rt-postfix">دقیقه</span></span>
<p>گراف دیتابیس ها(graph database) این امکان را برای ما فراهم می کنند که ما داده ها و رابطه ها رو در قالب ساختار گراف ذخیره کنیم .</p>



<p>در پایگاه داده های رابطه ای بستگی به نوع سناریو که داریم بعضی اوقات نیاز هست که برای پیاده سازی روابط خیلی پیچیده ، داده ها را در قالب جداول متعدد ذخیره کنیم .. این جا ما مجبور به نوشتن Query ها و Join های زیادی بودیم که بتوانیم خروجی و گزارش دلخواه مان را بسازیم . هرچقدر کوئری های ما بزرگ و پیچیده بشود و روابط بین جداول زیاد (Join) ، هزینه اجرای دستور ما (Cost of Query) بالا میرود و سرعت اجرای دستورات پایین و پایین تر &#8230;</p>



<p>با استفاده از امکانات گراف دیتابیس می توانیم این پیچیدگی ها را ساده کنیم .</p>



<p>Neo4j, OrientDB , Amazon Neptune از معروف ترین پایگاه داده های مبتنی بر گراف هستند</p>



<p><strong>مفاهیم اصلی</strong><strong> Graph Database </strong><strong>ها</strong><strong> :&nbsp;</strong></p>



<ul class="wp-block-list"><li>گره‌ها یا node ← نشان دهنده موجودیت یا entitiy های ما هستند .. مثل مردم، کسب و کار ، حساب‌های کاربری &nbsp;&#8230;</li><li>یال‌ها یا edge ← و به‌طور کلی یال‌ها وظیفه نمایش روابط را در دیتابیس بر عهده دارند. همچنین بسیاری از اطلاعات مهم در یال‌ها ذخیره می‌شوند.</li></ul>



<p><strong>چه موقع از ساختار گراف بهتره استفاده کرد ؟</strong><strong></strong></p>



<ol class="wp-block-list" type="1"><li>مواقعی که برنامه شما دارای داده ها با ساختار سلسله مراتبی است (hierarchy) .. مثل&nbsp; چارت سازمانی</li><li>موجودیت های شما دارای روابط پیچیده چند به چند باشد</li></ol>



<p>به عنوان مثال ، یک گره جدول (node table)&nbsp; Personهمه نود های Person متعلق به یک گراف را در خود نگه می دارد. به طور مشابه ، یال جدول (edge table) مجموعه ای از نوع مشابه لبه ها(یال ها) است. به عنوان مثال ، یک یال جدول Friends تمام یال هایی را که یک شخص را به شخص دیگری متصل می کند ، نگه می دارد. از آنجا که گره ها و یال ها در جداول ذخیره می شوند ، بیشتر عملیات پشتیبانی شده روی جداول معمولی بر روی جدول های گره یا یال پشتیبانی می شوند.</p>
<p>بازدیدها: 0</p><p>نوشته <a href="http://recompile.ir/learning/database/%da%af%d8%b1%d8%a7%d9%81-%d8%af%db%8c%d8%aa%d8%a7%d8%a8%db%8c%d8%b3-%da%86%db%8c%d8%b3%d8%aa%d8%9f-%d8%a8%d8%ae%d8%b4-%d8%a7%d9%88%d9%84/">گراف دیتابیس چیست؟ (بخش اول)</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/learning/database/%da%af%d8%b1%d8%a7%d9%81-%d8%af%db%8c%d8%aa%d8%a7%d8%a8%db%8c%d8%b3-%da%86%db%8c%d8%b3%d8%aa%d8%9f-%d8%a8%d8%ae%d8%b4-%d8%a7%d9%88%d9%84/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>معماری SQL Server Graph Database (بخش دوم)</title>
		<link>http://recompile.ir/learning/database/%d9%85%d8%b9%d9%85%d8%a7%d8%b1%db%8c-sql-server-graph-database-%d8%a8%d8%ae%d8%b4-%d8%af%d9%88%d9%85/</link>
					<comments>http://recompile.ir/learning/database/%d9%85%d8%b9%d9%85%d8%a7%d8%b1%db%8c-sql-server-graph-database-%d8%a8%d8%ae%d8%b4-%d8%af%d9%88%d9%85/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Sun, 10 Jan 2021 11:01:40 +0000</pubDate>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[دیتابیس]]></category>
		<category><![CDATA[graph database]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[گراف دیتابیس]]></category>
		<guid isPermaLink="false">http://recompile.ir/?p=315</guid>

					<description><![CDATA[<p>معماری graph database Node Table (گره جدول) یک گره جدول ، موجودی موجود در یک طرح گراف را نشان می دهد. هر بار که یک گره جدول ایجاد می شود ، همراه با ستون های تعریف شده توسط کاربر ، یک ستون ضمنی&#160; $node_id ایجاد می شود ، که به طور یونیک به یک مپ [&#8230;]</p>
<p>نوشته <a href="http://recompile.ir/learning/database/%d9%85%d8%b9%d9%85%d8%a7%d8%b1%db%8c-sql-server-graph-database-%d8%a8%d8%ae%d8%b4-%d8%af%d9%88%d9%85/">معماری SQL Server Graph Database (بخش دوم)</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">زمان مطالعه: </span> <span class="rt-time"> 2</span> <span class="rt-label rt-postfix">دقیقه</span></span>
<p><strong>معماری </strong><strong>graph database</strong></p>



<figure class="wp-block-image size-large"><img decoding="async" width="409" height="433" src="http://recompile.ir/wp-content/uploads/2021/01/1.jpg" alt="" class="wp-image-317" srcset="http://recompile.ir/wp-content/uploads/2021/01/1.jpg 409w, http://recompile.ir/wp-content/uploads/2021/01/1-283x300.jpg 283w" sizes="(max-width: 409px) 100vw, 409px" /></figure>



<p><strong>Node Table </strong><strong>(گره جدول)</strong></p>



<p>یک گره جدول ، موجودی موجود در یک طرح گراف را نشان می دهد. هر بار که یک گره جدول ایجاد می شود ، همراه با ستون های تعریف شده توسط کاربر ، یک ستون ضمنی&nbsp; $node_id ایجاد می شود ، که به طور یونیک به یک مپ می شود. مقادیر $node_id به طور خودکار تولید می شوند و ترکیبی از object_id آن گره جدول و مقدار bigint تولید شده در داخل هستند. با این حال ، وقتی ستون&nbsp; $node_id انتخاب می شود ، یک مقدار محاسبه شده به شکل یک رشته JSON نمایش داده می شود. همچنین ،&nbsp; $node_id یک ستون کاذب است که به یک نام داخلی با رشته hex مپ می شود. وقتی&nbsp; $node_id را از جدول انتخاب کنید ، نام ستون به صورت $node_id_&lt;hex_string&gt; ظاهر می شود. بهتر است از نام ستون کاذب در کوئری ها برای رسیدن به $node_id داخلی&nbsp; و باید از استفاده از نام داخلی با رشته hex خودداری شود.</p>



<p>به کاربران توصیه می شود که در هنگام ایجاد جدول node ، constraint یا ایندکس یونیک به فرد را در ستون&nbsp; $node_id ایجاد کنند ، اما اگر یکی ایجاد نشود ، یک ایندکس nonclustered پیش فرض به طور خودکار ایجاد می شود. با این حال ، هر index در یک ستون کاذب &nbsp;گراف در ستون های داخلی زیر ایجاد می شود. یعنی ایندکسی که در ستون&nbsp; $node_id ایجاد شده است ، در ستون داخلیgragh_id_&lt;hexstring&gt; ظاهر می شود.</p>



<p><strong>Edge Table </strong><strong>(یال جدول)</strong></p>



<p>یک یال جدول نشان دهنده یک رابطه در یک گراف است. یال ها همیشه دو گره (نود) را به هم متصل می کنند. یک جدول edge کاربران را قادر می سازد روابط many to many را در گراف مدلسازی کنند. یک یال جدول ممکن است هیچ attribute &nbsp;مشخص شده توسط کاربر را در خود نداشته باشد. هر بار که یال جدول ایجاد می شود ، همراه با attribute های تعریف شده توسط کاربر ، سه ستون ضمنی در یال جدول ایجاد می شود:</p>



<p>$edge_id : شناسه یونیک یک یال است . این ستون از ترکیب object_id جدول و یک مقدار bigint داخلی است. با این حال ، وقتی ستون&nbsp; $edge_id انتخاب می شود ، مقدار محاسبه شده ای به شکل رشته JSON نمایش داده می شود.</p>



<p>$form_id &nbsp;: node_id&nbsp; &nbsp;شناسه جدول نود که ارتباط از آن شروع شده را ذخیره می کند</p>



<p>$to_id: node_id&nbsp; &nbsp;شناسه جدول نود که ارتباط از تا آنجا ادامه دارد را ذخیره می کند</p>



<p>نود هایی که در یک یال آمده می تواند داده هایی که توسط داده های درج شده در ستون&nbsp; $from_id و&nbsp; $to_id اداره می شود را به هم متصل کند. در اولین نسخه ، امکان تعریف constraint برای یال جدول ها جهت محدود ارتباط با چند نوع نود وجود ندارد. یعنی یک یال می تواند هر دو گره(نود)ی را در گراف به هم وصل کند ، صرف نظر از نوع آن.</p>



<p>نحوه ذخیره جداول گره و یال در دیتابیس</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="697" height="255" src="http://recompile.ir/wp-content/uploads/2021/01/2.jpg" alt="" class="wp-image-318" srcset="http://recompile.ir/wp-content/uploads/2021/01/2.jpg 697w, http://recompile.ir/wp-content/uploads/2021/01/2-300x110.jpg 300w" sizes="auto, (max-width: 697px) 100vw, 697px" /></figure>
<p>بازدیدها: 0</p><p>نوشته <a href="http://recompile.ir/learning/database/%d9%85%d8%b9%d9%85%d8%a7%d8%b1%db%8c-sql-server-graph-database-%d8%a8%d8%ae%d8%b4-%d8%af%d9%88%d9%85/">معماری SQL Server Graph Database (بخش دوم)</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/learning/database/%d9%85%d8%b9%d9%85%d8%a7%d8%b1%db%8c-sql-server-graph-database-%d8%a8%d8%ae%d8%b4-%d8%af%d9%88%d9%85/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>الگوهای طراحی خلاقانه &#8211; Creational Design Patterns</title>
		<link>http://recompile.ir/learning/%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%ae%d9%84%d8%a7%d9%82%d8%a7%d9%86%d9%87-creational-design-patterns/</link>
					<comments>http://recompile.ir/learning/%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%ae%d9%84%d8%a7%d9%82%d8%a7%d9%86%d9%87-creational-design-patterns/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Mon, 30 Nov 2020 15:07:04 +0000</pubDate>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[الگوها(Design Pattern)]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[ریفکتور]]></category>
		<category><![CDATA[ریفکتورینگ]]></category>
		<guid isPermaLink="false">http://recompile.ir/?p=296</guid>

					<description><![CDATA[<p>Factory Method یک رابط برای ایجاد اشیا در یک ابر کلاس فراهم می کند ، اما به کلاسهای فرعی اجازه می دهد نوع اشیا ایجاد شده را تغییر دهند. Abstract Factory به شما اجازه می دهد اشیا &#160;هم خانواده یا مرتبط را بدون تعیین کلاسهای اصلی آنها تولید کنید. Builder به شما امکان می دهد [&#8230;]</p>
<p>نوشته <a href="http://recompile.ir/learning/%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%ae%d9%84%d8%a7%d9%82%d8%a7%d9%86%d9%87-creational-design-patterns/">الگوهای طراحی خلاقانه &#8211; Creational Design Patterns</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">زمان مطالعه: </span> <span class="rt-time"> &lt; 1</span> <span class="rt-label rt-postfix">دقیقه</span></span>
<p><strong>Factory Method</strong></p>



<p>یک رابط برای ایجاد اشیا در یک ابر کلاس فراهم می کند ، اما به کلاسهای فرعی اجازه می دهد نوع اشیا ایجاد شده را تغییر دهند.</p>



<p><strong>Abstract Factory</strong></p>



<p>به شما اجازه می دهد اشیا &nbsp;هم خانواده یا مرتبط را بدون تعیین کلاسهای اصلی آنها تولید کنید.</p>



<p><strong>Builder</strong></p>



<p>به شما امکان می دهد اشیا complex پیچیده را گام به گام بسازید. این الگو به شما امکان می دهد انواع مختلفی از نمایش یک شی را با استفاده از کد ساخت یکسان تولید کنید.</p>



<p><strong>Prototype</strong></p>



<p>به شما اجازه می دهد اشیا موجود را بدون اینکه کدتان به کلاس آنها وابسته باشد ، کپی کنید.</p>



<p><strong>Singleton</strong></p>



<p>به شما اجازه می دهد تا از یک شیء فقط یک نمونه در سراسر برنامه بسازید</p>
<p>بازدیدها: 4</p><p>نوشته <a href="http://recompile.ir/learning/%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%ae%d9%84%d8%a7%d9%82%d8%a7%d9%86%d9%87-creational-design-patterns/">الگوهای طراحی خلاقانه &#8211; Creational Design Patterns</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/learning/%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%ae%d9%84%d8%a7%d9%82%d8%a7%d9%86%d9%87-creational-design-patterns/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>الگوهای رفتاری -Behavioral Design Patterns</title>
		<link>http://recompile.ir/learning/%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b1%d9%81%d8%aa%d8%a7%d8%b1%db%8c-behavioral-design-patterns/</link>
					<comments>http://recompile.ir/learning/%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b1%d9%81%d8%aa%d8%a7%d8%b1%db%8c-behavioral-design-patterns/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Mon, 30 Nov 2020 15:06:39 +0000</pubDate>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[الگوها(Design Pattern)]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[ریفکتور]]></category>
		<guid isPermaLink="false">http://recompile.ir/?p=300</guid>

					<description><![CDATA[<p>Chain of Responsibility به شما امکان می دهد درخواست ها را از طریق زنجیره ای از کلاسها منتقل کنید. با دریافت یک درخواست ، هر یک از کارگزاران (کلاسها) تصمیم می گیرند که درخواست را پردازش کنند یا آن را به مدیر بعدی در زنجیره منتقل کنند. Command یک درخواست را به یک شی مستقل [&#8230;]</p>
<p>نوشته <a href="http://recompile.ir/learning/%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b1%d9%81%d8%aa%d8%a7%d8%b1%db%8c-behavioral-design-patterns/">الگوهای رفتاری -Behavioral Design Patterns</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">زمان مطالعه: </span> <span class="rt-time"> 2</span> <span class="rt-label rt-postfix">دقیقه</span></span>
<p><strong>Chain of Responsibility</strong></p>



<p>به شما امکان می دهد درخواست ها را از طریق زنجیره ای از کلاسها منتقل کنید. با دریافت یک درخواست ، هر یک از کارگزاران (کلاسها) تصمیم می گیرند که درخواست را پردازش کنند یا آن را به مدیر بعدی در زنجیره منتقل کنند.</p>



<p><strong>Command</strong></p>



<p>یک درخواست را به یک شی مستقل تبدیل می کند که شامل تمام اطلاعات مربوط به درخواست است. این تحول به شما امکان می دهد روش ها را با درخواست های مختلف پارامتر کنید ، اجرای درخواست را به تأخیر بیاندازید یا در صف قرار بگیرید و از عملیات غیرقابل انعطاف پشتیبانی کنید.</p>



<p><strong>Iterator</strong></p>



<p>به شما امکان می دهد عناصر یک مجموعه را بدون نمایش نمایانگر اصلی آن (لیست ، stack، treeو غیره) مرور کنید.</p>



<p><strong>Mediator</strong></p>



<p>به شما امکان می دهد وابستگی های آشفته بین اشیا را کاهش دهید. این الگو ارتباطات مستقیم بین اشیا را محدود می کند و آنها را مجبور به همکاری فقط از طریق یک شی میانجی می کند.</p>



<p><strong>Memento</strong></p>



<p>به شما اجازه می دهد تا وضعیت قبلی یک شی را ذخیره کرده و بازیابی کنید بدون اینکه جزئیات اجرای آن مشخص شود.</p>



<p><strong>Observer</strong></p>



<p>به شما اجازه می دهد مکانیسم اشتراک برای آگاه کردن چندین اشیا در مورد هر رویدادی که برای شی مورد مشاهده آنها رخ می دهد ، تعریف کنید.</p>



<p><strong>State</strong></p>



<p>اجازه می دهد یک شی object هنگام تغییر وضعیت داخلی ، رفتار خود را تغییر دهد. به نظر می رسد مثل اینکه شی کلاس خود را تغییر داده باشد.</p>



<p><strong>Strategy</strong></p>



<p>به شما اجازه می دهد تا خانواده ای از الگوریتم ها را تعریف کنید ، هر یک از آنها را در یک کلاس جداگانه قرار دهید و اشیا آنها را جایگزین کنید.</p>



<p><strong>Template Method</strong></p>



<p>اسکلت یک الگوریتم در ابر کلاس را تعریف می کند اما به شما اجازه می دهد بدون تغییر ساختار ساختار ، زیر کلاس ها از مراحل خاص الگوریتم override شوند.</p>



<p><strong>Visitor</strong></p>



<p>به شما امکان می دهد الگوریتم ها را از اشیایی که روی آنها کار می کنند جدا کنید.</p>
<p>بازدیدها: 17</p><p>نوشته <a href="http://recompile.ir/learning/%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b1%d9%81%d8%aa%d8%a7%d8%b1%db%8c-behavioral-design-patterns/">الگوهای رفتاری -Behavioral Design Patterns</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/learning/%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b1%d9%81%d8%aa%d8%a7%d8%b1%db%8c-behavioral-design-patterns/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>الگوهای طراحی ساختاری &#8211; Structural Design Patterns</title>
		<link>http://recompile.ir/learning/%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b3%d8%a7%d8%ae%d8%aa%d8%a7%d8%b1%db%8c-structural-patterns/</link>
					<comments>http://recompile.ir/learning/%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b3%d8%a7%d8%ae%d8%aa%d8%a7%d8%b1%db%8c-structural-patterns/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Mon, 30 Nov 2020 15:06:13 +0000</pubDate>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[الگوها(Design Pattern)]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[ریفکتور]]></category>
		<guid isPermaLink="false">http://recompile.ir/?p=298</guid>

					<description><![CDATA[<p>الگوهای ساختاری چگونگی جمع آوری اشیا و کلاسها را به ساختارهای بزرگتر توضیح می دهد در حالی که این ساختارها را انعطاف پذیر و کارآمد نگه می دارد. Adapter به اشیا دارای رابط کاربری (interface)ناسازگار امکان همکاری می دهد. Bridge به شما امکان می دهد یک کلاس بزرگ یا مجموعه ای از کلاسهای نزدیک را [&#8230;]</p>
<p>نوشته <a href="http://recompile.ir/learning/%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b3%d8%a7%d8%ae%d8%aa%d8%a7%d8%b1%db%8c-structural-patterns/">الگوهای طراحی ساختاری &#8211; Structural Design Patterns</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">زمان مطالعه: </span> <span class="rt-time"> &lt; 1</span> <span class="rt-label rt-postfix">دقیقه</span></span>
<p>الگوهای ساختاری چگونگی جمع آوری اشیا و کلاسها را به ساختارهای بزرگتر توضیح می دهد در حالی که این ساختارها را انعطاف پذیر و کارآمد نگه می دارد.</p>



<p><strong>Adapter</strong></p>



<p>به اشیا دارای رابط کاربری (interface)ناسازگار امکان همکاری می دهد.</p>



<p><strong>Bridge</strong></p>



<p>به شما امکان می دهد یک کلاس بزرگ یا مجموعه ای از کلاسهای نزدیک را به دو سلسله مراتب جداگانه تقسیم کنید &#8211; انتزاع و پیاده سازی &#8211; که می تواند به طور مستقل از یکدیگر توسعه یابد.</p>



<p><strong>Composite</strong></p>



<p>به شما اجازه می دهد اشیا را در ساختارهای درختی ترکیب کنید و سپس با آنها مانند یک کلاس &nbsp;جداگانه کار کنید.</p>



<p><strong>Decorator</strong></p>



<p>به شما اجازه می دهد با قرار دادن اشیا در داخل کلاسهایی &nbsp;که مخصوص و حاوی این رفتارها هستند ، رفتارهای جدیدی را به اشیا پیوند دهید.</p>



<p><strong>Facade</strong></p>



<p>یک اینترفیس ساده برای کتابخانه ، یک چارچوب یا هر مجموعه پیچیده دیگری از کلاس ها فراهم می کند.</p>



<p><strong>Flyweight</strong></p>



<p>به شما امکان می دهد با تقسیم قطعات مشترک حالت بین چندین شی به جای نگهداری تمام داده ها در هر شی ، اشیا بیشتری را در مقدار RAM موجود قرار دهید.</p>



<p><strong>Proxy</strong></p>



<p>پروکسی یک الگوی طراحی ساختاری است که به شما امکان می دهد جایگزین یا placeholder دیگری استفاده کنید. پروکسی دسترسی به شی اصلی را کنترل می کند ، به شما امکان می دهد کاری را قبل یا بعد از ورود درخواست به شی اصلی انجام دهید.</p>
<p>بازدیدها: 35</p><p>نوشته <a href="http://recompile.ir/learning/%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b3%d8%a7%d8%ae%d8%aa%d8%a7%d8%b1%db%8c-structural-patterns/">الگوهای طراحی ساختاری &#8211; Structural Design Patterns</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/learning/%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b3%d8%a7%d8%ae%d8%aa%d8%a7%d8%b1%db%8c-structural-patterns/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
