Java编程体系结构-接口和实现的类应该在同一个包中吗?
我真的很奇怪,把一个接口和一个(实现的)类放在同一个包中还是分开比较好。我通常把它们放在同一个包装里,因为我认为比较起来更方便 但几天前,我有机会使用apacheJava编程体系结构-接口和实现的类应该在同一个包中吗?,java,architecture,package,Java,Architecture,Package,我真的很奇怪,把一个接口和一个(实现的)类放在同一个包中还是分开比较好。我通常把它们放在同一个包装里,因为我认为比较起来更方便 但几天前,我有机会使用apacheGenericObjectPool。然后我发现了这样一个包结构,如org.apache.commons.pool.impl 毕竟,我的问题是什么时候应该使用前一个,什么时候应该使用另一个。感谢您在advanced:D中的真诚回答:如果使用接口只是为了降低耦合,您可以将接口和实现放在同一个包中。如果您主要使用更多的接口实现,那么应该将它们
GenericObjectPool
。然后我发现了这样一个包结构,如org.apache.commons.pool.impl
毕竟,我的问题是什么时候应该使用前一个,什么时候应该使用另一个。感谢您在advanced:D中的真诚回答:如果使用接口只是为了降低耦合,您可以将接口和实现放在同一个包中。如果您主要使用更多的接口实现,那么应该将它们放在单独的包中。这真的取决于你的设计,我不认为有一个严格的规则。一般来说,您应该尽可能简单地设计应用程序,然后再进行重构。因此,在开始时,您可以将实现放在同一个包中,并且只有在似乎需要时,才应该将其拆分。组合的原则之一是将接口与其实现分离 因此,将接口及其实现约束到同一个包没有多大意义
(在我工作的系统上,接口被放置在一个公共区域中——松散地基于接口存储库的概念)。如果您通过接口和类定义包的责任,那么您将尝试从具体实现中抽象出来。因此,包应该只包含公共类型 如果继续为包提供默认实现,我看不出有任何理由不将它们放在同一个包中。但我总是建议将您的实现放在一个单独的项目或更具体的项目中,以提供包的
API
,并将实现作为两个不同的工件(例如,jar文件)
通过这种方式,您可以支持抽象的以下重要方面:
- 用另一个实现替换一个实现
- 确保客户机代码只依赖于一个API,而不依赖于实现(通过只向客户机类路径添加API工件)