ترس از کاهش وابستگی

اگر زمانی که پای برنامهنویسی شیگرا به میان بیاید، از حذف وابستگیهای بین اشیا واهمه دارید، تا انتهای این مقاله با ما همراه باشید.
اشیا از طریق متدهایشان با یکدیگر صحبت میکنند.
در زبانهای برنامهنویسی پیشرفته مانند Java یا #C، یک شی ممکن است تعدادی متد مختلف داشته باشد که اگر شی مذکور، واسط یا واسطهایی را بخواهد پیادهسازی کند، متدهای آن واسطها نیز به جمع متدهایش اضافه خواهد شد. تجربه صحبت با تعداد زیادی برنامهنویس، میگوید که اکثر ما از اشیایی که متدهای واسطی (interface methods) زیادی دارند، میترسیم. زیرا از آنجایی که این متدها چندریختی (polymorphic) و متعاقبا غیرقابل اطمینان هستند، دوست نداریم با آنها سر و کله بزنیم. ترس منطقیای هم هست. اما بیایید تحلیل کنیم و ببینیم که این ترس دقیقا ناشی از چیست.
طبق معمول، با یک مثال جاوایی ساده شروع میکنیم. در اینجا، مقدار پولی که قصد داریم به یک کاربر دیگر مثلا از طریق PayPal API ارسال کنdم مشخص است.
interface Money { double cents(); }
حالا، در اینجا متدی داریم که این پول را ارسال میکند.
void send(Money m) { double c = m.cents(); // Send them over via the API... }
class OneDollar implements Money { @Override double cents() { return 100.0d; } }
class EmployeeHourlyRate implements Money { @Override double cents() { // Fetch the exchange rate; // Update the database; // Calculate the hourly rate; // Return the value. } }
void send(EmployeeHourlyRate m) { // Now I know that it's not some abstract Money, // but a very specific class EmployeeHourlyRate, which // was implemented by Bobby, a good friend of mine. }
در اینجا، تعداد اشتباهاتِ ممکن کدمان را محدود میکنیم، زیرا Bobby را میشناسیم و کدش را دیدهایم و میدانیم که چطور کار میکند و انتظار چه استثناهایی را باید داشته باشیم. فعلا در امانیم. اما از لحاظ استراتژیک، با اجازه ندادن به نرمافزار در ایجاد اشتباهات احتمالی و پرتاب تمام استثنائات ممکن در همه شرایط غیرمعمول، امکان به درستی آزمایش شدنش را به طور جدی محدود میکنیم. به این ترتیب، نرمافزار بیثبات میشود.
تنها راه افزایش کیفیت نرمافزار، پیدا کردن و رفع باگها است. هر چه باگهای بیشتری رفع کنید، باگهای کمتری باقی میمانند. ترس از باگ و تلاش برای جلوگیری از رخ دادن آنها، فقط ما را به زمین میزند.
در عوض، نه تنها به Bobby، بلکه به همه باید اجازه دهیم Money را پیادهسازی کنند. بله، بعضی از این پیادهسازیها ممکن است باعث بروز خطاهای قابل مشاهده در UI بشوند. اما اگر مدیر، مفهوم کیفیت نرمافزار را به درستی درک کرده باشد، ما را سرزنش نخواهد کرد. بلکه ما را تشویق میکند هر چه بیشتر، باگها را پیدا کرده و با کمک تستهای خودکار، آن مواقع بروز خطا را مجددا ایجاد کرده، مشکل را حل کنیم و مجددا کد را deploy کنیم.
بنابراین، ترس از کاهش وابستگی، چیزی نیست جز ناقص امنیت اپلیکیشن
????????
خیلی عالی بود
ممنون