کثیف ننویس! (بخش دوم)

سلام دوستان. من امیر ضیاپور هستم. در بخش اول این نوشته، ۸ مورد از نکاتی که باعث میشه کدهای تمیزتری بنویسید رو با هم بررسی کردیم و در این بخش هم قراره ۱۰ مورد دیگه رو بررسی کنیم. مقدمه و توضیحات لازم رو در قسمت قبل نوشتم. اگه نخوندین، حتما یه سر بهش بزنید تا بدونید اوضاع از چه قراره. اگر هم خوندین که بدون معطلی میریم سر اصل مطلب.? یادآورینکات و مثال‌ها با محوریت فریمورک لاراول هستن. اما اغلب به طور کلی اشاره شده و تقریبا برای تمام زبان‌های برنامه‌نویسی شی محور قابل استفادست.کدهای کثیف رو حتما با دستکش refactor کنید ?۹) از event استفاده کنیددر نظر داشته باشید که بخشی از منطق پیاده سازی شده در کدتون رو از کنترلرها به eventها منتقل کنید. یه مثال از این مورد، زمانیه که میخواین مدل‌ها رو بسازین.خوبی این روش اینه که دیگه مدلتون تو همه جا (کنترلر، job و ...) به یه شکل کار میکنه و کنترلرتون درگیر جزئیات ساختار دیتابیس نمیشه.۱۰) متُد استخراج کنیداگه یکی از متدهاتون خیلی طولانی و پیچیده شد و احساس کردید که درک اتفاقی که داره می‌افته مشکل شده، بهتره که کدتون رو به چند متد مجزا انتقال بدید (استخراج کنید) و با نامگذاری مناسب، درک منطق کدتون رو ساده کنید. ۱۱) توابع کمکی (helper function) بسازیداگه از یه قطعه کد زیاد استفاده میکنید، با استخراجش به عنوان یه تابع کمکی، کدتون تمیزتر میشه.توابع view ،auth و request نمونه‌هایی از توابع کمکی هستند که در فریمورک لاراول به طور پیش فرض قرار داده شدن. ۱۲) از کلاس‌های کمکی (helper classes) پرهیز کنیدگاهی پیش میاد که بعضیا helperها به صورت کلاس مینویسن.دقت کنید که این یه کلاسه که فقط متدهای استاتیک داره که ازشون به عنوان تابع کمکی استفاده میشه و میتونه کدتونو شلوغ و به هم ریخته کنه.پس بهتره که این متدها رو به کلاس‌هایی که منطق مربوط بهشون در اون وجود داره منتقل کنید یا اینکه به صورت global function درشون بیارید.۱۳) یکی از تعطیلات آخر هفته رو به یادگیری صحیح OOP اختصاص بدینتفاوت بین متدهای استاتیک و instance method ها، و متغیرهای private و protected و public رو یاد بگیرید. علاوه بر این‌ها، نحوه کار متدهای جادویی (magic methods) در لاراول رو بررسی کنید.دونستن این نکات در شروع کار شاید لازم نباشه، اما با گسترش کدهاتون، تبدیل به ضروریات میشه.۱۴) تو کلاس‌ها، procedural code ننویسیداین نکته، مورد قبلی رو با بقیه نکاتی که گفته شد، پیوند میده. برنامه نویسی شی گرا (OOP) به وجود اومده تا کدها خواناتر باشن. پس، از قابلیت‌هاش استفاده کنید و ۴۰۰ خط کد procedural توی متدهای کنترلرهاتون ننویسید!عکس زیر رو به عنوان آیینه عبرت ببینید و سعی کنید که کدهاتون هرگز این شکلی نشه. ?? در مورد اصول SOLID از جمله SRP مطالعه کنید و تا حد معقول از اون‌ها پیروی کنید. از داشتن کلاس‌هایی که کارهای زیادی رو بدون اینکه به هم ربط خاصی هم داشته باشن، انجام میدن اجتناب کنید. اما محض رضای خدا، خواهشاً برای هر چیز کوچیک یه کلاس نسازید! با نشستن و جدا کردن همه چیز از هم، الزاماً کدتون تمیزتر و بهتر نمیشه!? وقتی می‌بینید که یک تابع پارامترهای زیادی داره، به این معناست که:۱. این تابع مسئولیت‌های زیادی داره؛ پس طبق SRP عمل کنید.۲. مسئولیت‌هاش کمه و از این لحاظ مشکلی نیست، اما نیاز به ریفکتور (refactor) داره.? دو نکته بعدی (۱۵ و ۱۶)، تکنیک‌هایی برای انجام مورد دوم هستند.۱۵) از Data Transfer Object استفاده کنیدبه جای پاس دادن آرگومان‌های فراوان با ترتیب مشخص به تابع، یه آبجکت که پراپرتی‌های مورد نظر رو داره ایجاد کنید و داده‌ها رو در اون ذخیره کنید.۱۶) آبجکت‌های fluent بسازیداگه آبجکت‌هایی بسازید که API سلیسی دارند (اصطلاحا fluent API)، میتونین داده‌ها رو از طریق فراخوانی متدهای مجزا به آبجکت نسبت بدین (method chaining). در این حالت، تو constructor فقط حداقل موارد رو برای ایجاد آبجکت لازم دارین. هر متد هم this$ رو برمی‌گردونه، به خاطر همین، در هر نقطه‌ای که دوست داشته باشید میتونین زنجیره فراخوانی متدها رو قطع کنید.۱۷) از کالکشن‌های سفارشی استفاده کنیدساختن کالکشن‌های سفارشی، یه راه عالی برای دستیابی به سینتکس رساتر و گویاتره. این مثال در مورد جمع مبلغ سفارش رو در نظر بگیرید:۱۸) از مخفف‌ها استفاده نکنیداینطور تصور نکنید که اگه اسم متغیر یا متد طولانی باشه، مشکلی وجود داره. نه اینطور نیست؛ بلکه گویاتره. این که یه متد رو با اسم طولانیش صدا بزنید بهتره تا این که بخواین doc-block رو چک کنین که بفهمین قراره چیکار کنه.در مورد متغیرها هم همینطوره. از مخفف‌های ۳ حرفی بی معنی استفاده نکنید.بخش دوم رو هم با این ۱۰ نکته کاربردی به پایان میرسونم. ۲ بخش دیگه هم باقی مونده و اگه تا اینجا نکات رو دوست داشتید و بهتون کمک کرده، حتما ? من رو دنبال کنید و طی روزهای آینده منتظر انتشارشون باشید.اگه نوشته‌های منو دوست داشتید و براتون مفید بوده، با لایک کردن نوشته و ارسال نظر دلگرمم کنید تا انتشار چنین مطالبی رو ادامه بدم.معرفی و فرستادن نوشته برای دوستاتون هم فراموش نشه لطفا! ?? لینک سایر بخش‌ها? کثیف ننویس! (بخش اول)? کثیف ننویس! (بخش سوم)? کثیف ننویس! (بخش چهارم)