繁体   English   中英

每个Java域类应该实现一个接口吗?

[英]Should every Java domain class implement an interface?

我一直在寻找在我的公司完成的另一个Java项目,在这个项目中,开发人员为几乎所有的域实体创建了一个接口(有数百个)。 在某些情况下,我认为抽象是有效的,但在其他情况下,它似乎并不像现在这样需要。

每当传递实例时,它们总是被引用并通过接口访问。

这种臃肿是否会受到太多未来的证明? 或者这是合理的工程实践吗?

主要接口显然是一种设计工具,用于将不同的类与特定的特征联合起来。

但是,在编写单元测试时,所提到的接口也可以提供很多帮助。 easymock这样的工具可以很好地处理接口。

我个人喜欢有服务接口,但不一定是域对象,这取决于域对象的“丰富”程度。 例如,如果他们做了很多文件系统的东西,或者与services / dao层有很紧密的联系,我可能会在那里建立接口 - 以便更容易进行单元测试。

接口指定所需的行为而不实现。 它们允许您交换实现而不影响客户端。 它们对于面向方面编程或代理生成等技术尤其有用。

但是如果实现没有改变,我认为接口没有任何理由。

大多数模型对象都属于该类别。 如果没有实现差异,请不要使用接口。

接口对于服务和持久化类来说非常棒,但我从未见过它们用于抽象模型对象。

一个好的经验法则:不要为了抽象而引入抽象。 只有在它以某种方式启用您的项目时才这样做。 如果它使您的单元测试更容易,或者它使升级更容易,或启用依赖注入等。不要让您的项目更复杂,有用。

对于域对象,如果它们是POJO,那么从它们中创建接口确实没有任何好处。 如果他们不是POJO那么我认为他们可能实际上不是域对象...但我想这是一个不同的论点。

我认为他们想要炫耀复杂性。 如果您有多个实现或者表明它将是一个扩展点,您应该只有一个接口。

使用接口可以让您拥有相同功能的多个独立实现,这反过来又可以让您放弃实现细节。

您可能在实现中有公共类,如果您直接引用这些类,可能会想要使用它们。 通过使用接口,只有那样,您可以保证调用代码不会超出允许的范围。

处理界面时,您可以执行各种高级技巧。 需要添加调试。 编写一个包装器,为每个方法执行日志记录,然后调用包装的实例。

这个清单一直在继续。 代码到接口。 你的代码会更好。

不。如果你说为每个域创建了一个接口,那么重点是什么? 接口实际上只用于将几个类组合在一起并表示常见行为。

抽象有时被高估,可能很容易过度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM