پیشنهاد فرادرس

آموزش مقدماتی Refactoring - بهبود کیفیت کد نویسی

دسته بندی ها: دات نت ، آموزش های پلورال سایت (Pluralsight)

آموزش-مقدماتی-refactoring-محافظت-از-کدهای-برنام

Refactoring به معنای بهبود پیوسته کیفیت کدهای نوشته شده در طی زمان است؛ بدون ایجاد تغییری در عملکرد اصلی برنامه. به این ترتیب به کدهایی دست خواهیم یافت که قابلیت آزمون پذیری بهتری داشته، در مقابل تغییرات مقاوم و شکننده نیستند و همچنین امکان به اشتراک گذاری قسمت‌هایی از آن‌ها در پروژه‌های دیگر نیز میسر می‌شود.

کارهای سورس باز قابل توجهی از برنامه نویس‌های ایرانی یافت نمی‌شوند؛ عموما کارهای ارائه شده در حد یک سری مثال یا کتابخانه‌های کوچک است و در همین حد. یا گاهی هم انگشت شمار پروژه‌هایی کامل. مثل یک وب سایت یا یک برنامه نصفه نیمه دبیرخانه و امثال آن. این‌ها هم خوب است از دیدگاه به اشتراک گذاری اطلاعات، ایده‌ها و هم ... یک مزیت دیگر را هم دارد و آن این است که بتوان کیفیت عمومی کد نویسی را حدس زد. اگر کیفیت کدها رو بررسی ‌کنید به یک نتیجه‌ی کلی خواهید رسید: "عموم برنامه نویس‌های ایرانی (حداقل این‌هایی که چند عدد کار سورس باز به اشتراک گذاشته‌اند) با مفهومی به نام Refactoring هیچگونه آشنایی ندارند". مثلا یک برنامه‌ی WinForm تهیه کرده‌اند و کل سورس برنامه همان چند عدد فرم برنامه است و هر فرم بالای 3000 سطر کد دارد. دوستان عزیز! به این می‌گویند «فاجعه‌ای به نام کدنویسی!» صاحب اول و آخر این نوع کدها خودتان هستید! شاید به همین جهت باشد که عمده‌ی پروژه‌های سورس باز پس از اینکه برنامه نویس اصلی از توسعه‌ی آن دست می‌کشد، «می‌میرند». چون کسی جرات نمی‌کند به این کدها دست بزند. مشخص نیست الان این قسمت را که تغییر دادم، کجای برنامه به هم ریخت. تستی ندارند. ساختاری را نمی‌توان از آن‌ها دریافت. منطق قسمت‌های مختلف برنامه از هم جدا نشده است. برنامه یک فرم است با چند هزار سطر کد در یک فایل! کار شما شبیه به کد اسمبلی چند هزار سطری حاصل از decompile یک برنامه که نباید باشد! به همین جهت قصد دارم یک سری «ساده» Refactoring را در این سایت ارائه دهم. روی سادگی هم تاکید کردم، چون اگر عموم برنامه نویس‌ها با همین موارد به ظاهر ساده آشنایی داشتند، کیفیت کد نویسی بهتری را می‌شد در نتایج عمومی شده، شاهد بود. این مورد در راستای نظر سنجی انجام شده هم هست؛ درخواست مقالات خالص سی شارپ در صدر آمار فعلی قرار دارد.

این مجموعه آموزشی (Refactoring Fundamentals)  محصول PluralSight  است. و دارای سطح متوسط و مدت زمان 8 ساعت و 1 دقیقه می باشد.

خلاصه سر فصل های این مجموعه:

  • Refactoring چیست؟
  • چه زمانی باید از  Refactor  استفاده کرد؟
  • اصول Refactoring
  • فرآیند Refactoring
  • نکات Refactoring
  • کد Setup/Teardown مورد نیاز
  • سوئیچ دستورات
  • فیلدهای موقت
  • کلاس های جایگزین با رابط های مختلف
  • تغییر Preventers
  • تغییر واگرا
  • سلسله مراتب وراثت موازی
  • سطوح انتزاعی متناقض
  • کلاس داده
  • کد تکراری
  • قانون Demeter
  • مخفی کردن اتصال موقت
  • وابستگی پنهان
  • مشارکت آزاد
  • تناقض
  • متدهای  Refactorings
  • متد تغییر نام
  • متد استخراج
  • متدهای درون خطی
  • توضیح متغیر
  • درجه حرارت درون خطی
  • نمونه پروژه: جایگزینی موقت با پرس و جو
  • تقسیم موقت متغیر
  • متد پارامترها
  • اضافه کردن پارامتر
  • حذف پارامتر
  • معرفی پارامتر شی
  • متد پنهان سازی
  • جایگزینی  کد خطا با استثنا
  • متد  Compose
  • الگوریتم  Substitute
  • حرکت فیلد
  • کلاس Extract
  • رابط Extract
  • کلاس سلسله مراتبی  Refactorings
  • روش قالب فرم
  • معرفی شی  Null
  • یکی کردن واسط با  آداپتور
  • تست Sulfuras
  • و...

لیست سر فصل های لاتین مجموعه:

	Introducing Refactoring 		
Introduction	 		
What is Refactoring?	 		
Why Should You Refactor?	 		
Technical Debt	 		
When Should You Refactor	 		
Refactoring Principles	 		
The Refactoring Process	 		
Demo: Characterization Tests	 		
Refactoring Tips	 		
Refactoring Tools	 		
Premature Optimization	 		
Refactoring and Tests	 		
Demo: A Simple Refactoring	 		
Summary	 		
	Bloating Code Smells	 		
