چه زمانی کپی/پیست مشکلزا خواهد بود؟

در مطلب گذشته اعلام کردیم که کپی/پیست لزوما بد نیست و میتواند خوب باشد، اما میتواند مشکلزا هم باشد.
چه وقتی کپی/پیست خوب است و چقدر در طول زمان مشکل ایجاد میکند به پارامترهایی بستگی دارد.
۱- اول کیفیت کدی که کپی میکنید – چقدر کد قابل فهم است، چقدر پایدار است، چه مقدار باگ دارد. شما مسلما مایل نیستیم که مبنای کار خود را روی مشکلات دیگری بنا کنید.
۲- چند کپی در کد صورت گرفته است. یک قانون سرانگشتی از Fowler و Beck در کتاب Refactoring آمده این است که تا سه بار مجاز است و بعد باید بازآرایی کنید. این قانون از این مساله که کپی کردن از یک تکه کد و تغییر آن میتواند در نگهداری و مراقبت مشکلزا باشد شکل گرفته است. وقتی تنها در یکی دو مورد کپی/پیست صورت گیرد هنوز بخشهای عمومی و خاص کد کپی شده روشن نیست تا بتوان بازآرایی مناسبی روی آن انجام داد.
اما تعداد کپی بیشتر، منجر به مشکلات نگهداری و مراقبت بیشتری خواهد شد، هزینه اعمال تغییر و اصلاح برای کپیهای مختلف افزایش مییابد. زمانی که کپی سوم را ایجاد میکنید باید قادر به دیدن الگوها باشید، چه چیزی بین کدها مشترک است و چه چیزی نیست. و اگر کاری را لازم است در سه روش مشابه اما متفاوت انجام دهید به احتمال زیاد پیادهسازی چهارم و پنجمی هم وجود خواهد داشت. در زمان سوم ارزش این وجود دارد که به عقب برگردید و کد را بازآرایی کنید و به یک راهحل عمومی برسید.
۳- چه میزانی لازم است که کد کپی شده را تغییر دهید و هماهنگ نگه دارید. یا به طور دقیقتر، چند دفعه لازم است که کد یکسانی را در جای مختلف تغییر داده یا اصلاح کنید.
۴- چه میزان کد را میشناسید، آیا میدانید که چند کپی وجود دارد و چگونه میتوانید آنها را پیدا کنید؟ چقدر زمان میبرد که کپی را پیدا کنید و چقدر مطمئن هستید که اصلا پیدا میکنید. ابزارهایی برای کمک به این منظور آمدهاند.بعضی توسعهدهندگان پیشنهاد میکنند که یک کامنت در جایی که کد کپی میشود گذاشته شود که در آینده راحت بتوان آن را پیدا کرد.
برنامهنویسی کپی/پیست رایگان تمام نخواهد شد. اما مشابه سایر ایده ها و راهکارها در توسعه نرمافزار، برنامهنویسی کپی/پیست مطلقا درست یا غلط نیست. ابزاری است که میتواند به درستی استفاده شود یا خیر.
Brian Foote از اولین افرادی بود که مشکل Big Ball of Mud را در طراحی نرمافزار تشخیص داد، میگوید که برنامهنویسی کپی/پیست یکی از انواع استفاده مجدد از کد است که برنامهنویسان انجام میدهند چرا که کار میکند.
پس لازم است که این مسائل را تشخیص بدهیم و اگر میخواهیم کپی/پیست کنیم مسئولیت آن را بپذیریم.
منبع: