Java 中的接口应该驻留在它们自己的目录中吗?还是应该将接口及其实现放在同一个目录(包)中?谢谢。
7 回答
我见过的一种模式是将接口放在基本目录中,然后从那里将实现放在子目录中。
例如,接口可能会放在这里:
com.myproject.data.dao.CustomerDao (some people do ICustomerDao for interfaces, but some don't like that.)
com.myproject.data.dao.ProductDao
实现可能会在这里:
com.myproject.data.dao.hibernate.HibernateCustomerDao
com.myproject.data.dao.hibernate.HibernateProductDao
com.myproject.data.dao.someotherorm.SomeOtherOrmCustomerDao
etc.
这可能在某些情况下有效,而在其他情况下可能无效,但只是需要考虑的事情。
接口并不特别需要它们自己的目录。它们应该放在有意义的地方,就像类应该放在有意义的地方一样。在许多情况下,将它们放在同一个地方可能是有意义的。
由于已经有一些优点,我只想添加一件事:
在某些项目中,我们甚至已经将所有接口放入一个子项目(maven 模块)中,并将实现放入另一个子项目中。通过这种方式,可以将接口与实现完全分离,并在项目的早期完成接口项目,并将其交付给其他处理这些接口的团队。在每个项目中,我们使用相同的包。
一般来说,我会说,你应该分开接口和它们的实现,方式并不重要,只要你与它保持一致。
同一个包。用户不应该知道或关心他们正在使用界面
随心所欲,但将接口保持在相同的包和目录结构中绝对没问题。看看java api。如果您选择任何一个包,您会注意到许多包同时包含类和接口。有些接口是由同一个包中的类实现的,有些则不是。
我认为最糟糕的做法是坚持你必须有一个不同的接口目录。我见过像 /services 和 /impl 等目录,它们只会弄乱目录结构。在我目前的工作场所,我们雇佣了很多来来往往的承包商,我们的一些项目有多种类型的界面目录。我认为使用单独目录唯一有意义的情况是,如果您计划将接口复制到其他项目中,例如 EJB,但即便如此,如果您为接口使用共享项目,它们也可以拥有相同的包。
所以简短的回答是,在任何你想要的地方,但不要认为你需要分离你的类和你的接口。在许多情况下,最好将它们保存在同一个包/目录中。
根本不需要将接口放在同一目录(包)中。如果您的界面具有公共访问权限,那么您可以在任何地方、任何包中导入它。
我读到的问题(但它的表述很奇怪)不是接口是否应该在他们自己的目录中。问题是您是否应该重新创建完整的目录结构(粗体以强调问题标题中的内容),其中一个分支仅包含接口,如下所示:
pureooabstraction/
|
|_com/
|
|_example/
|
|__SomeInterface.java
|__SomeOtherInterface.java
src/
|
|_com/
|
|_example/
|
|__SomeClass.java
|__...
pureooabstraction /目录结构将仅包含“纯抽象类”(从 OO 的角度来看,而不是 Java 的“抽象”定义),即 Java 中的接口。
并且“代码”所在的小实现细节(在OOA / OOD级别不存在)将放在src /目录中。
如果您的开发过程从 OOA 到 OOD 再到 OOP,这当然是有意义的。