Introduction	 		
Code Smells	 		
Principle of Least Surprise	 		
Organizing Code Smells	 		
The Bloaters	 		
Long Method	 		
Long Method Examples	 		
Primitive Obsession	 		
Long Parameter List	 		
Data Clumps	 		
Combinatorial Explosion	 		
Oddball Solution	 		
Class Doesn't Do Much	 		
Required Setup/Teardown Code	 		
Summary	 		
	Obfuscating Code Smells	 		
Introduction	 		
The Obfuscators	 		
Regions	 		
Comments	 		
Poor Names	 		
Vertical Separation	 		
Inconsistency	 		
Obscured Intent	 		
Summary	 		
	Object Orientation Abuser Code Smells	 		
Introduction	 		
Switch Statements	 		
Temporary Field	 		
Alternative Classes with Different Interfaces	 		
Class Depends on Subclass	 		
Inappropriate Static	 		
Summary	 		
	Code Smells: Change Preventer	 		
Introduction	 		
Change Preventers	 		
Divergent Change	 		
Shotgun Surgery	 		
Parallel Inheritance Hierarchies	 		
Inconsistent Abstraction Levels	 		
Conditional Complexity	 		
Poorly Written Tests	 		
Summary	 		
	Code Smells: Dispensables	 	
Introduction	 		
The Dispensables	 		
Lazy Class	 		
Data Class	 		
Duplicate Code	 		
Dead Code	 		
Speculative Generality	 		
Summary	 		
	Code Smells: The Couplers	 		
Introduction	 		
The Couplers	 		
Feature Envy	 		
Inappropriate Intimacy	 		
Law of Demeter	 		
Indecent Exposure	 		
Message Chains	 		
Middle Man	 		
Tramp Data	 		
Artificial Coupling	 		
Hidden Temporal Coupling	 		
Hidden Dependencies	 		
Summary	 		
	Environment and Testing Code Smells	 		
Introduction	 		
Environment Smells	 		
Test Smells	 		
Not Enough Tests	 		
DRY vs. DAMP	 		
Fragility	 		
The Liar	 		
Excessive Setup	 		
The Giant	 		
The Mockery	 		
The Inspector	 		
Generous Leftovers	 		
The Local Hero	 		
The Nitpicker	 		
The Secret Catcher	 		
The Loudmouth	 		
The Greedy Catcher	 		
The Sequencer	 		
The Hidden Dependency	 		
The Enumerator	 		
The Stranger	 		
The OS Evangelist	 		
Success Against All Odds	 		
The Free Ride	 		
The One	 	
The Peeping Tom	 		
The Slow Poke	 		
The Contradiction	 		
Roll the Dice	 		
Hidden Tests	 		
Second Class Citizens	 		
Wait and See	 		
Inappropriate Test Group	 		
The Optimist	 		
The Sleeper	 		
The Void	 		
Summary	 		
	Method Refactorings	 		
Introduction 		
Extract Method	 		
Rename Method	 		
Demo: Extract and Rename Method	 		
Inline Method	 		
Introduce Explaining Variable	 		
Inline Temp	 		
Replace Temp with Query	 		
Demo: Replace Temp with Query	 		
Split Temporary Variable	 		
Parameterize Method	 		
Replace Parameter with Explicit Methods	 		
Add Parameter	 		
Remove Parameter	 		
Separate Query from Modifier	 		
Summary	 		
	More Method Refactorings	 		
Introduction	 		
Preserve Whole Object	 		
Replace Parameter with Method	 		
Introduce Parameter Object	 		
Remove Setting Method	 		
Hide Method	 		
Replace Constructor with Factory Method	 		
Replace Error Code with Exception	 		
Remove Assignments to Parameters	 		
Replace Exception with Test	 		
Replace Method with Method Object	 		
Compose Method	 		
Substitute Algorithm	 		
Summary	 		
	Class and Object Refactorings	 		
Introduction	 		
Encapsulate Field	 		
Encapsulate Collection	 		
Move Field	 		
Move Method	 		
Extract Class	 		
Inline Class	 		
Extract Interface	 		
Extract Subclass	 		
Extract Superclass	 		
Hide Delegate	 		
Remove Middle Man	 		
Summary	 		
	Class Hierarchy Refactorings	 		
Introduction	 		
Pull Up Field	 		
Push Down Field	 		
Pull Up Method	 		
Push Down Method	 		
Collapse Hierarchy	 		
Replace Inheritance with Delegation	 		
Replace Delegation with Inheritance	 		
Replace Type Code with Class	 		
Replace Type Code with Subclasses	 		
Replace Conditional with Polymorphism	 		
Summary	 		
	Pattern-Based Refactorings	 		
Introduction	 		
Encapsulate Classes with Factory	 		
Form Template Method	 		
Introduce Null Object	 		
Move Accumulation to Visitor	 		
Move Embellishment to Decorator	 		
Replace Conditional Dispatcher with Command	 		
Replace Conditional Logic with Strategy	 		
Replace State-Altering Conditionals with State	 		
Replace Type Code with State (or Strategy)	 		
Unify Interfaces with Adapter	 		
Summary	 		
	Gilded Rose Kata	 		
Introduction	 		
Gilded Rose Kata Setup	 		
Beginning the Kata	 		
Adding First Tests	 		
Testing Aged Brie	 		
Testing Sulfuras	 		
Testing Backstage Passes	 		
Refactoring with StoreItem	 		
Testing Individual Strategies	 		
Adding Conjured Item Support	 		
Summary

حجم فایل:1302MB

آیا این نوشته را دوست داشتید؟
Pluralsight RefactoringFundamentals

پیشنهاد فرادرس

ناصر در 1393/01/08 ساعت 23:15

لطفا از این سری Dessign pattern رو هم بذارین خیلی مفیده و مرتبط با Refactoring.ممنون.