زهرا
زهرا
خواندن ۲ دقیقه·۳ سال پیش

DRY (WET) KISS YAGNI

DRY

Don’t Repeat Yourself” خودتو تکرار نکن

به طور خلاصه این اصل میگه که: از کد های تکراری پرهیز کن. رفتار یک کد در سیستم باید یکتا باشد.

هدف DRY کاهش تکرار الگوریتم ها و الگو ها، برای حفظ یکتایی و دوری از افزونگیه. اما فقط به اینجا ختم نمیشه.. برای DRY عجله نکن برو سمت WET:

WET

Write Everything Twice” یا “Write Every Time” هر بار بنویس یا هر چیزی رو دوبار بنویس

چیزی که توی ذهن شما در مورد DRY میگذره:

ویکی پدیا: DRY مخفف عدم تکرار یک کد دوبار است.

شما: آهان، باشه من همه تکرارهام را با abstraction جایگزین می کنم.

به نظر راه حل خوبی میاد، اما اینطور نیست. این abstraction معمولا اشتباهه. چرا؟

  • یه تکرار توی کدت میبینی.
  • شما تکرار را در قالب یه abstraction جدید (method یا class) استخراج و جایگزین میکنید
  • فکر می کنید کدتون کامله.
  • زمان میگذره.
  • مدیر محصول نیازمندی‌های جدیدی داره. abstraction یا انتزاعی که نوشتید تقریبا کامله. اما نیازمندی‌های جدید ۹۵ درصد با abstraction شما تطابق داره. ۵ درصد باقی‌مونده رو پوشش نمیده. حالا به جای اینکه ۹۵ درصد کد رو برای یه abstraction جدید کپی کنی، ترجیح میدی abstraction ـت رو تغییر بدی. مثلا یک عبارت شرطی if..else اضافه کنی. حالا abstraction شما برای موارد مختلف رفتار متفاوتی داره. همونطور که انتظار داری.
  • یک نیاز جدید دیگر از راه می رسه. یک شرط جدید دیگه. الزامات دیگه و شرط های دیگه.

تبریک می‌گم، شما یک abstraction اشتباه ایجاد کرده اید.

کد دیگه یک abstraction واحد و مشترک رو نشون نمی‌ده. این یک abstraction پر از شرطه. درکش سخت و پایداریش کم میشه و هر ویژگی جدید کد رو پیچیده تر می کنه.

پس چیکار باید کرد؟ “Write Everything Twice” همه چیز را دوبار بنویس.

اینو یادت باشه:

تکرار به مراتب کم هزینه تر از یک انتزاع اشتباه است.

برای هر نیازمندی جدید یه abstraction ایجاد کن. همه قسمت های تکراریش رو کپی کن. عیبی نداره. بعد از مدتی میتونی نیازمندی‌های جدید رو پیش‌بینی کنی، کدت رو تجزیه و تحلیل کنی و abstraction های مناسب رو استخراج کنی.

KISS

Keep It Simple, Stupid” یا “Keep It Stupid Simple“ اون رو خیلی احمقانه، ساده نگه دار. یا جمله اولی میگه: احمق! اونو ساده نگه دار.

این اصل میگه که باید طراحی کد رو تا جایی که ممکنه ساده کرد، تا جایی که حتی احمق ها هم اونو متوجه بشن! رعایت این اصل این مزیت ها رو داره:

  • توسعه الان و آینده کدتون رو توی تیم ساده تر میکنه. چون کدتون برای هر کسی قابل فهمه یا میتونه با کنکاش کمی اون رو بفهمه.
  • با اصل اول SOLID یعنی Single Responsibility همپوشانی داره.

مارتین فلور یه حرف جالبی میزنه:

هر احمقی می تواند کدی بنویسد که کامپیوتر آن را بفهمد. برنامه نویسان خوب کدی را می نویسند که انسان بتواند آن را بفهمد.

YAGNI

You Aren’t Gonna Need It” تو به آن نیاز نخواهی داشت

این هم یه اصل دیگه توی توسعه نرم افزاره که میگه: همیشه چیزها را زمانی که واقعا به آنها نیاز دارید اجرا کنید، نه زمانی که فقط پیش بینی می کنید که به آنها نیاز دارید.

شاید شما موقع شروع توسعه نرم افزارتون تصور کنید چیز های زیادی هست که بعدا بهشون نیاز پیدا خواهید کرد. اما نباید تا وقتی که واقعا لازمشون دارید پیاده سازیشون کنی.

drywetkissyagniprogramming principle
شاید از این پست‌ها خوشتان بیاید