我一直在寻找在我的公司完成的另一个Java项目,在这个项目中,开发人员为几乎所有的域实体创建了一个接口(有数百个)。在某些情况下,我认为抽象是有效的,但在其他情况下,此时似乎并不需要抽象。
每当传递实例时,它们总是被引用并通过接口访问。
这种膨胀是否会受到太多未来的证明?或者这是合理的工程实践吗?
答案 0 :(得分:3)
主要是接口显然是一种设计工具,可以将不同的类与特定的特征结合起来。
但是,在编写单元测试时,所提到的接口也可以提供很多帮助。像easymock这样的工具可以很好地处理接口。
我个人喜欢有服务接口,但不一定是域对象,这取决于域对象的“丰富”程度。例如,如果他们做了很多文件系统的东西,或者与services / dao层有很紧密的联系,我可能会在那里建立接口 - 以便更容易进行单元测试。
答案 1 :(得分:3)
接口指定所需的行为而不实现。它们允许您交换实现而不影响客户端。它们对面向方面编程或代理生成等技术特别有用。
但如果实施没有改变,我认为接口没有任何理由。
大多数模型对象属于该类别。如果没有实现差异,请不要使用接口。
接口对于服务和持久化类来说非常棒,但我从未见过它们用于抽象模型对象。
答案 2 :(得分:2)
一个好的经验法则:不要为了抽象而引入抽象。只有在它以某种方式启用您的项目时才这样做。如果它使您的单元测试更容易,或者它使升级更容易,或启用依赖注入等。不要让您的项目变得更复杂有用。
对于域对象,如果它们是POJO,那么从它们中创建接口确实没有任何好处。如果他们不是POJO那么我认为他们可能实际上不是域对象......但我想这是一个不同的论点。
答案 3 :(得分:1)
我认为他们想展示复杂性。如果您有多个实现或者表明它将是一个扩展点,您应该只有一个接口。
答案 4 :(得分:1)
使用接口可以让您拥有相同功能的多个独立实现,这反过来又可以让您放弃实现细节。
如果直接引用这些类,您的实现中可能会有一些公共类可能会被诱惑使用。通过使用接口,只有那样,您可以保证调用代码不会超出允许的范围。
在处理界面时,您可以执行各种高级技巧。需要添加调试。编写一个包装器,为每个方法执行日志记录,然后调用包装的实例。
列表一直在继续。代码到接口。你的代码会更好。
答案 5 :(得分:0)
没有。如果你说为每个域创建了一个接口,那么重点是什么?接口实际上只用于将几个类组合在一起并表示常见行为。
抽象有时被高估,可能很容易过度。