在Java项目中组织包的利弊
随着我正在从事的项目越来越大,我开始对将类划分为包的问题非常不确定。假设项目有很多层,这些层中有接口和实现,甚至还有更多的子层(组件)。我总是会收到很多让人有点困惑的包裹 所以我想知道其他人使用软件包的方法。您更喜欢有很多包和很少的类,还是有几个包和很多的类?您喜欢将实现与接口分开吗?等等一般来说,你每天使用软件包的习惯以及你的方法的优缺点在Java项目中组织包的利弊,java,package,organization,Java,Package,Organization,随着我正在从事的项目越来越大,我开始对将类划分为包的问题非常不确定。假设项目有很多层,这些层中有接口和实现,甚至还有更多的子层(组件)。我总是会收到很多让人有点困惑的包裹 所以我想知道其他人使用软件包的方法。您更喜欢有很多包和很少的类,还是有几个包和很多的类?您喜欢将实现与接口分开吗?等等一般来说,你每天使用软件包的习惯以及你的方法的优缺点 谢谢你的帖子。软件包旨在帮助你找到东西 如果他们让事情变得更加混乱,那说明你做得不太对。如果包结构不直观,那么实际上查找类可能比在平面结构中更困难 据我所知
谢谢你的帖子。软件包旨在帮助你找到东西 如果他们让事情变得更加混乱,那说明你做得不太对。如果包结构不直观,那么实际上查找类可能比在平面结构中更困难 据我所知,有两所基本的学校可以将课程分为两部分:
com.foo.Bar
,实现类似于com.foo.Bar.CrowBar
,com.foo.Bar.TaskBar
。显然,如果您的实现属于不同的模块,那么您会将其更改为com.foo.moduleX.bar.CrowBar
或com.foo.bar.moduleX.CrowBar
,具体取决于您所遵循的系统
重读这一切,听起来确实有点复杂,但可能第一句话是最重要的:不要盲目遵循打包原则,包应该帮助您找到类,而不是阻碍您。我更喜欢尽可能将类和方法的范围限制为私有或包保护(所以它们不会弄乱Eclipse的autocomplete:),这自动意味着包可以包含相当多的类 我更喜欢将业务数据对象(DAO)与其存储库/检索服务分离,后者与业务逻辑对象和视图分离 由于我倾向于重用逻辑,没有交叉依赖关系的相关功能集倾向于放在它们自己的工件中。当您开始使用OSGi和独立服务时,特别方便
有一点很重要,即公开导出的接口(公共接口、枚举和类)需要有一定的关联性,因此包文档显示了一些内聚性。谢谢您详尽的回答。我有一个问题。关于模块中的子模块,您也为它们创建包吗?例如
com.foo.moduleX.submoduleX.
,com.foo.moduleX.submoduleY。