علی قدرتی
علی قدرتی
خواندن ۳ دقیقه·۳ سال پیش

Low Coupling


Coupling معیاری است که نشان می دهد یک عنصر چقدر به عناصر دیگر متصل است، دانش دارد یا به عناصر دیگر تکیه دارد. Low Coupling یک الگوی ارزیابی است که نحوه تخصیص مسئولیت ها به پشتیبانی را دیکته می کند.

  • وابستگی کمتر بین کلاس ها
  • تغییر در یک کلاس تأثیر کمتری بر کلاس های دیگر دارد
  • پتانسیل استفاده مجدد بالاتر

بیایید این الگو را با مشکل کد موجود و نحوه ارائه راه حل برای آن درک کنیم.

مسئله: چگونه از وابستگی کم، تأثیر تغییر کم و افزایش استفاده مجدد پشتیبانی کنیم؟

راه حل: مسئولیتی را تعیین کنید تا Coupling کم باقی بماند.

به عنوان مثال، یک کلاس با Coupling بالا (یا قوی) به بسیاری از کلاس های دیگر متکی است. چنین کلاس هایی ممکن است نامطلوب باشند. برخی از مشکلات زیر وجود دارد:

  • تغییرات محلی اجباری به دلیل تغییرات در کلاس های مرتبط.
  • در انزوا درک آن سخت تر است.
  • استفاده مجدد سخت تر است زیرا استفاده از آن مستلزم حضور اضافی کلاس هایی است که به آنها وابسته است.

نکات کلیدی Low Coupling

  • وابستگی کم بین "artifact" ها (کلاس ها، ماژول ها، اجزا).
  • نباید وابستگی زیادی بین ماژول ها وجود داشته باشد، حتی اگر وابستگی وجود داشته باشد باید از طریق رابط ها باشد و باید حداقل باشد.
  • برای همکاری بین دو کلاس از کوپلینگ محکم (tight-coupling) خودداری کنید (اگر یک کلاس بخواهد منطق کلاس دوم را فراخوانی کند، کلاس اول به یک شی از کلاس دوم نیاز دارد، به این معنی است که کلاس اول یک شی از کلاس دوم ایجاد می کند).
  • تلاش برای طراحی آزادانه جفت شده (coupled) بین اشیایی که با هم تعامل دارند.
  • وارونگی کنترل (IoC) / تزریق وابستگی (DI) - اشیاء با DI وابستگی های خود را در زمان ایجاد توسط شخص ثالثی (مانند Java EE CDI، Spring DI…) که هر شیء را در سیستم هماهنگ می کند، داده می شود. از اشیا انتظار نمی رود که وابستگی های خود را ایجاد به دست آورند - وابستگی ها به اشیایی که به آنها نیاز دارند تزریق می شوند. مزیت کلیدی DI - loose coupling است.

مثال

این یک نمونه از loose coupling است. در اینجا نحوه دستیابی به loose coupling با اعمال مکانیزم تزریق وابستگی را نشان خواهیم داد، پیاده سازی loose coupling برای اجازه شروع سفر با هر کلاسی که واسط وسیله نقلیه را پیاده سازی کرده است به دست می آید.

مرحله 1: اینتفریس Vehicle برای اجازه اجرای loose coupling.

interface Vehicle { public void move(); }

مرحله 2: کلاس Car رابط Vehicle را پیاده سازی می کند.

class Car implements Vehicle { @Override public void move() { System.out.println(&quotCar is moving&quot); } }

مرحله 3: کلاس Bile رابط Vehicle را پیاده سازی می کند.

class Bike implements Vehicle { @Override public void move() { System.out.println(&quotBike is moving&quot); } }

مرحله 4: اکنون یک کلاس Traveler ایجاد کنید که مرجع رابط Vehicle را نگه می دارد.

class Traveler { private Vehicle v; public Vehicle getV() { return v; } public void setV(Vehicle v) { this.v = v; } public void startJourney() { v.move(); } }

مرحله 5: کلاس test برای مثال loose coupling - Traveler نمونه ای از loose coupling است.

public static void main(String[] args) { Traveler traveler = new Traveler(); traveler.setV(new Car()); // Inject Car dependency traveler.startJourney(); // start journey by Car traveler.setV(new Bike()); // Inject Bike dependency traveler.startJourney(); // Start journey by Bike }

برای مطالعه ی ادامه مطالب به لینک مراجعه کنید.

graspgrasp principlessoftware engineeringlow couplinglow coupling principle
شاید از این پست‌ها خوشتان بیاید