【问题标题】:Interface programming接口编程
【发布时间】:2011-07-02 21:59:00
【问题描述】:

背景

我团队中的一位开发人员实施了一个我正在审查的应用程序。他到处使用接口。该应用程序具有典型的服务层、数据层和从网站向下传递到数据库的 POCO 对象。


假设

IOC 使用(通过 Unity)注入运行时具体的服务和数据类。 所有 POCO 都只有公共属性上的 get 和 set 方法。


问题

我理解为什么在服务和数据层使用接口,但为什么要在所有 POCO 对象上使用接口?这是不是矫枉过正?

【问题讨论】:

标签: .net interface dependency-injection class-design


【解决方案1】:

POCO 接口是否有用?如果是,他们可能不会矫枉过正。但是,如果不使用,则违反YAGNI 原则。

但是,更笼统地说,我开始认为接口上的属性是设计气味,因为它们违反了Law of Demeter

我最近发布了some thoughts on better abstractions

【讨论】:

  • 我不同意。除非接口有 100 个属性,否则这些属性应该与合同相关。当然,我不同意您作为笼统概述的说法,但我们当然都看到过臭接口......
  • 阅读您的博文。最有趣的。
  • 接口不是完整契约,因为它没有定义其成员的语义,只定义它们的语法我>。您可以使用真正的按合同设计来实现这一目标。在 .NET 中,查看代码合同。
  • @Mark-Seemann - 你的博客很有趣,值得一读。开发人员的意图是松散耦合。 Employee 类实现了 IEmployee 接口,每当一个 Employee 围绕它的接口传递时——但为什么要麻烦呢?对于没有实现任何行为的类,我觉得这太过分了。他的论点是你可以换掉 Employee 的具体实现。我想不出为什么要使用 POCO 对象的原因。
【解决方案2】:

看起来您的 POCO 仅用作 Data Transfer Objects。如果是这样的话,他们只是在携带信息,没有任何行为。为它们创建接口是多余的。

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 2011-02-08
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 2011-02-21
    相关资源
    最近更新 更多