Loose Coupling Là Gì

Low coupling và high cohesion là 2 ở trong tính đi với nhau như là phương châm cần đạt được trong thiết kế, trong nội dung bài viết này, cùng mày mò xem chúng là gì, làm thế nào để đạt được và tránh giảm các lỗi liên quan đến coupling với cohesion khi thi công phần mềm.

Bạn đang xem: Loose coupling là gì

COUPLING

Low couplingloose coupling hay high coupling và tight coupling, ắt hẳn ai trong chúng ta khi học về các nguyên lý lập trình căn bản đều biết về khái niệm coupling này. Coupling đề cập mang đến vấn đề phụ thuộc vào lẫn nhau giữa các component. Low coupling, loose coupling có nghĩa là các component ít phụ thuộc vào nhau, sự biến đổi trong component này ít khi, hoặc không tác động đến component kia. Ngược lại, high coupling cùng tight coupling cho thấy các component phụ thuộc nhiều vào nhau, khi thay đổi 1 component thì các component kia hầu như bị tác động và có chức năng phải chuyển đổi theo. Tất nhiên, low coupling là mục tiêu họ cần hướng đến để bảo vệ cho khối hệ thống ít bị ảnh hưởng khi có thay đổi và bởi vì đó, tăng vận tốc thực hiện các bước và bảo trì.


*

Nếu họ nhìn vào hình trên, nó cho bọn họ thấy một mối liên hệ giữa hai class được call là tight coupling. Class1 sống trên tạo thành các đối tượng của Class2 trực tiếp, và thậm chí còn là đi cho các biến thành viên và truy cập vào. Điều này làm cho nó rất phụ thuộc vào Class2. Điều gì sẽ xảy ra nếu họ quyết định rằng bọn họ muốn thêm tham số sản xuất trong constructor của Class2 cùng đặt khoác định là private? Sau đó, chúng ta phải thay đổi mọi cách áp dụng Class2 ở hồ hết nơi. Không đẹp lắm, heh? rất có thể là một lần đau đầu không nhỏ và là giữa những vấn đề đầu tiên trong thiết kế.

Dưới đây là ví dụ bởi code:

public class ClassA private boolean attributeA; public int methodA() if(attributeA) return new ClassB().attributeB; return -1; public String getValue() return new ClassB().getValue(); public class ClassB public int attributeB; public String getValue() return "Heh?!?";

MỘT SỐ GIẢI PHÁP

DEPENDENCY INVERSION

Ví dụ vào Java, ta sẽ thêm một interface. Đó là cách Class1 vẫn chỉ phụ thuộc vào vào interface đó, chứ không hẳn là implementation thực tiễn của Class2, do đó giảm thiểu sự nhờ vào trực tiếp thân 2 class cùng với nhau.

Xem thêm: Các Giải Đấu Bóng Đá Châu Á C Giải Bóng Đá Lớn Trên Thế Giới

LAW OF DEMETER (DON’T TALK to STRANGERS!)

Lợi điểm của Law of Demeter là nó giúp hệ thống của chúng ta đứng vững vàng trước những thay đổi bằng phương pháp giảm coupling hay còn được gọi là cách design loose coupling, những sự thay đổi sẽ là nhỏ nhất nếu bao gồm thể.

COHESION

Còn high cohesion (trái ngược cùng với nó là low cohesion) là gì? Khi kể tới cohesion bọn họ nghĩ đến trách nhiệm của từng module. Trọng trách của từng module càng cụ thể và bóc tách biệt thì cohesion càng cao (high cohesion), với đó là phương châm cần đạt mức khi thiết kế. Lý giải bằng code có lẽ rằng sẽ không rõ ràng, hãy cẩn thận câu bên dưới đây:

Tại kỳ họp Quốc hội vật dụng năm, khi trao đổi về thống trị chất lượng vệ sinh an toàn thực phẩm bao gồm vị đbqh đã ví vấn đề có tới 5 bộ chịu trách nhiệm chính như vậy cũng giống như “nhiều sãi ko ai ngừng hoạt động chùa”.Bởi thế, làm rõ trách nhiệm của từng cơ quan cai quản Nhà nước về an ninh thực phẩm là một trong yêu mong được nhấn mạnh khi xây dừng Dự Luật an toàn thực phẩm.

Nếu coi Dự Luật an ninh thực phẩm là một trong feature thì rõ ràng nó đã không đạt được xem high cohesion trong xây đắp vì nó phải dàn trải và phụ thuộc vào rất nhiều module (5 bộ, chống ban) không giống nhau. Vì đó, khi đề xuất chỉnh sửa bổ sung cập nhật dự luật sẽ tương đối khó khăn vì phải sửa 1 dịp 5 module, mà chúng ta thấy đó, điều đó rõ ràng là siêu khó. Nếu quy trọng trách xây dựng bộ phương pháp này cho một cỗ ban độc nhất vô nhị thì sẽ giảm tính tinh vi và do đó, tăng tính cohesion. High cohesion thường giành được nếu ta tuân hành theo nguyên tắc 1-1 nhiệm (Single responsibility principle), từng module, lúc đó chỉ đảm nhận một trách nhiệm duy nhất, không rộng không kém, và không có chuyện 2 module cùng có tác dụng một nhiệm vụ, một tính năng.

Đến đây chắc ai cũng hiểu được rồi đúng không? Ít tốt nhất là về mặt lý thuyết, hãy chu đáo bảng sau trước lúc mình đi vào các dẫn giải tiếp theo.