【问题标题】:Is it a good idea to create an interface for each domain objects?为每个域对象创建一个接口是个好主意吗?
【发布时间】:2010-05-11 15:30:33
【问题描述】:

我刚刚查看了一个使用 nHibernate 的现有项目的源代码,发现每个实体类都创建了接口。例如 ICustomer 用于 Customer 类。我只是想知道这种模式的优势是什么,因为 ICustomer 主要包含属性和很少的方法。

【问题讨论】:

    标签: .net nhibernate design-patterns domain-model


    【解决方案1】:

    我会说不。接口将行为与实现分开,以便可以在不影响接口客户端的情况下交换后者。

    如果您的域对象不需要不同的实现,我认为不需要接口。仅在需要动态代理生成或方面或更改实现时才引入它们。

    【讨论】:

    • +1 因为在任何地方都可以轻松使用界面。话虽如此,如果您需要在任何地方使用“很少的方法”,或者如果客户对象的构造函数强制执行任何业务规则,请准备好提取接口。您不希望仅仅为了对其他类进行单元测试而创建一个有效的具体 Customer 实例。
    • 接口也因版本控制问题而臭名昭著。如果您不需要特别定义接口,请不要。
    【解决方案2】:

    我不同意之前的 cmets...虽然,结合控制反转 (IoC) 和依赖注入等模式,它可以更轻松地将这些层彼此隔离。这简化了单元测试、模拟,并且还可以导致更松散耦合的架构。这仍然可以在没有接口的情况下实现,尽管您需要确保不密封类并使成员虚拟化,以便您仍然可以模拟,生成可拦截的代理等......最后,使用接口迫使您放弃与任何相关的假设一种具体的实现,而是专注于接口定义所代表的契约。

    【讨论】:

      猜你喜欢
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多