هیچ کلاسی کامل نیست. در مواقع زیادی ممکن است یک کلاس نیاز به متدی داشته باشد که در آن وجود ندارد. در چنین شرایطی اگر سورس کلاس را در دست داشته باشیم به راحتی میتوان رفتار مورد نظر را به آن اضافه کرد. اما اگر از کلاسهایی استفاده میکنیم که سورس آنها در دست نیست، حل این مورد کمی مشکل خواهد بود. برای مدیریت و رفع این مورد، دو بازسازی کد وجود دارند که به جهت همسویی این دو، آنها را در یک نوشتار پوشش میدهیم. نیاز به متد جدید در یک کلاس ...
زمانی نیاز به این بازسازی کد بهوجود میآید که استفاده کنندهی از کلاسها، درگیر جزییات بیش از اندازهی کلاسها میشود. به طور مثال به نمودار بالا توجه نمایید. در این نمودار تکه کدی مدل شده است که در آن ClientClass استفاده کننده از امکانات دو کلاس دیگر است. برای بدست آوردن مدیر یک شخص در این طراحی نیاز است ابتدا ClientClass اطلاعات مربوط به department یک شخص را با استفاده از متد GetDepartment بدست آورد. سپس با استفاده از متد GetMa ...
زمانیکه کلاسی، دو یا چند کار را انجام میدهد، بهتر است این امور در کلاسهای مجزایی انجام شوند. راه اصلی این کار، بازسازی کد استخراج کلاس است. ایده اصلی این بازسازی کد با ساختن کلاسی جدید و انتقال خصوصیتها، فیلدها و متدهای مورد نظر به آن انجام میشود. کلاسها معمولا از ابتدا به صورت چند وظیفهای و پیچیده طراحی و پیاده سازی نمیشوند. اما با گذشت زمان معمولا کلاسها پیچیدهتر میشوند. این پیچیدگی تاثیر مستقیمی را بر روی قابلیت نگهداری نر ...
معمولا زمانیکه متدی از امکانات کلاس دیگری غیر از کلاسی که در آن تعریف شده است استفاده میکند، نیاز به چنین بازسازی کدی داریم. روش کلی این بازسازی کد، انتقال متد به کلاسی است که بیشترین تعلق را به آن دارد! جابجایی متد یکی از موارد پر تکرار و مهم در امر بازسازی کد است. این بازسازی در مراحل انجام دیگر بازسازیهای کد، مانند شکستن کلاس نیز استفاده میشود. با این روش ساده میتوان کلاسهایی با مسئولیتهای محدود و مشخص را توسعه داد. ...
زیبایی متدهای کوچک، در قابل درک بودن آنها نهفته است. هدف نهایی بیشتر روشهای بازسازی کد، تغییر تکه کدی بزرگ و در هم تنیده، به تکههای کوچک قابل درکتر است. مهمترین مانع در شکستن تکه کدهای طولانی، وجود متغیرهای موقتی در آن است. چند روش بازسازی کد مطرح شده به طور خاص به این موضوع توجه دارند. زمانیکه متد طولانی ای در کد وجود داشته باشد که نتوان (به راحتی) آن را به چند متد کوچکتر تقسیم کرد، معمولا از این روش بازسازی کد استفاده میشود. د ...
در حالتهایی که متغیر موقتیای در متد وجود دارد که چندین بار مقدار دهی میشود، احتمالا به چنین بازسازی کدی نیاز است. قبل از ادامه بحث در این باره نیاز است یک نوع از متغیرهای محلی را بررسی کرد. متغیر محلی تجمعی (Collecting temporary variable): متغیری ای که در بدنه متد یا عبارتهای loop مقدار آن به مرور تکامل مییابد یا اضافه میشود. نمونهای از چنین متغیرهایی شمارندههای loop و یا رشتههایی هستند که بسته به شرایط خاص در متد تولید و م ...
زمانیکه عبارت شرطی، یا محاسبات پیچیدهای در کد وجود دارد، میتوان آن را به بخشهای کوچکتری تقسیم و برای هر بخش، یک متغیر توضیحی ایجاد کرد؛ به طوریکه نام متغیر، توضیح کافی ای در مورد آن بخش از عبارت باشد. در ادامهی این بازسازی کد، معمولا میتوان بازسازی کد جایگزینی متغیر موقتی با پرس و جو (Replace temp with query) را انجام داد. زیرا متغیرهای محلی صرفا در محدودهی متد خود قابل دسترسی هستند و ممکن است توسعهی یک متد بلند را به همراه ب ...
زمانیکه متغیری برای نگهداری موقت نتیجهی یک expression تعریف شدهاست، بهتر است expression مربوطه به متدی انتقال پیدا کرده و تمامی استفادهها از متغیر موقتی با فراخوانی متد ایجاد شده جایگزین شوند. مشکل اصلی در ارتباط با متغیرهای محلی، ترویج ایجاد متدهای بلند توسط آنها است. مشخص است که این متغیرها در بدنه متد خود قابل استفاده هستند و تنها راه اشتراک مقدار آنها طولانیتر شدن متد است. اما زمانیکه این متغیرها با متد پرس و جوی مرتبط با آن جا ...
در این بازسازی، با قطعه کدی روبرو هستیم که میتوانیم آن را به صورت یک متد جدید، گروهبندی کنیم. نام متد، توضیح دهنده عملیاتی است که توسط آن قطعه کد انجام میشود. این بازسازی یکی از پر استفادهترین بازسازیهای کد است. معمولا زمانیکه متدی بلند باشد یا تکه کدی نیاز به کامنتی برای توضیح درباره کاری که انجام میدهد داشته باشد، چنین بازسازی ای نیاز است. در صورتیکه نام متدها به طور مناسبی انتخاب شوند، ایجاد متدهای کوچک از دو جهت مفید است: ...
بازسازی کد یا Refactoring ، یکی از روالهای بسیار مهم در حفظ کیفیت نرم افزار است. انجام به موقع و مداوم این روال در یک پروژه نرم افزاری، اثرات بلند مدت بسیار مثبتی را برای آن خواهد داشت. این نوشتار مقدمه کوتاهی بر مفاهیم ابتدایی و سوالاتی مهم در این زمینه است. تعریف بازسازی کد از نظر لغوی Refactoring به معنی «بازسازی» است و در منابع مهندسی نرم افزار، بازسازی کد به صورت زیر تعریف شده است: ...