<?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/tag/%D8%B1%DB%8C%D9%81%DA%A9%D8%AA%D9%88%D8%B1%DB%8C%D9%86%DA%AF/feed/" rel="self" type="application/rss+xml" />
	<link>https://recompile.ir/tag/ریفکتورینگ/</link>
	<description>مشاوره و آموزش برای بازسازی و تغییر</description>
	<lastBuildDate>Mon, 30 Nov 2020 15:07:05 +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>https://recompile.ir/tag/ریفکتورینگ/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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>دسته بندی الگوهای طراحی</title>
		<link>http://recompile.ir/learning/%d8%af%d8%b3%d8%aa%d9%87-%d8%a8%d9%86%d8%af%db%8c-%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b7%d8%b1%d8%a7%d8%ad%db%8c/</link>
					<comments>http://recompile.ir/learning/%d8%af%d8%b3%d8%aa%d9%87-%d8%a8%d9%86%d8%af%db%8c-%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b7%d8%b1%d8%a7%d8%ad%db%8c/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Fri, 09 Oct 2020 18:24:20 +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=271</guid>

					<description><![CDATA[<p>الگوهای طراحی از نظر پیچیدگی ، سطح جزئیات و مقیاس کاربرد برای کل سیستم در حال طراحی متفاوت هستند. تشبیه به راه سازی را دوست دارم: شما می توانید با نصب برخی از چراغ های راهنمایی و یا ایجاد یک تپل چند سطحی با معابر زیرزمینی برای عابرین پیاده ، یک تقاطع را ایمن تر [&#8230;]</p>
<p>نوشته <a href="http://recompile.ir/learning/%d8%af%d8%b3%d8%aa%d9%87-%d8%a8%d9%86%d8%af%db%8c-%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b7%d8%b1%d8%a7%d8%ad%db%8c/">دسته بندی الگوهای طراحی</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>به ابتدایی ترین و سطح پایین ترین الگوها اغلب اصطلاحا منفرد گفته می شود. آنها معمولاً فقط در یک زبان برنامه نویسی کاربرد دارند.</p>



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



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



<ul class="wp-block-list"><li><strong>الگوهای خلاقیت</strong> مکانیسم های ساخت شی را ایجاد می کنند که انعطاف پذیری و استفاده مجدد از کد موجود را افزایش می دهد.</li></ul>



<ul class="wp-block-list"><li><strong>الگوهای ساختاری</strong> نحوه جمع آوری اشیا و کلاسها را به ساختارهای بزرگتر توضیح می دهد ، در حالی که سازه ها را انعطاف پذیر و کارآمد نگه می دارد.</li></ul>



<ul class="wp-block-list"><li><strong>الگوهای رفتاری</strong> از برقراری ارتباط موثر و تعیین مسئولیت بین اشیا مراقبت می کنند.</li></ul>
<p>بازدیدها: 104</p><p>نوشته <a href="http://recompile.ir/learning/%d8%af%d8%b3%d8%aa%d9%87-%d8%a8%d9%86%d8%af%db%8c-%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b7%d8%b1%d8%a7%d8%ad%db%8c/">دسته بندی الگوهای طراحی</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/learning/%d8%af%d8%b3%d8%aa%d9%87-%d8%a8%d9%86%d8%af%db%8c-%d8%a7%d9%84%da%af%d9%88%d9%87%d8%a7%db%8c-%d8%b7%d8%b1%d8%a7%d8%ad%db%8c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>تکنیکهای ریفکتور</title>
		<link>http://recompile.ir/learning/refactoring/%d8%aa%da%a9%d9%86%db%8c%da%a9%d9%87%d8%a7%db%8c-%d8%b1%db%8c%d9%81%da%a9%d8%aa%d9%88%d8%b1/</link>
					<comments>http://recompile.ir/learning/refactoring/%d8%aa%da%a9%d9%86%db%8c%da%a9%d9%87%d8%a7%db%8c-%d8%b1%db%8c%d9%81%da%a9%d8%aa%d9%88%d8%b1/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Mon, 31 Aug 2020 18:39:14 +0000</pubDate>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[بازسازی کد(Refactoring)]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[Refactoring Techniques]]></category>
		<category><![CDATA[تکنیک]]></category>
		<category><![CDATA[ریفکتور]]></category>
		<category><![CDATA[ریفکتورینگ]]></category>
		<guid isPermaLink="false">http://recompile.ir/?p=163</guid>

					<description><![CDATA[<p>بازآرایی متد ها (Composing Methods) بخش اعظمی از refactoring شامل اصلاح و بازآرایی متد ها است. در بیشتر موارد ، متدهای بیش از حد طولانی ریشه همه مشکلات هستند. مبهم بودن کد موجود در این متد ها منطق اجرا را پنهان می کند و درک متد را بسیار دشوار کرده و تغییر آن را سخت [&#8230;]</p>
<p>نوشته <a href="http://recompile.ir/learning/refactoring/%d8%aa%da%a9%d9%86%db%8c%da%a9%d9%87%d8%a7%db%8c-%d8%b1%db%8c%d9%81%da%a9%d8%aa%d9%88%d8%b1/">تکنیکهای ریفکتور</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>بازآرایی متد ها (Composing Methods)</strong></p>



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



<p>تکنیک های refactoring در این گروه ساده سازی متد ها ، حذف کدهای تکراری و زمینه سازی برای پیشرفت های آینده است.</p>



<ul class="wp-block-list"><li>Extract Method</li><li>Inline Method</li><li>Extract Variable</li><li>Inline Temp</li><li>Replace Temp with Query</li><li>Split Temporary Variable</li><li>Remove Assignments to Parameters</li><li>Replace Method with Method Object</li><li>Substitute Algorithm</li></ul>



<p><strong>انتقال متد ها و&#8230; بین کلاسها</strong></p>



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



<ul class="wp-block-list"><li>Move Method</li><li>Move Field</li><li>Extract Class</li><li>Inline Class</li><li>Hide Delegate</li><li>Remove Middle Man</li><li>Introduce Foreign Method</li><li>Introduce Local Extension</li></ul>



<p><strong>سازماندهی داده ها</strong></p>



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



<ul class="wp-block-list"><li>Change Value to Reference</li><li>Change Reference to Value</li><li>Duplicate Observed Data</li><li>Self Encapsulate Field</li><li>Replace Data Value with Object</li><li>Replace Array with Object</li><li>Change Unidirectional Association to Bidirectional</li><li>Change Bidirectional Association to Unidirectional</li><li>Encapsulate Field</li><li>Encapsulate Collection</li><li>Replace Magic Number with Symbolic Constant</li><li>Replace Type Code with Class</li><li>Replace Type Code with Subclasses</li><li>Replace Type Code with State/Strategy</li><li>Replace Subclass with Fields</li></ul>



<p><strong>ساده سازی عبارات شرطی</strong></p>



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



<ul class="wp-block-list"><li>Consolidate Conditional Expression</li><li>Consolidate Duplicate Conditional Fragments</li><li>Decompose Conditional</li><li>Replace Conditional with Polymorphism</li><li>Remove Control Flag</li><li>Replace Nested Conditional with Guard Clauses</li><li>Introduce Null Object</li><li>Introduce Assertion</li></ul>



<p><strong>ساده کردن فراخوانی های متد</strong></p>



<p>این تکنیک ها فراخوانی های متد را ساده و قابل فهم تر می کنند. این به نوبه خود ، interface &nbsp;های بین کلاس ها را ساده می کند</p>



<ul class="wp-block-list"><li>Add Parameter</li><li>Remove Parameter</li><li>Rename Method</li><li>Separate Query from Modifier</li><li>Parameterize Method</li><li>Introduce Parameter Object</li><li>Preserve Whole Object</li><li>Remove Setting Method</li><li>Replace Parameter with Explicit Methods</li><li>Replace Parameter with Method Call</li><li>Hide Method</li><li>Replace Constructor with Factory Method</li><li>Replace Error Code with Exception</li><li>Replace Exception with Test</li></ul>



<p><strong>پرداختن به تعمیم</strong></p>



<p>انتزاع (Abstraction)گروهی از تکنیک های خود را دارد ، که در درجه اول با قابلیت حرکت در طول سلسله مراتب وراثت کلاس ، ایجاد کلاس ها و رابط های جدید و جایگزینی وراثت با تفویض و برعکس همراه است.</p>



<ul class="wp-block-list"><li>Pull Up Field</li><li>Pull Up Method</li><li>Pull Up Constructor Body</li><li>Push Down Field</li><li>Push Down Method</li><li>Extract Subclass</li><li>Extract Superclass</li><li>Extract Interface</li><li>Collapse Hierarchy</li><li>Form Template Method</li><li>Replace Inheritance with Delegation</li><li>Replace Delegation with Inheritance</li></ul>
<p>بازدیدها: 91</p><p>نوشته <a href="http://recompile.ir/learning/refactoring/%d8%aa%da%a9%d9%86%db%8c%da%a9%d9%87%d8%a7%db%8c-%d8%b1%db%8c%d9%81%da%a9%d8%aa%d9%88%d8%b1/">تکنیکهای ریفکتور</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/learning/refactoring/%d8%aa%da%a9%d9%86%db%8c%da%a9%d9%87%d8%a7%db%8c-%d8%b1%db%8c%d9%81%da%a9%d8%aa%d9%88%d8%b1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>بوی بدِ کد &#8211; Bad Smells</title>
		<link>http://recompile.ir/learning/refactoring/%d8%a8%d9%88%db%8c-%d8%a8%d8%af%d9%90-%da%a9%d8%af-bad-smells/</link>
					<comments>http://recompile.ir/learning/refactoring/%d8%a8%d9%88%db%8c-%d8%a8%d8%af%d9%90-%da%a9%d8%af-bad-smells/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Mon, 24 Aug 2020 19:41:25 +0000</pubDate>
				<category><![CDATA[بازسازی کد(Refactoring)]]></category>
		<category><![CDATA[Code Smells]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[بوی بد]]></category>
		<category><![CDATA[ریفکتور]]></category>
		<category><![CDATA[ریفکتورینگ]]></category>
		<guid isPermaLink="false">http://recompile.ir/?p=154</guid>

					<description><![CDATA[<p>در ادامه مباحث ریفکتورینگ به بوی کدها می پردازیم. مگر کدها بو می دهند؟ اگر سعی کنید بوی آنها را حس می کنید.نشانه های بوی بد کد ها را بشناسیم تا آنها را پیدا کنیم. بزرگها! کلاسها و متدهایی که آنقدر بزرگ می شوند که کار کردن با آنها سخت می شود. البته اوایل بوی [&#8230;]</p>
<p>نوشته <a href="http://recompile.ir/learning/refactoring/%d8%a8%d9%88%db%8c-%d8%a8%d8%af%d9%90-%da%a9%d8%af-bad-smells/">بوی بدِ کد &#8211; Bad Smells</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>در ادامه مباحث <a href="http://recompile.ir/category/learning/refactoring/" title="http://recompile.ir/category/learning/refactoring/"><span class="has-inline-color has-vivid-cyan-blue-color">ریفکتورینگ</span></a> به بوی کدها می پردازیم.</p>



<p>مگر کدها بو می دهند؟ اگر سعی کنید بوی آنها را حس می کنید.نشانه های بوی بد کد ها را بشناسیم تا آنها را پیدا کنیم.</p>



<p class="has-text-color has-vivid-red-color"><strong>بزرگها!</strong></p>



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



<p><strong>متدهای بزرگ (</strong><strong>Long Methods</strong><strong>)</strong><strong></strong></p>



<p>متدهایی که شامل خطوط زیادی هستند. معمولا متدهایی با بیش از 10 خط را متدهای بزرگ می دانیم</p>



<p><strong>کلاسهای بزرگ</strong><strong> </strong><strong>&nbsp;(</strong><strong>Larg Classes</strong><strong>)</strong></p>



<p>کلاسهایی که تعداد زیادی فیلد و پراپرتی و متد را شامل می شوند</p>



<p><strong>وسواس اولیه(</strong><strong>Primitive Obsession</strong><strong>)</strong></p>



<ul class="wp-block-list"><li>استفاده از کلاسها و آبجکتها به جای مقدارهای ساده اولیه (مثل bool &nbsp;,int,..)</li><li>استفاده از مقادیر ثابت (const) برای رمز گذاری اطلاعات (مثل USER_ADMIN_ROLE = 1 برای اعطای دسترسی به کاربر ادمین)</li><li>استفاده از مقادیر رشته ای ثابت برای نام فیلدها در آرایه ها</li></ul>



<p><strong>پارامترهای زیاد(</strong><strong>Long Parameter List</strong><strong>)</strong></p>



<p>بیش از سه یا چهار پارامتر برای یک متد نشانه این اشتباه است</p>



<p><strong>توده داده(</strong><strong>Data Clumps</strong><strong>)</strong></p>



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



<p class="has-text-color has-vivid-red-color"><strong>استفاده بد از  شیء گرایی object orientation</strong></p>



<p><strong>سوئیچ ها(</strong><strong>Switch Statements</strong><strong>)</strong><strong></strong></p>



<p>کد شامل تعداد زیادی switch یا if است</p>



<p><strong>فیلدهای موقت (</strong><strong>Temporary Field</strong><strong>)</strong></p>



<p>فیلدهای موقتی که فقط در بخش مورد استفاده کارایی دارند و در بقیه کد خالی هستند</p>



<p><strong>ارث بری بدرد نخور (</strong><strong>Refused Bequest</strong><strong>)</strong></p>



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



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



<p><strong>کلاس های جایگزین با رابط های مختلف (</strong><strong>Alternative Classes with Different Interfaces</strong><strong>)</strong><strong></strong></p>



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



<p class="has-text-color has-vivid-red-color"><strong>تغییر ناپذیری</strong></p>



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



<p><strong>تغییرات واگرا (</strong><strong>Divergent Change</strong><strong>)</strong></p>



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



<p><strong>تشریح انفجاری (</strong><strong>Shotgun Surgery</strong><strong>)</strong></p>



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



<p><strong>سلسله های وراثت موازی (</strong><strong>Parallel Inheritance Hierarchies</strong><strong>)</strong></p>



<p>هر وقت یک زیرکلاس (sub class) برای یک کلاس ایجاد می کنید ، میبینید که لازم یک زیر کلاس برای یک کلاس دیگر هم بسازید.</p>



<p class="has-text-color has-vivid-red-color"><strong>اضافات</strong></p>



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



<p><strong>کامنتها(</strong><strong>Comments</strong><strong>)</strong><strong></strong></p>



<p>متدی که با کامنت ها پر شده است</p>



<p><strong>کد کپی(</strong><strong>Duplicate Codes</strong><strong>)</strong><strong></strong></p>



<p>دو قطعه کد تقریباً یکسان به نظر می رسند.</p>



<p><strong>کلاس تنبل(</strong><strong>Lazy Class</strong><strong>)</strong><strong></strong></p>



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



<p><strong>کلاس داده(</strong><strong>Data Class</strong><strong>)</strong><strong></strong></p>



<p>کلاس داده به یک کلاس اطلاق می شود که فقط فیلدها ها و متد های خام را برای دسترسی به آنها (getter &nbsp;و &nbsp;setter) دارد. این ها به سادگی توسط کلاسهای دیگر استفاده می شوند. این کلاس ها هیچ فانکشن اضافی ندارند و نمی توانند به طور مستقل روی داده هایی که در اختیار دارند کار کنند.</p>



<p><strong>کد مرده(</strong><strong>Dead Code</strong><strong>)</strong><strong></strong></p>



<p>متغیر ، پارامتر ، فیلد ، متد یا کلاسی که دیگر استفاده نمی شود (معمولاً به دلیل اینکه منسوخ است).</p>



<p><strong>کلیت اضافی(</strong><strong>Speculative Generality</strong><strong>)</strong><strong></strong></p>



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



<p class="has-text-color has-vivid-red-color"><strong>ارتباطات (Couplers</strong>)</p>



<p>این گروه شامل Coupling های زیادی بین کلاسها و یا استفاده بیش از حد از delegation است</p>



<p><strong>ویژگی حسادت(</strong><strong>Feature Envy</strong><strong>)</strong><strong></strong></p>



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



<p><strong>صمیمیت نامناسب(</strong><strong>Inappropriate Intimacy</strong><strong>)</strong><strong></strong></p>



<p>یک کلاس از فیلدها و متدهای داخلی کلاس دیگر استفاده می کند.</p>



<p><strong>زنجیرهای پیامها(</strong><strong>Message Chains</strong><strong>)</strong><strong></strong></p>



<p>در کد یک سری از فراخوانی ها را مشاهده می کنید که شبیه $a-&gt;b()-&gt;c()-&gt;d()هستند</p>



<p><strong>مردی در میانه(</strong><strong>Middle Man</strong><strong>)</strong><strong></strong></p>



<p>اگر یک کلاس فقط یک عمل را انجام دهد ، کار را به کلاس دیگری واگذار کند ، چرا اصلاً وجود دارد؟</p>



<p class="has-text-color has-vivid-red-color"><strong>دیگر بو ها</strong></p>



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



<p><strong>کلاس کتابخانه ناقص (</strong><strong>Incomplete Library Class</strong><strong>)</strong></p>



<p>دیر یا زود کتابخانه ها (libraries) دیگر پاسخگوی نیاز کاربر نخواهند بود. راه ایجاد تغییرات در کتابخانه ها است که چون عموما فقط خواندنی (read only) هستند امکانپذیر نیست.</p>
<p>بازدیدها: 156</p><p>نوشته <a href="http://recompile.ir/learning/refactoring/%d8%a8%d9%88%db%8c-%d8%a8%d8%af%d9%90-%da%a9%d8%af-bad-smells/">بوی بدِ کد &#8211; Bad Smells</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/learning/refactoring/%d8%a8%d9%88%db%8c-%d8%a8%d8%af%d9%90-%da%a9%d8%af-bad-smells/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>چطور ریفکتور کنیم؟</title>
		<link>http://recompile.ir/learning/refactoring/%da%86%d8%b7%d9%88%d8%b1-%d8%b1%db%8c%d9%81%da%a9%d8%aa%d9%88%d8%b1-%da%a9%d9%86%db%8c%d9%85%d8%9f/</link>
					<comments>http://recompile.ir/learning/refactoring/%da%86%d8%b7%d9%88%d8%b1-%d8%b1%db%8c%d9%81%da%a9%d8%aa%d9%88%d8%b1-%da%a9%d9%86%db%8c%d9%85%d8%9f/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Tue, 18 Aug 2020 18:02:34 +0000</pubDate>
				<category><![CDATA[بازسازی کد(Refactoring)]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[ریفکتور]]></category>
		<category><![CDATA[ریفکتورینگ]]></category>
		<guid isPermaLink="false">http://recompile.ir/?p=135</guid>

					<description><![CDATA[<p>ریفکتور باید شامل یک سری تغییرات کوچک در راستای ساده تر و قابل فهم تر شدن کدها باشد. چک لیست ریفکتورینگ صحیح کد باید تمیز تر شود اگر بعد از ریفکتور باز هم کد کثیف دارید فقط وقتتان را هدر داده اید. باید سعی کنید که بفهمید چرا این اتفاق افتاده است البته ممکن است [&#8230;]</p>
<p>نوشته <a href="http://recompile.ir/learning/refactoring/%da%86%d8%b7%d9%88%d8%b1-%d8%b1%db%8c%d9%81%da%a9%d8%aa%d9%88%d8%b1-%da%a9%d9%86%db%8c%d9%85%d8%9f/">چطور ریفکتور کنیم؟</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 class="has-text-color has-luminous-vivid-orange-color"><strong>چک لیست ریفکتورینگ صحیح</strong></p>



<p><strong>کد باید <a href="http://recompile.ir/learning/refactoring/%da%a9%d8%af-%d9%86%d9%88%db%8c%d8%b3%db%8c-%d8%aa%d9%85%db%8c%d8%b2-%d8%b1%d8%a7-%d8%b4%d8%b1%d9%88%d8%b9-%da%a9%d9%86%db%8c%d9%85/" title="کد نویسی تمیز را شروع کنیم">تمیز تر</a> شود</strong></p>



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



<p>البته ممکن است این اتفاق در کدهای خیلی کثیف اتفاق بیفتد و می شود در چند&nbsp; مرحله کم کم بهبود را ایجاد کرد</p>



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



<p><strong>عملکرد جدید نباید در خلال ریفکتور ایجاد شود</strong></p>



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



<p><strong>همه تستها باید بعد از ریفکتور پاس شوند</strong></p>



<p>به دو دلیل ممکن است تستها بعد از ریفکتور کار نکنند:</p>



<p>در خلال ریفکتور(<a href="http://recompile.ir/" title="http://recompile.ir/">بازسازی</a>) کد ها خطا ایجاد کرده باشید» مهم نیست می توانید به پیش بروید و اشکالات را رفع کنید</p>



<p>تستها خیلی سطح پایین باشند» به عنوان مثال شما متدهای کلاسهای private را تست کرده اید</p>



<p>در این حالت خود تستها اشکال دارند. می توانید خود تستها را ریفکتور کنید یا تستهای در سطح بالاتر بنویسید. بهترین راه برای جلوگیری از این مشکل نوشتن تستها به سبک BDD است.</p>
<p>بازدیدها: 130</p><p>نوشته <a href="http://recompile.ir/learning/refactoring/%da%86%d8%b7%d9%88%d8%b1-%d8%b1%db%8c%d9%81%da%a9%d8%aa%d9%88%d8%b1-%da%a9%d9%86%db%8c%d9%85%d8%9f/">چطور ریفکتور کنیم؟</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/learning/refactoring/%da%86%d8%b7%d9%88%d8%b1-%d8%b1%db%8c%d9%81%da%a9%d8%aa%d9%88%d8%b1-%da%a9%d9%86%db%8c%d9%85%d8%9f/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>چه زمانی باید ریفکتور کنیم؟</title>
		<link>http://recompile.ir/learning/refactoring/%da%86%d9%87-%d8%b2%d9%85%d8%a7%d9%86%db%8c-%d8%a8%d8%a7%db%8c%d8%af-%d8%b1%db%8c%d9%81%da%a9%d8%aa%d9%88%d8%b1-%da%a9%d9%86%db%8c%d9%85%d8%9f/</link>
					<comments>http://recompile.ir/learning/refactoring/%da%86%d9%87-%d8%b2%d9%85%d8%a7%d9%86%db%8c-%d8%a8%d8%a7%db%8c%d8%af-%d8%b1%db%8c%d9%81%da%a9%d8%aa%d9%88%d8%b1-%da%a9%d9%86%db%8c%d9%85%d8%9f/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Mon, 17 Aug 2020 18:29:11 +0000</pubDate>
				<category><![CDATA[بازسازی کد(Refactoring)]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[ریفکتور]]></category>
		<category><![CDATA[ریفکتورینگ]]></category>
		<guid isPermaLink="false">http://recompile.ir/?p=87</guid>

					<description><![CDATA[<p>در نوشته های قبلی فهمیدیم که لازم است ریفکتور(بازسازی یا اصلاح کد) داشته باشیم. و اما یک قانون: قانون 3 وقتی کاری برای بار اول انجام می شود، فقط انجام می دهیم وقتی کار مشابهی را برای بار دوم انجام می دهیم، یواشکی! انجام می دهیم اگر برای برای سوم شد حتما باید ریفکتور کنیم [&#8230;]</p>
<p>نوشته <a href="http://recompile.ir/learning/refactoring/%da%86%d9%87-%d8%b2%d9%85%d8%a7%d9%86%db%8c-%d8%a8%d8%a7%db%8c%d8%af-%d8%b1%db%8c%d9%81%da%a9%d8%aa%d9%88%d8%b1-%da%a9%d9%86%db%8c%d9%85%d8%9f/">چه زمانی باید ریفکتور کنیم؟</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>در نوشته های قبلی فهمیدیم که لازم است ریفکتور(بازسازی یا اصلاح کد) داشته باشیم. و اما یک قانون:</p>



<p><strong>قانون 3</strong></p>



<ol class="wp-block-list" type="1"><li>وقتی کاری برای بار اول انجام می شود، فقط انجام می دهیم</li><li>وقتی کار مشابهی را برای بار دوم انجام می دهیم، یواشکی! انجام می دهیم</li><li>اگر برای برای سوم شد حتما باید ریفکتور کنیم و کدها را اصلاح کنیم!</li></ol>



<p class="has-text-color has-vivid-red-color"><strong>چه زمانی باید ریفکتور کرد؟</strong></p>



<ul class="wp-block-list" type="1"><li><strong>زمانی که یک فیچر جدید تولید می کنیم.</strong></li></ul>



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



<ul class="wp-block-list"><li><strong>زمان رفع باگها</strong></li></ul>



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



<ul class="wp-block-list"><li><strong>در زمان Code Review</strong></li></ul>



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



<p>ریفکتورینگ باعث ساده سازی و قابل فهم شدن کد می شود اما باید تاثیرات پرفورمنسی آن در نظر گرفته شود و ضمنا نباید باعث ایجاد functionality جدید بشود.</p>



<p>نفس ریفکتور در جلسات بازبینی کد نباید باعث جلوگیری از merge یا checkin کد شود.</p>
<p>بازدیدها: 128</p><p>نوشته <a href="http://recompile.ir/learning/refactoring/%da%86%d9%87-%d8%b2%d9%85%d8%a7%d9%86%db%8c-%d8%a8%d8%a7%db%8c%d8%af-%d8%b1%db%8c%d9%81%da%a9%d8%aa%d9%88%d8%b1-%da%a9%d9%86%db%8c%d9%85%d8%9f/">چه زمانی باید ریفکتور کنیم؟</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/learning/refactoring/%da%86%d9%87-%d8%b2%d9%85%d8%a7%d9%86%db%8c-%d8%a8%d8%a7%db%8c%d8%af-%d8%b1%db%8c%d9%81%da%a9%d8%aa%d9%88%d8%b1-%da%a9%d9%86%db%8c%d9%85%d8%9f/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>بدهی فنی &#8211; Technical debt</title>
		<link>http://recompile.ir/learning/refactoring/%d8%a8%d8%af%d9%87%db%8c-%d9%81%d9%86%db%8c-technical-debt/</link>
					<comments>http://recompile.ir/learning/refactoring/%d8%a8%d8%af%d9%87%db%8c-%d9%81%d9%86%db%8c-technical-debt/#respond</comments>
		
		<dc:creator><![CDATA[محمد خوش کشت]]></dc:creator>
		<pubDate>Wed, 12 Aug 2020 19:07:05 +0000</pubDate>
				<category><![CDATA[بازسازی کد(Refactoring)]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[Technical Debt]]></category>
		<category><![CDATA[اصلاح کد]]></category>
		<category><![CDATA[بدهی فنی]]></category>
		<category><![CDATA[ریفکتور]]></category>
		<category><![CDATA[ریفکتورینگ]]></category>
		<guid isPermaLink="false">http://recompile.ir/?p=51</guid>

					<description><![CDATA[<p>شما می توانید به طور موقت بدون نوشتن تست برای ویژگی های جدید، به کار سرعت بخشید ، اما این کار به تدریج هر روز پیشرفت شما را کند می کند تا اینکه در نهایت با نوشتن تست ها بدهی خود را پرداخت کنید.</p>
<p>نوشته <a href="http://recompile.ir/learning/refactoring/%d8%a8%d8%af%d9%87%db%8c-%d9%81%d9%86%db%8c-technical-debt/">بدهی فنی &#8211; Technical debt</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>هر کسی تمام تلاش خود را می کند تا بهترین کد را از ابتدا بنویسد. احتمالاً هیچ برنامه نویسی نیست که عمداً کد ناخوشایند و به ضرر پروژه بنویسد. اما در چه مرحله ای کد تمیز، کثیف می شود؟</p>



<p>استعاره &#8220;بدهی فنی&#8221; در مورد کد بد در ابتدا توسط <a href="https://en.wikipedia.org/wiki/Technical_debt" title="https://en.wikipedia.org/wiki/Technical_debt">Ward Cunningham</a> پیشنهاد شده.</p>



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



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



<h2 class="has-text-color wp-block-heading" style="color:#a14909"><strong>علل بروز بدهی فنی</strong></h2>



<p><strong>  فشار بیزنس</strong></p>



<p>بعضی اوقات شرایط تجاری ممکن است شما را وادار کند فیچر های خود را قبل از اتمام کار ارائه کنید. در این حالت تکه های ناجوری در کد ظاهر می شوند تا اتمام پروژه مخفی می شود.</p>



<p><strong>  عدم درک عواقب بدهی فنی</strong></p>



<p>صرف نظر از درک بدهی فنی، گاهی اوقات کارفرمای شما ممکن است درک نکند که بدهی فنی باعث کاهش بهره وری می شود. این &nbsp;موضوع می تواند اختصاص دادن زمان تیم را به refactoring بسیار دشوار کند زیرا مدیریت ارزش آن را نمی بیند.</p>



<p><strong>  عدم موفقیت در برابر انسجام دقیق اجزاء</strong></p>



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



<p><strong>نبود تست</strong></p>



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



<p><strong>نبود مستند سازی</strong></p>



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



<p><strong> عدم تعامل بین اعضای تیم</strong></p>



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



<p><strong> توسعه همزمان و طولانی مدت در برنچ های(Branches) مختلف</strong></p>



<p>این امر می تواند به انباشت بدهی فنی منجر شود ، که در هنگام ادغام تغییرات(Merge) افزایش می یابد. هرچه تغییرات بیشتر توسط اعضای تیم بصورت منفرد (Isolated) انجام شود کل بدهی فنی بیشتر می شود.</p>



<p><strong> تأخیر در اصلاح کد(Refactoring ریفکتور)</strong></p>



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



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



<p><strong>نبود نظارت بر تطابق</strong></p>



<p>وقتی که هر کسی بر روی پروژه بر طبق روش خودش کد نویسی را ادامه دهد این اتفاق خواهد افتاد و کدها یکدست نخواهند شد.</p>



<p><strong> بی کفایتی</strong></p>



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



<p></p>
<p>بازدیدها: 171</p><p>نوشته <a href="http://recompile.ir/learning/refactoring/%d8%a8%d8%af%d9%87%db%8c-%d9%81%d9%86%db%8c-technical-debt/">بدهی فنی &#8211; Technical debt</a> اولین بار در <a href="http://recompile.ir">بازسازی</a>. پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://recompile.ir/learning/refactoring/%d8%a8%d8%af%d9%87%db%8c-%d9%81%d9%86%db%8c-technical-debt/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
