Каково различие между слабой связью и плотным соединением в объектно-ориентированной парадигме?

Кто-либо может описать точное различие между слабой связью и плотным соединением в Объектно-ориентированной парадигме?

256
задан TylerH 22 January 2017 в 13:16
поделиться

3 ответа

Тесная связь - это когда группа классов сильно зависят друг от друга.

Этот сценарий возникает, когда класс берет на себя слишком много обязанностей или когда одна задача распространяется на несколько классов, а не на свой собственный класс.

Слабая взаимосвязь достигается за счет конструкции, которая способствует единоличной ответственности и разделению ответственности.

Слабосвязанный класс можно использовать и тестировать независимо от других (конкретных) классов.

Интерфейсы - мощный инструмент для развязки. Классы могут взаимодействовать через интерфейсы, а не через другие конкретные классы, и любой класс может быть на другом конце этого взаимодействия, просто реализуя интерфейс.

Пример сильной связи:

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)
    {
    }
}

Другой пример здесь .

321
ответ дан 23 November 2019 в 02:44
поделиться

Loose coupling - это ответ на старый стиль жестко закодированных зависимостей и связанные с этим проблемы, такие как частая перекомпиляция при любых изменениях и повторное использование кода. Он делает акцент на реализации рабочей логики в компонентах и избегает специфичного для конкретного решения кода.

Loose Coupling = IoC См. это для более простого объяснения.

2
ответ дан 23 November 2019 в 02:44
поделиться

В объектно-ориентированном проектировании количество связей относится к тому, насколько дизайн одного класса зависит от дизайна другого класса. Другими словами, как часто изменения в классе A заставляют вносить соответствующие изменения в класс B? Жесткая связь означает, что два класса часто изменяются вместе, а свободная связь означает, что они в основном независимы. В целом, рекомендуется свободная связь, потому что ее легче тестировать и поддерживать.

Возможно, вам будет полезна эта статья Мартина Фаулера (PDF).

68
ответ дан 23 November 2019 в 02:44
поделиться