为什么在包上使用许多子项目和依赖项?

2022-09-04 03:26:42

在我的职业生涯中,我主要从事中小型Java项目。我最近在eclipse中看到一个由30个项目组成的大型项目。我并没有真正理解创建许多小项目然后维护项目间依赖关系的概念。我们什么时候更喜欢这一点,而不是简单地在包中组织东西?

我猜这是一个专家的事情(主要是使用蚂蚁)。我也一直在阅读Maven的模块概念 - 我在网络上看到了一些链接,建议在父模块下为Web,dao和服务层创建不同的模块。这真的是一种常见/最佳实践吗?

无论有没有专家 - 这种划分真的会让生活更轻松吗?将所有内容放在一个项目中,并为不同的层提供定义良好的包结构,不是更紧凑吗?


答案 1

通常将项目拆分为API,实现,Web等组件 - 当需要这样做时。大型项目就是这样:大型项目。

保持组件分离是有好处的”

  • 重用功能(例如,Web 层使用服务层
  • 打包单个组件(例如,将 API 交付给客户端)
  • 版本子组件;定义其版本依赖关系

你可以用一个巨大的项目做所有同样的事情,但是更难确定什么去哪里,为什么。当这些分界线被明确界定时,生活就会更容易。

容易多少取决于项目,但是当你处理数十万行代码时,偶尔数百万行代码,分解这些东西可以节省巨大的麻烦。


答案 2

为什么选择在 maven 中创建单独的模块?帮助您进行开发。真的没有其他原因。

以下是您可能希望创建单独模块的多种不同原因:

  1. 关注点分离:是的,你可以用包来做到这一点,但是如果它在一个单独的模块中,那么它可以单独编译,你可以减少包中的纠结[*]的数量。
  2. 这些模块由不同的团队管理,有自己的发布周期。
  3. 更易于理解的代码:如果您所有的 dao 代码都在一个模块中,而所有 Web 都在另一个模块中,则可以单独测试它们。
  4. 模块可以是单独的可部署实体。我有一个项目,它有两个Web应用程序,5个批处理和两个其他核心模块(一个用于web应用程序的核心,一个用于批处理的核心)。我现在可以单独构建和部署每个模块。
  5. 这些模块在外部发布和使用。如果这是真的,那么你需要这个模块中最少的“其他”代码。

您选择分解为模块的原因与拆分为包的原因相同,但在更高级别上,在一组包中。

30似乎有些过分。但这可能是有充分理由的。由您和您的项目决定模块数量的正确级别。

就我个人而言,我尽量不要过度分裂,除非有充分的理由这样做。

[*]Tangle:描述软件包之间链接的混乱。包 A 使用 B,它使用 C,它同时使用 A 和 B。


推荐