Кто-либо может описать точное различие между слабой связью и плотным соединением в Объектно-ориентированной парадигме?
Тесная связь - это когда группа классов сильно зависят друг от друга.
Этот сценарий возникает, когда класс берет на себя слишком много обязанностей или когда одна задача распространяется на несколько классов, а не на свой собственный класс.
Слабая взаимосвязь достигается за счет конструкции, которая способствует единоличной ответственности и разделению ответственности.
Слабосвязанный класс можно использовать и тестировать независимо от других (конкретных) классов.
Интерфейсы - мощный инструмент для развязки. Классы могут взаимодействовать через интерфейсы, а не через другие конкретные классы, и любой класс может быть на другом конце этого взаимодействия, просто реализуя интерфейс.
Пример сильной связи:
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)
{
}
}
Пример слабой связи:
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)
{
}
}
Другой пример здесь .
Loose coupling - это ответ на старый стиль жестко закодированных зависимостей и связанные с этим проблемы, такие как частая перекомпиляция при любых изменениях и повторное использование кода. Он делает акцент на реализации рабочей логики в компонентах и избегает специфичного для конкретного решения кода.
В объектно-ориентированном проектировании количество связей относится к тому, насколько дизайн одного класса зависит от дизайна другого класса. Другими словами, как часто изменения в классе A заставляют вносить соответствующие изменения в класс B? Жесткая связь означает, что два класса часто изменяются вместе, а свободная связь означает, что они в основном независимы. В целом, рекомендуется свободная связь, потому что ее легче тестировать и поддерживать.
Возможно, вам будет полезна эта статья Мартина Фаулера (PDF).