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

时间:2011-09-20 09:43:46

标签: java eclipse maven-2 ant dependencies

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

我猜测它是一个maven的东西(主要是使用Ant)。我一直在阅读Maven的模块概念 - 我在网上看到一些链接,建议在父模块下为web,dao和服务层创建不同的模块。它真的是一种常见/最佳实践吗?

无论有没有maven - 这种分裂真的让生活更轻松吗?将所有内容都放在一个具有明确定义的不同层的包结构的项目中是不是更紧凑?

4 个答案:

答案 0 :(得分:7)

当需要这样做时,将项目分成API,实现,Web等组件是很常见的。大型项目就是:大型。

将组件分开是有好处的“

  • 重复使用功能(例如,网络层使用服务层
  • 打包单个组件(例如,将API发送给客户端)
  • 版本子组件;定义他们的版本依赖性

你可以用一个巨大的项目完成所有相同的工作,但是确定哪些地方以及原因更加困难。当明确界定这些分界线时,生活会更容易。

很多如何更容易取决于项目,但当你处理成千上万行代码时,偶尔数百万,打破这些东西可以节省巨大的头痛

答案 1 :(得分:6)

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

您可能想要创建单独的模块的原因有很多:

  1. 关注点分离:是的,您可以使用包来执行此操作,但如果它位于单独的模块中,则可以单独编译,并且可以减少包中纠缠[*]的数量。
  2. 这些模块由不同的团队管理,具有自己的发布周期。
  3. 更易于理解的代码:如果您的所有dao代码都在一个模块中,并且您的所有网络都在另一个模块中,则可以单独测试它们。
  4. 模块可以是单独的可部署实体。我有一个项目有两个网络应用程序,5个批次和两个其他核心模块(一个核心用于webapp,一个核心用于批量)。我现在可以单独构建和部署每个模块。
  5. 模块在外部发布和使用。如果这是真的,那么您希望在此模块中使用最少量的“其他”代码。
  6. 您选择分解为模块的原因与分离到包中的原因相同,但是在更高级别,在一组包中。

    30确实看起来过分了。但可能有充分的理由。由您和您的项目决定什么是模块数量的正确级别。

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

    [*] Tangle:描述包之间链接的混乱。包A使用B,它使用C,它使用A和B.这些东西无助于理解。

答案 2 :(得分:3)

我认为过度模块化类似于过度工程化。在我看来,最好的路线是从一个模块/项目开始并保持这一点,直到所有参与者都明白这个现有模块的一部分将从提取到自己的模块中受益。是的,这意味着在那一点上需要额外的工作,但对我来说,我宁愿做完工作,而不是在我的构建和我的开发环境方面与不必要的复杂性无休止地争夺从未真正实现的好处。

不幸的是,即使编写一行代码,项目一开始就趋于模块化到n度。

答案 3 :(得分:0)

这还有另一个优势..如果我必须在“选定”组件上部署,我不会浪费时间和资源来部署我不需要的依赖项。