构建设计良好的依赖项的注意事项

时间:2011-09-06 16:07:03

标签: design-patterns inversion-of-control dependency-management

我开始考虑在我未来的项目或重构中实现Inversion of Control容器,我想知道在正确设计依赖关系时要记住哪些原则(除了GoF模式)可能很有趣。假设我需要构建一个简单的控制台应用程序,它将在亚马逊中搜索一本书(按ISBN),如果它可以访问互联网,或者在没有可用连接时将回退到本地数据库(SQLite,SqlServerCE)。所以最初的设计可能就是:

  • IAmazonSearchProvider
  • ILocalSearchProvider
  • IResultsGenerator(取决于IAmazonSearchProvider或ILocalSearchProvider)
  • IOutputFormatter
  • ConsoleApplication(取决于IOutputFormatter)

非常感谢任何指导,非常感谢。

2 个答案:

答案 0 :(得分:2)

这是一种非常正常的方法,它并不坏,但它主要关注机制,可能会有违反Reused Abstractions Principle的风险。从较高的层面来说,如果你能让API描述它的而不是 它做什么,那么你会更好。 Hollywood Principle之后是一个重要的开始。

在设计抽象时,支持组合优于继承。除此之外,请Role Interfaces支持Header Interfaces

目前,我使用loose ranking of Role Interface methods这样的Commands are best}:

  1. 命令
  2. 关闭行动
  3. 减少输入
  4. 可组合返回类型

答案 1 :(得分:1)

我认为I*是接口。 IResultsGeneratorILocalSearchProvider听起来像IResultsGenerator的实现(以及非接口)。还有一些东西应该取决于IResultsGenerator,我推荐它是ConsoleApplication

其余的看起来很好。