Refactoring مجموعهای از تکنیکهاست که به منظور اصلاح و بهبود کدهای قبلی بدون تغییر در عملکرد و رفتارشان جهت خوانایی، کارامدی و قابلیت نگهداری بیشتر انجام میشود.
در کتاب Refactoring اثر Martin Fowler نوشته شده: refactoring تکنیک مرتب/منظم سازی برای تجدید ساختار کد موجود است. تغییر ساختار داخلی کد بدون تغییر رفتار خارجی آن.
یک نرمافزار برای ادامه حیات خود همواره نیاز به نگهداری، رفع مشکلات و بروزرسانی دارد. اغلب این بروزرسانیها روی کدهای قبلی انجام میشود. کد کثیف و افزایش بدهی فنی، توسعه نرمافزار را کند و هزینههای آن را بالا خواهد برد.
refactoring یک سرمایهگذاری و راه حلی برای مقابله با کد کثیف و بدهی فنی است که باعث کاهش هزینههای توسعه نرمافزار در آینده خواهد شد.
برای گردآوری این کتاب از وبسایت refactoring.guru، کتاب Refactoring اثر Martin Fowler و نهایتا تجربه خودم استفاده کردم.
با اینکه تکنیکها تعاریف مشخصی دارند اما محتوای کتاب ترجمه نیست. در مورد مثالها(کدهای برنامهنویسی) حدود 30 درصد مثالهای آورده شده دقیقا از کتاب Refactoring آمده است.
مثالها، مربوط به زبان برنامهنویسی خاصی نمیشوند و سینتکس به خصوصی ندارند. سعی کردم با شبه کد تکنیکهای refactoring را توضیح بدهم تا همه بتوانند از کتاب استفاده کنند.
مقدمه
بدهی فنی / Technical debt
تعریف
Bloaters
- Long Method
- Large Class
- Long Parameter List
- Primitive Obsession
- Data Clumps
Object-Orientation Abusers
- Switch Statements
- Temporary Field
- Refused Bequest
- Alternative Classes with Different Interfaces
Change Preventers
- Divergent Change
- Shotgun Surgery
- Parallel Inheritance Hierarchies
Dispensables
- Lazy class
- Data class
- Duplicate Code
- Dead Code
- Speculative Generality
- Comments
Couplers
- Feature Envy
- Inappropriate Intimacy
- Message Chains
- Middle Man
تعریف
Extract Method
Inline Method
Inline Temp
Extract Variable
Replace Temp with Query
Split Temporary Variable
Remove Assignments to Parameters
Replace Method with Method Object
Substitute Algorithm
تعریف
Move Method
Move Field
Extract Class
Inline Class
Hide Delegate
Remove Middle Man
Introduce Foreign Method
تعریف
Self Encapsulate Field
Encapsulate Field
Encapsulate Collection
Replace Data Value with Object
Change Value to Reference
Change Reference to Value
Replace Array with Object
Duplicate Observed Data
Change Unidirectional Association to Bidirectional
Change Bidirectional Association to Unidirectional
Replace Magic Number with Symbolic Constant
Replace Type Code with Class
Replace Type Code with Subclasses
Replace Subclass with Fields
تعریف
Decompose Conditional
Consolidate Conditional Expression
Consolidate Duplicate Conditional Fragments
Remove Control Flag
Replace Nested Conditional with Guard Clauses
Replace Conditional with Polymorphism
Introduce Null Object
Introduce Assertion
تعریف
Rename Method
Remove Parameter
Separate Query from Modifier
Parameterize Method
Replace Parameter with Explicit Methods
Preserve Whole Object
Replace Parameter with Method Call
Introduce Parameter Object
Remove Setting Method
Hide Method
Hide Method
Replace Error Code with Exception
Replace Exception with Test
تعریف
Pull Up Field
Pull Up Method
Pull Up Constructor Body
Push Down Field
Push Down Method
Extract Subclass
Extract Superclass
Extract Interface
Collapse Hierarchy
Form Template Method
Replace Inheritance with Delegation
Replace Delegation with Inheritance