'Khớp nối' là một thuật ngữ mô tả mối quan hệ giữa hai thực thể trong một hệ thống phần mềm (thường là các lớp).
Khi một lớp sử dụng một lớp khác hoặc liên lạc với nó, nó được gọi là 'phụ thuộc' vào lớp khác đó, và vì vậy các lớp này được 'ghép'. Ít nhất một trong số họ 'biết' về người kia.
Ý tưởng là chúng ta nên cố gắng giữ cho khớp nối giữa các lớp trong hệ thống của mình ở mức 'lỏng lẻo' nhất có thể: do đó, 'khớp nối lỏng lẻo' hoặc đôi khi là 'tách rời' (mặc dù trong tiếng Anh 'tách rời' có nghĩa là 'không khớp nối', mọi người thường sử dụng nó để ám chỉ 'khớp nối lỏng lẻo' giữa các thực thể).
Vậy: khớp nối lỏng lẻo so với khớp nối mạnh trong thực tế là gì và tại sao chúng ta nên tạo ra các thực thể ghép lỏng lẻo?
Khớp nối mô tả mức độ phụ thuộc giữa thực thể này với thực thể khác. Thường các lớp hoặc đối tượng.
Khi ClassA phụ thuộc nhiều vào ClassB, khả năng ClassA bị ảnh hưởng khi ClassB bị thay đổi là rất cao. Đây là khớp nối mạnh mẽ.
Tuy nhiên, nếu ClassA phụ thuộc nhẹ vào ClassB, thì khả năng ClassA bị ảnh hưởng dưới bất kỳ hình thức nào bởi sự thay đổi mã của ClassB, là thấp. Đây là khớp nối lỏng lẻo hoặc mối quan hệ 'tách rời'.
Khớp nối lỏng lẻo là tốt vì chúng tôi không muốn các thành phần trong hệ thống của chúng tôi phụ thuộc nhiều vào nhau. Chúng tôi muốn giữ cho hệ thống của chúng tôi mô-đun, nơi chúng tôi có thể thay đổi một phần một cách an toàn mà không ảnh hưởng đến phần khác.
Khi hai phần được ghép lỏng lẻo, chúng độc lập với nhau hơn và ít bị phá vỡ hơn khi các phần khác thay đổi.
Ví dụ: khi chế tạo ô tô, bạn sẽ không muốn thay đổi bên trong động cơ để phá vỡ thứ gì đó trong vô lăng.
Trong khi điều này sẽ không bao giờ xảy ra một cách tình cờ khi chế tạo một chiếc xe hơi, những điều tương tự xảy ra với các lập trình viên mọi lúc. Khớp nối lỏng lẻo có nghĩa là để giảm nguy cơ những điều như vậy xảy ra.
Khớp nối mạnh thường xảy ra khi thực thể A biết quá nhiều về thực thể B. Nếu thực thể A đưa ra quá nhiều giả định về cách thức thực thể B hoạt động hoặc cách thức xây dựng, thì có nguy cơ cao thay đổi thực thể B sẽ ảnh hưởng đến thực thể A. Điều này là bởi vì một trong những giả định của nó về thực thể B hiện không chính xác.
Ví dụ, hãy tưởng tượng rằng là một người lái xe, bạn sẽ đưa ra một số giả định nhất định về cách động cơ của chiếc xe của bạn hoạt động.
Ngày bạn mua một chiếc xe mới với động cơ hoạt động khác (hoặc vì lý do nào đó động cơ của bạn đã được thay thế), các giả định trước đây của bạn sẽ không chính xác. Nếu bạn là mã trong máy tính, bây giờ bạn sẽ là mã không chính xác mà không hoạt động đúng.
Tuy nhiên, nếu tất cả các giả định mà với tư cách là người lái xe bạn đã thực hiện về ô tô là: A- họ có vô lăng và B- họ có bàn đạp phanh và ga, hơn là những thay đổi trong xe sẽ ảnh hưởng đến bạn, miễn là một vài giả định của bạn giữ đúng Đây là khớp nối lỏng lẻo.
Một kỹ thuật quan trọng để đạt được khớp nối lỏng lẻo là Đóng gói. Ý tưởng là một lớp ẩn các chi tiết bên trong của nó khỏi các lớp khác và cung cấp một giao diện được xác định nghiêm ngặt để các lớp khác giao tiếp với nó.
Vì vậy, ví dụ, nếu bạn đã xác định một xe đẳng cấp, đó là giao diện (phương pháp công cộng) có lẽ sẽ drive()
, stop()
, steerLeft()
, steerRight()
, getSpeed()
. Đây là những phương thức mà các đối tượng khác có thể gọi trên các đối tượng Car.
Tất cả các chi tiết khác của lớp Xe hơi: cách thức hoạt động của động cơ, loại nhiên liệu mà nó sử dụng, v.v ... được ẩn khỏi các lớp khác - để ngăn chúng biết quá nhiều về Xe.
Thời điểm lớp A biết quá nhiều về lớp B: chúng ta có mối quan hệ kết nối chặt chẽ, trong đó lớp A quá phụ thuộc vào lớp B và sự thay đổi trong lớp B có thể ảnh hưởng đến lớp A. Làm cho hệ thống khó mở rộng và duy trì.
Một mối quan hệ giữa hai thực thể, nơi chúng biết rất ít về nhau (chỉ những gì cần thiết) - là mối quan hệ lỏng lẻo hoặc tách rời.