<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های Hossein Askari</title><link>https://virgool.ir/feed/@hosein.xz</link><description>Back-End Developer</description><language>fa</language><pubDate>2026-11-11 14:58:21</pubDate><image><url>https://files.virgool.ir/upload/users/39899/avatar/MXVCJb.jpeg</url><title>Hossein Askari</title><link>https://virgool.ir/@hosein.xz</link></image><item><title>Dive into refactoring</title><link>https://virgool.ir/@hosein.xz/dive-into-refactoring-hapw0edtcjck</link><description>#refactoring#code_smells#dive_into_refactoring#Alexander_ShvetsCode 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 استفاده کنید?</description><category>Hossein Askari</category><author>Hossein Askari</author><pubDate>Thu, 21 Apr 2022 15:36:45 +0430</pubDate></item><item><title>Dive into Refactoring</title><link>https://virgool.ir/@hosein.xz/dive-into-refactoring-lnf65pz66wtf</link><description>#refactoring#code_smells#dive_into_refactoring#Alexander_ShvetsCode Smells :* Bloaters *شامل کدها، متد ها و کلاس‌هایی هستند که به اندازه‌های بزرگی افزایش یافته‌ که کار کردنبا اونا سخت میشه. معمولاً این ‫code smells فوراً ظاهر نمی شوند، بلکه در طول زمان و با تکامل برنامه جمع می شوند ( مخصوصاً وقتی کسی تلاشی برای از بین بردن آنها نمی کنه)‫و شامل موارد زیر میشه :1) Long Methodیک متد حاوی خطوط کد بسیار زیادی است.به طور کلی، هر متدی که بیش از ده خط باشد، باید شما را وادار به سؤال کردن کنه.2) Large Classبدین معنا که یک کلاس شامل بسیاری از فیلدها / متد ها / خطوط کد است3) Primitive Obsessionاستفاده زیاد و وسواس گونه از ‫primitives برای هر چیز مشخص در domain modelمثلا وقتی یک داده پیچیده رو داخل یک متغیر ذخیره میکنیم درست نیست و میشه این متغیر رو تبدیل به یک کلاس یا تبدیل به یک استراتژی کرد4) Long Parameter Listبیش از سه یا چهار پارامتر برای یک متد5) Data Clumpsگاهی اوقات قسمت های مختلف کد حاوی گروه های یکسانی از متغیرها (مانند پارامترهای اتصال به پایگاه داده) می باشد. ‫این clumps ها باید به کلاس های خودشان تبدیل بشن.‫به عنوان مثال وقتی فیلد های مختلفی از یک دیتا رو به ورودی یک متد پاس میدیم میتونیم این رو در نظر بگیریم که کل آبجکت رو به متد پاس بدیم به جای اینکه یکی یکی فیلدهارو پاس بدیم</description><category>Hossein Askari</category><author>Hossein Askari</author><pubDate>Thu, 14 Apr 2022 16:23:30 +0430</pubDate></item></channel></rss>