تکرار کد ارزان‌تر از انتزاع‌های اشتباه است

توسعه‌دهندگان عاشق اصل DRY هستند.

شما می‌خواهید از تکرار خودداری کنید. شما به دنبال کدی ظریف و قابل استفاده مجدد هستید.

اما این هدف اغلب به یک تله منجر می‌شود: انتزاع زودهنگام (premature abstraction).

تکرار کد حس اشتباهی دارد. با این حال، تکرار اغلب ارزان‌تر از یک انتزاع بد است.

ما سعی می‌کنیم سیستم‌های ماژولار بی‌نقصی بسازیم. ما به دنبال الگوها می‌گردیم و منطق را برای مدیریت پیچیدگی استخراج می‌کنیم.

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

اما بسیاری از انتزاع‌ها خیلی زود ساخته می‌شوند. اگر مسئله را به‌طور کامل درک نکنید، انتزاع شما به یک بارِ اضافی (liability) تبدیل می‌شود.

یک انتزاع اشتباه باعث بروز چندین مشکل می‌شود:

  • مهندسی بیش از حد (Over-engineering): شما برای مسائل ساده، راه‌حل‌های پیچیده می‌سازید.
  • صلبیت (Rigidity): تغییر دادن کدتان سخت می‌شود، زیرا سعی می‌کند آینده‌ای را پیش‌بینی کند که هرگز اتفاق نمی‌افتد.
  • پنهان شدن هدف (Obscured Intent): منطق تجاری زیر لایه‌هایی از رابط‌های عمومی (generic interfaces) پنهان می‌شود. این امر عیب‌یابی (debugging) را دشوار می‌کند.
  • وابستگی شدید (Tight Coupling): بخش‌هایی از سیستم شما به خودِ آن انتزاع گره می‌خورند.

هزینه این کار بالاست. شما به‌جای حل مشکلات کاربر، وقت خود را صرف جنگیدن با معماری خودتان می‌کنید. این کار سرعت تیم شما را کاهش داده و بازسازی کد (refactoring) را دشوار می‌کند.

من نمی‌گویم همه چیز را کپی و پیست کنید. من یک رویکرد عمل‌گرایانه (pragmatic) را پیشنهاد می‌دهم.

از تکرار کنترل‌شده به عنوان یک ابزار استفاده کنید. در بخش‌هایی که نیازمندی‌ها سریع تغییر می‌کنند یا با عدم قطعیت روبرو هستید، از آن استفاده کنید.

قبل از ساختن انتزاع، صبر کنید تا الگو را به‌وضوح مشاهده کنید.

منبع: https://dev.to/kelvin_kariuki_20f4bec616/developer-take-on-code-duplication-is-far-cheaper-than-the-wrong-abstraction-2cbo