#refactoring
#code_smells
#dive_into_refactoring
#Alexander_Shvets
Code Smells :
* Object-Orientation Abusers *
1) Switch Statements
شما یک عملگر switch پیچیده یا دنباله ای از دستورات if دارید. حالا برای ریفکتور کردن این قضیه راه های پیش رو ایناست :
- اگر switch بر اساس type code باشه، مانند زمانی که حالت زمان اجرا برنامه تغییر می کند، میتونیم از sub class یا State/Strategy استفاده کنیم
- پس از مشخص کردن ساختار وراثت، میتونیم به جای if یا switch از Polymorphism استفاده کنیم
- اگر شرط های خیلی زیادی در operator وجود نداشته باشد و همه آنها یک متد را با پارامترهای مختلف فراخوانی کنند، Polymorphism اضافی خواهد بود. در این صورت، میتوانید آن متد را با به چندین متد کوچکتر تقسیم کنید و switch را بر اساس آن تغییر دهید.
یه سری مواقع هم هست که خب باید از همون switch استفاده کرد مثل وقتی که از switch توسط الگوهای (Factory Method یا Abstract Factory) برای انتخاب کلاس ایجاد شده استفاده می شوند.
نکته : اگر یکی از گزینه های شرطی null بود، از Null Object Pattern استفاده کنید?