JavaScript中的依赖倒置原理,错误还是我的误解?

问题描述 投票:0回答:1

我发现this关于JS中DIP的文章,我对此有一个很大的疑问。

class Database {
  constructor() {
    this.items = [];
  }

  add(item) {
    this.items.push(item);
  }

  get(id) {
    return this.items.find((item) => item.id === id);
  }
}

class DatabaseInterface {
  constructor(database) {
    this.database = database;
  }

  add(item) {
    this.database.add(item);
  }

  get(id) {
    return this.database.get(id);
  }
}

class UserController {
  constructor(databaseInterface) {
    this.databaseInterface = databaseInterface;
  }

  createUser(name) {
    const user = { id: Date.now(), name };
    this.databaseInterface.add(user);
    return user;
  }

  getUser(id) {
    return this.databaseInterface.get(id);
  }
}

以上代码解释为:

在这个固定示例中,我们为Database 类创建了一个接口,称为DatabaseInterface。 UserController 类现在依赖于 DatabaseInterface 抽象,该抽象由 Database 类实现。 通过使用抽象,我们反转了依赖关系,现在低级 Database 类依赖于高级 DatabaseInterface 抽象。

我不明白

Database
类如何依赖于
DatabaseInterface
。我认为相反 -
DatabaseInterface
取决于
Database
,因为
DatabaseInterface
使用
Database
。我说得对吗?

javascript class oop frontend abstract-class
1个回答
0
投票

你是对的,严格来说,

Database
类并不依赖于
DatabaseInterface
类,但它需要实现它。我认为作者的意思是,需要
Database
来实现
DatabaseInterface
中的方法,并将其称为依赖项。

DatabaseInterface
类依赖于实现database
add()
a
get()
。这可能很有用,因为您可以定义另一个依赖于
Foo
的类
DatabaseInterface
,但
Foo
不会依赖于
DatabaseInterface.database
的具体实现,因为您可以提供
database
DatabaseInterface
的不同实现,而无需改变
Foo

© www.soinside.com 2019 - 2024. All rights reserved.