Refactoring مجموعه‌ای از تکنیک‌هاست که به منظور اصلاح و بهبود کدهای قبلی بدون تغییر در عملکرد و رفتارشان جهت خوانایی، کارامدی و قابلیت نگهداری بیشتر انجام می‌شود.

در کتاب Refactoring اثر Martin Fowler نوشته شده: refactoring تکنیک مرتب/منظم سازی برای تجدید ساختار کد موجود است. تغییر ساختار داخلی کد بدون تغییر رفتار خارجی آن.

یک نرم‌افزار برای ادامه حیات خود همواره نیاز به نگهداری، رفع مشکلات و بروزرسانی دارد. اغلب این بروزرسانی‌ها روی کدهای قبلی انجام می‌شود. کد کثیف و افزایش بدهی فنی، توسعه نرم‌افزار را کند و هزینه‌های آن را بالا خواهد برد.

refactoring یک سرمایه‌گذاری و راه حلی برای مقابله با کد کثیف و بدهی فنی است که باعث کاهش هزینه‌های توسعه نرم‌افزار در آینده خواهد شد.

دریافت کتاب

چرا باید تکنیک‌های refactoring را آموخت؟


وضوح/خوانایی
افزایش خوانایی و درک آسان‌تر کد به شما و سایر اعضای تیم برای توسعه بدون زجر نرم‌افزار کمک خواهد کرد.

کارایی / performance
کدهای refactor شده عملکرد بهتری پیدا می‌کنند. نتیجه رفع مشکلات گذشته کد سبک‌تر و سریع‌تری است که علاوه بر افزایش performance نرم‌افزار، باعث افزایش performance توسعه‌دهنگان نیز خواهد شد.

صرفه جویی در زمان و هزینه
توسعه سریع‌تر، استفاده از منابع سخت افزاری کمتر، کار گروهی و… دلیل خوبی است برای سرمایه گذاریی که امروز آن را انجام می‌دهید و در آینده بهره می‌برید. refactoring سرمایه گذاری در زمان و هزینه‌هاست.

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

قابلیت نگهداری
refactoring به نرم‌افزار قابلیت نگهداری می‌دهد و باعث افزایش طول عمر آن خواهد شد.

امنیت
technical debt یا بدهی‌های فنی ناخواسته اغلب به علت تجربه کم توسعه‌دهنده رخ می‌دهد. احتمال اینکه در technical debt مشکلات امنیتی باشد کم نیست. پیشتر توضیح دادم refactoring برای رفع یا کاهش technical debt موثر خواهد بود.

و...

منابع کتاب و محتوای آن


برای گردآوری این کتاب از وبسایت refactoring.guru، کتاب Refactoring اثر Martin Fowler و نهایتا تجربه خودم استفاده کردم.

با اینکه تکنیک‌ها تعاریف مشخصی دارند اما محتوای کتاب ترجمه نیست. در مورد مثال‌ها(کدهای برنامه‌نویسی) حدود 30 درصد مثال‌های آورده شده دقیقا از کتاب Refactoring آمده است.

مثال‌ها، مربوط به زبان‌ برنامه‌نویسی خاصی نمی‌شوند و سینتکس به خصوصی ندارند. سعی کردم با شبه کد تکنیک‌های refactoring را توضیح بدهم تا همه بتوانند از کتاب استفاده کنند.


فصل ها


فصل اول - مقدمه

‫مقدمه‬

بدهی فنی / Technical debt


فصل دوم - Code Smells

تعریف

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


فصل سوم - Composing Methods

تعریف

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


فصل چهارم - Moving Features between Objects

تعریف

Move Method

Move Field

Extract Class

Inline Class

Hide Delegate

Remove Middle Man

Introduce Foreign Method


فصل پنجم - Organizing Data

تعریف

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


فصل ششم - Simplifying Conditional Expressions

تعریف

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


فصل ششم - Simplifying Conditional Expressions

تعریف

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


فصل هشتم - Dealing with Generalization

تعریف

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

Copyright © 2020 developit.ir(ehsan rezaei). All rights reserved.