Yo, Đây là bài đăng đầu tiên trong series Spring của mình, mong các bạn ủng hộ ^^
Tight-coupling và Loose-coupling là gì?
Tight-coupling: Khi mà các class phụ thuộc vào nhau. Kịch bản này phát sinh khi một class nhận quá nhiều trách nhiệm hoặc khi một mối quan tâm được trải rộng trên nhiều class thay vì một class riêng.
Loose-coupling có được khi điều chỉnh thiết kế cho các class có một trách nhiệm riêng của nó và tách biệt các mối quan tâm.
Interface là một công cụ mạnh mẽ để sử dụng cho coupling. Các class có thể giao tiếp qua các interface chứ không phải qua các class cụ thể khác. Và bất kỳ class nào cũng có thể gọi giao diện bằng cách sử dụng implement.
Ví dụ về Tight-coupling:
class CustomerRepository
{
private readonly Database database;
public CustomerRepository(Database database)
{
this.database = database;
}
public void Add(string CustomerName)
{
database.AddRow("Customer", CustomerName);
}
}
class Database
{
public void AddRow(string Table, string Value)
{
}
}
Ví dụ về Loose-coupling
class CustomerRepository
{
private readonly IDatabase database;
public CustomerRepository(IDatabase database)
{
this.database = database;
}
public void Add(string CustomerName)
{
database.AddRow("Customer", CustomerName);
}
}
interface IDatabase
{
void AddRow(string Table, string Value);
}
class Database : IDatabase
{
public void AddRow(string Table, string Value)
{
}
}
Giải thích trong thực tế:
Tight-coupling: Hãy tưởng tượng rằng bạn muốn thay da của bạn từ màu trắng sang màu đen? Bạn sẽ phải lột nó ra và gắn da mới vào. Rất đau đúng không? Bởi vì da của bạn gắn chặt với cơ thể bạn. Bạn sẽ phải thiết kế lại cơ thể con người để biến điều này thành có thể.
#keypoint1: Nếu bạn muốn thay da thì phải thay đổi thiết kế của cơ thể bạn.
Loose-coupling: Bây giờ bạn hãy nghĩ về việc mặc quần áo buổi sáng, bạn không thích chiếc áo thun với màu tím mộng mơ? Đừng lo, bạn có thể chọn màu đen huyền bí. Bạn có thể chọn và mặc nó dễ dàng bởi vì nó không gắn chặt với cơ thể bạn như là Da. Bởi vì chiếc áo không thực sự quan tâm cơ thể bạn ra sao.
#keypoint2: Nếu bạn muốn đẹp hơn thì chỉ cần thay áo bởi vì chiếc áo không làm thay đổi thiết kế cơ thể của bạn.
Tại sao lại cần Tight-coupling và Loose-coupling?
Nó quan trọng bởi vì phần mềm luôn thay đổi. Để dễ dàng cho việc sửa code.
Ví dụ khác:
Nếu ai đó muốn output là file CSV chứ không phải là JSON v.v.. hoặc là bạn muốn thay MySQL bằng PostGreSQL bạn có thể thực hiện điều đó dễ dàng mà không cần phải viết lại toàn bộ class.
Nói cách khác, bạn muốn tight-coupling phần mềm của mình,
(Chỉ sử dụng MySQL và output CSV) và rồi chuyện gì đến sẽ đến. Vào một ngày đẹp trời nọ, khách hàng dở chứng muốn đổi từ MySQL sang PostGreSQL. Tiếp đó bạn sẽ làm gì? Viết lại toàn bộ class? Chính vì thế nên sử dụng Loose-coupling cho code của bạn để việc bảo trì trở nên dễ dàng hơn bao giờ hết.
SUMMARY
Để thuận tiện sửa code khi có yêu cầu thì chúng ta nên viết theo kiểu Loose-coupling để việc bảo trì trở nên dễ dàng hơn.Bài viết được dịch từ StackOverFlow. Cám ơn các bạn đã theo dõi!
https://stackoverflow.com/questions/2832017/what-is-the-difference-between-loose-coupling-and-tight-coupling-in-the-object-o