2

在搜索了与紧密耦合相关的不同论坛之后(当一组类相互高度依赖时)示例1

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

上面的类 CustomerRepository 依赖于 Database 类,所以它们是紧密耦合的。我认为这个类也是 Compostion 的一个例子,然后我搜索了松散耦合,所以改变了上面的类,从而消除了紧密耦合依赖。示例 2

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

我已经搜索了组合支持松耦合现在我的问题是 example1 是如何紧密耦合的,因为它是基于组合的?其次,松散耦合和组合之间的关系是什么?

任何帮助将不胜感激。

4

2 回答 2

4

你所拥有的并不是真正的紧密耦合。紧耦合是这样的:

class CustomerRepository {
    private readonly Database database;

    public CustomerRepository() {
        this.database = new Database;
    }
}

Database该类对无法替换的特定类具有硬编码的依赖关系。这真是紧耦合。

您展示的组合示例已经松散耦合,因为完全有可能将注入到构造函数中的依赖项替换为任何其他Database继承类。

您的第二个示例更加松散耦合,因为它使用接口而不是具体类;但这是一个小细节。

于 2015-05-13T06:38:08.407 回答
2
于 2015-05-13T06:58:49.190 回答