زمان تخمینی مطالعه: 12 دقیقه

مفهوم Refactoring چیست؟

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

مفهوم کد تمیز Clean code

هدف اصلی Refactoring مبارزه با بدهی فنی(Technical Dept) است. طبق تعریف ارائه شده در بالا این مفهوم آشفتگی ساختاری کد را به حالتی تمیز و طراحی ساده‌تر تبدیل می‌کند. خوب! اما به هر حال کد تمیز چیست؟ در اینجا به برخی از ویژگی‌های آن اشاره می‌کنیم:

بدهی فنی(Technical Dept)

استعاره «بدهی فنی» در رابطه با کد کثیف در ابتدا توسط Ward Cunningham پیشنهاد شد. همه برنامه نویسان تلاش خود را می‌کنند تا از ابتدا کدهای عالی بنویسند. احتمالاً هیچ برنامه نویسی وجود ندارد که عمداً کدهای کثیف را در پروژه‌های خود بنویسد. اما باید دید کد تمیز در چه مرحله‌ای به کد کثیف تبدیل می‌شود؟

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

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

– علل بدهی فنی

چه زمانی refactoring انجام دهیم؟

معمولا مفهوم Refactoring زمانی استفاده می‌شود که قانون سه حاکم باشد. این قانون دارای مفاد زیر است:

  1. وقتی برای اولین بار کاری را انجام می‌دهید، فقط آن را انجام دهید.
  2. وقتی برای بار دوم کاری مشابه انجام می‌دهید، از اینکه مجبور به تکرار آن هستید بغض کنید اما به هر حال همان کار را انجام دهید.
  3. وقتی برای سومین بار کاری را انجام می‌دهید، refactoring را شروع کنید.

– هنگام افزودن یک ویژگی

– هنگام رفع اشکال

– در طول بررسی کد

نحوه انجام مفهوم Refactoring

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

تکنیک‌های Refactoring

تکنیک‌های انجام مفهوم Refactoring در ادامه آورده شده‌اند. امید است بیان این مطالب در درک شما از مفاهیم تخصصی گامی مهم باشد:

– روش‌های ترکیب Composing Methods

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

– ویژگی‌های جابجایی بین اشیا

حتی اگر عملکردها را بین کلاس‌های مختلف به روشی غیر کامل‌تر توزیع کرده باشید، هنوز امیدی وجود دارد. این تکنیک‌های ریفکتورینگ نشان می‌دهند که چگونه می‌توان عملکردها را بین کلاس‌ها به طور ایمن جابجا کرد، کلاس‌های جدید ایجاد کرد و جزئیات پیاده‌سازی را از دسترسی عمومی پنهان کرد. این روش‌ها عبارتند از:

– سازماندهی داده‌ها

این تکنیک‌ها و مفهوم Refactoring به مدیریت داده‌ها کمک می‌کنند، و جایگزین‌های اولیه با قابلیت‌های کلاس، غنی می‌شوند. یکی دیگر از نتایج مهم، از هم گسیختگی کلاس‌های انجمنی(Class Associations) است که کلاس‌ها را قابل حمل‌تر و قابل استفاده‌تر می‌کند. این روش‌ها عبارتند از:

– ساده‌سازی عبارات شرطی

شرط‌ها در طول زمان بیشتر و بیشتر در منطق خود پیچیده می‌شوند، و هنوز تکنیک‌های بیشتری برای مبارزه با آن وجود دارد. برای این مورد روش‌های زیر ارائه شده است:

– فراخوانی ساده متد

روش‌های ارائه شده در این بخش فراخوانی‌های متد را ساده‌تر و قابل فهم‌تر می‌کنند. و به نوبه خود، رابط‌ها(Interface) را برای تعامل بین کلاسها ساده می‌کند.

– تعامل با تعمیم

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *