یکی دیگر از روشهایی که جهت بهبود کیفیت کدها مورد استفاده قرار میگیرد، «طراحی با قراردادها» است؛ به این معنا که «بهتر است» متدهای تعریف شده پیش از استفاده از آرگومانهای خود، آنها را دقیقا بررسی کنند و به این نوع پیش شرطها، قرارداد هم گفته میشود. نمونهای از آنرا در قسمت 9 مشاهده کردید که در آن اگر آرگومانهای متد AddRole، خالی یا نال باشند، یک استثناء صادر میشود. این نوع پیغامهای واضح و دقیق در مورد عدم اعتبار ورودیهای دریافتی، به ...
این قسمت از آشنایی با Refactoring به کاهش cyclomatic complexity اختصاص دارد و خلاصه آن این است: «استفاده از if های تو در تو بیش از سه سطح، مذموم است» به این علت که پیچیدگی کدهای نوشته شده را بالا برده و نگهداری آنها را مشکل میکند. برای مثال به شبه کد زیر دقت کنید:if if if if do something endif endif endif endifکه حاصل آن شبیه به نوک یک پیکان (Arrow head) شده است. یک مثال بهتر:namespace Refactoring.Day9.Rem ...
یکی از اشتباهاتی که همهی ما کم و بیش به آن دچار هستیم ایجاد کلاسهایی هستند که «زیاد میدانند». اصطلاحا به آنها God Classes هم میگویند و برای نمونه، پسوند یا پیشوند Util دارند. این نوع کلاسها اصل SRP را زیر سؤال میبرند (Single responsibility principle). برای مثال یک فایل ایجاد میشود و داخل آن از انواع و اقسام متدهای «کمکی» کار با دیتابیس تا رسم نمودار تا تبدیل تاریخ میلادی به شمسی و ... در طی بیش از 10 هزار سطر قرار میگیرند. یا برا ...
یکی دیگر از روشهای Refactoring ، معرفی کردن یک کلاس بجای پارامترها است. عموما تعریف متدهایی با بیش از 5 پارامتر مزموم است:using System;using System.Collections.Generic;namespace Refactoring.Day7.IntroduceParameterObject.Before{ public class Registration { public void Create(string name, DateTime date, DateTime validUntil, IEnumerable<string> courses, decimal credits) { // do w ...
در ادامه بحث «حذف کدهای تکراری»، روش Refactoring دیگری به نام "Extract Superclass" وجود دارد که البته در بین برنامه نویسهای دات نت به نام Base class بیشتر مشهور است تا Superclass. هدف آن هم انتقال کدهای تکراری بین چند کلاس، به یک کلاس پایه و سپس ارث بری از آن میباشد.یک مثال:در WPF و Silverlight جهت مطلع سازی رابط کاربری از تغییرات حاصل شده در مقادیر دادهها، نیاز است کلاس مورد نظر، اینترفیس INotifyPropertyChanged را پیاده سازی کند:using ...
یکی دیگر از تکنیکهای Refactoring بسیار متداول، «حذف کدهای تکراری» است. کدهای تکراری هم عموما حاصل بیحوصلگی یا تنبلی هستند و برنامه نویس نیاز دارد در زمانی کوتاه، حجم قابل توجهی کد تولید کند؛ که نتیجهاش مثلا به صورت زیر خواهد شد:using System;namespace Refactoring.Day4.RemoveDuplication.Before{ public class PersonalRecord { public DateTime DateArchived { get; private set; } public bool Archived { get; private set; } ...
قسمت چهار آشنایی با Refactoring به معرفی روش «انتقال متدها» اختصاص دارد؛ انتقال متدها به مکانی بهتر. برای نمونه به کلاسهای زیر پیش از انجام عمل Refactoring دقت کنید:namespace Refactoring.Day3.MoveMethod.Before{ public class BankAccount { public int AccountAge { get; private set; } public int CreditScore { get; private set; } public BankAccount(int accountAge, int creditScore) { AccountAge = acc ...
قسمت سوم آشنایی با Refactoring در حقیقت به تکمیل قسمت قبل که در مورد «استخراج متدها» بود اختصاص دارد و به مبحث «استخراج یک یا چند کلاس از متدها» یا Extract Method Object اختصاص دارد. زمانیکه کار «استخراج متدها» را شروع میکنیم، پس از مدتی به علت بالا رفتن تعداد متدهای کلاس جاری، به آنچنان شکل و شمایل خوشایند و زیبایی دست پیدا نخواهیم کرد. همچنین اینبار بجای متدی طولانی، با کلاسی طولانی سروکار خواهیم داشت. در این حالت بهتر است از متدهای است ...
قسمت دوم آشنایی با Refactoring به معرفی روش «استخراج متدها» اختصاص دارد. این نوع Refactoring بسیار ساده بوده و مزایای بسیاری را به همراه دارد؛ منجمله:- بالا بردن خوانایی کد؛ از این جهت که منطق طولانی یک متد به متدهای کوچکتری با نامهای مفهوم شکسته میشود. - به این ترتیب نیاز به مستند سازی کدها نیز بسیار کاهش خواهد یافت. بنابراین در یک متد، هر جایی که نیاز به نوشتن کامنت وجود داشت، یعنی باید همینجا آن قسمت را جدا کرده و در متد دیگری که نام ...
کارهای سورس باز قابل توجهی از برنامه نویسهای ایرانی یافت نمیشوند؛ عموما کارهای ارائه شده در حد یک سری مثال یا کتابخانههای کوچک است و در همین حد. یا گاهی هم انگشت شمار پروژههایی کامل. مثل یک وب سایت یا یک برنامه نصفه نیمه دبیرخانه و امثال آن. اینها هم خوب است از دیدگاه به اشتراک گذاری اطلاعات، ایدهها و هم ... یک مزیت دیگر را هم دارد و آن این است که بتوان کیفیت عمومی کد نویسی را حدس زد.اگر کیفیت کدها رو بررسی کنید به یک نتیجهی کلی خو ...