تمیزکد(2-قسمت آخر) - امان از وابستگی ....(ادامه)

تمیزکد - وابستگی
تمیزکد - وابستگی


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

توی قسمت قبل توضیحاتی درمورد وابستگی‌ها، مدیریت اون‌ها و مشکلاتی که ممکنه در صورت مدیریت نادرست وابستگی‏‎‌ها برای ما پیش بیاد صحبت کردیم و دوتا از این مشکلات رو با هم بررسی کردیم، توی این قسمت هم میخوام دو مشکل باقی مونده رو برای شما دوستان مطرح کنم، پس بزن بریم !

عدم تحرک

چی هست ؟

این مشکل زمانی به وجود میاد که نتونیم قطعه کدی(ماژول، تابع، کامپوننت و...) رو که نوشتیم، توی یه جای دیگه استفاده کنیم حالا بنا به هر دلیلی! یعنی اگر در بخش دیگه‌ای از سیستممون به کدی که قبلا نوشتیم نیاز پیدا کردیم و نتونستیم سریع و راحت و بدون تغییر کد رو کپی کنیم اون موقع میگیم سیستم بی تحرک شده.

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

چرا اینجور می‎‌شه؟

  • اصلی‌ترین دلیل بی تحرکی رو می‌تونیم توجه بیش از اندازه به جزئیات توی اون تیکه کد دونست مثلا : یک ماژول لاگین که توی خودش کانکشن به پایگاه داده رو برقرار می‌کنه و داده رو از پایگاه داده واکشی می‌کنه.
  • تیکه کدمون بیش از اندازه به محیط وابسته است، مثلا : ماژول لاگین که توی خودش با پایگاه داده ارتباط برقرار می‌کنه، فقط با پایگاه داده MySQL می‌تونه ارتباط برقرار کنه.
  • تیکه کد بیش از یک وظیفه داره(دلیل خیلی از مشکلات توسعه نرم افزار این هست که برای یک ماژول یا تابع بیش از یک وظیفه در نظر می‌گیریم)!

چجور بفهمیم سیستم ما بی تحرک شده ؟

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

چرا کدهامون بی تحرک می‌‎شن؟

  • تیکه کد اونقدر پیچیده و وابسته به بخش‎‎‌های دیگه شده که عملا قابل جدا کردن نیست.
  • تیکه کد قابل جدا کردن هست اما اونقدر به محیط وابستگی داره که استفاده از اون توی محیط غیر از محیط اصلی هزینه بر و پر ریسکه!
  • تیکه کدمون رو نمی‌تونیم فورا و بدون تغییر توی یه جای دیگه استفاده کنیم.


چسبناکی

چی هست؟

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

زمانی که ما داریم یک سیستم رو طراحی می‌کنیم و حس می‌کنیم که نیاز به یک تغییر داریم، دو راه جلوی ما وجود داره؛ اول اینکه، اون تغییر رو با روشی درست در نظر می‌گیریم و اعمالش می‌کنیم؛ که این راه درسته. دوم اینکه یک راه سریع، کوتاه و البته اکثرا کثیف پیدا می‌کنیم و تغییر رو به قول خودمون می‌پیچونیم که این راه سریعه. وقتی این پیچوندن‌هامون شکل می‌گیره کم کم سیستم چسبناک و چسبناک‌تر می‌شه!

توی کدی که چسبناک باشه وقتی بخوایم تغییری توی تیکه کد یا ماژولمون ایجاد کنیم اونقدر تغییر مشکله که ترجیح میدیم تغییر رو به یه شکل دیگه توی یه جای دیگه اعمال کنیم، که خود این هم سیستم رو چسبناک‌‎تر می‌‎کنه!

چرا اینجور می‌شه ؟

  • عدم توجه توسعه دهنده‌‎ها به کد و معماری و طراحی
  • بی حوصلگی و زرنگ بازی توسعه دهنده‎‌ها
  • وابستگی بیش از حد ماژول‌‏‎ها به همدیگه یا به محیط

چطور بفهمیم سیستممون چسبناک شده ؟

دست بزنید به لپ تاپ دستتون به لپ تاپ میچسبه:)) شوخی بود!

اگه خواستید یه جایی رو تغییر بدید، بعد دیدین اونقدر تغییر دادن این قسمت داستان و هزینه داره که ترجیح دادید تغییر رو یه جور دیگه توی یه جای دیگه اعمال کنید اون موقع می‌‎تونید بگید کدتون چسبناک شده!


خب اینم آخرین مشکل امیدوارم مشکلات رو درست بیان کرده باشم و شماها هم درست متوجه شده باشید و بتونید این مشکلات رو توی کدهاتون پیدا کنید و با روش‌هایی که یاد می‌گیرید اون‌ها رو اصلاح کنید و لذت بیشتری از کار کردن ببرید. اما نمیخوام الان این بخش رو تموم کنم، میخوام کمی درمورد پیچیدگی‌های غیر ضروری که خودمون برای خودمون درست می‌کنیم حرف بزنم.


حتما تا الان زمانی که داشتین یه سیستم رو طراحی می‌کردید یه سری ایده‎‌های جالب برای آینده سیستم به ذهنتون خطور کرده. مثلا چه خوب می‌شد بعدا فلان قابلیت رو هم به وب سایت اضافه کنیم یا مثلا فلان کار رو هم بیاریم توی حیطه وظایف سامانه و...

بعد همون لحظه با خودتون می‌گید راستی اگر من زمانی بخوام اینا رو اضافه کنم، باید از همین الان یه سری کاراشون رو انجام بدم؟ یا اصطلاحا از همین الان یه سری دستگیره برای اون زمان داخل سیستم بذارم؟ خب اگه بذارم که مسلما سیستم پیچیده‌تر می‌شه و یه سری چیزا توش هست برای چیزایی که هنوز نیست!

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


خب اینم قسمت آخر تمیز کد، امیدوارم که به دردتون خورده باشه. برای رفع این مشکلات راه حل‌های زیادی وجود داره که بهترین اون‌ها کتاب Clean Code هستش که توی دنیا به شدت محبوب و زیاد استفاده می‌شه.

ممنونم از توجهتون، منتظر نظراتتون هستم.

قسمت‌های دیگر

تمیز کد(0)

تمیز کد(1)