9

我们正在使用不同的架构层(例如域、接口、基础设施和应用程序)构建一个小型应用程序。这遵循洋葱 DDD 模型。现在我想知道将应用程序拆分为多模块 Maven 项目是否有任何好处。据我现在所见,这似乎使事情变得比需要的更困难。整个应用程序将作为单个 WAR 文件部署到 Tomcat 容器中。

4

5 回答 5

11

拆分应用程序对以下情况有意义:

  • 当项目的某个部分需要新功能或错误修复时,您可以简单地关注该模块并为其运行测试。编译所有代码的一小部分并仅运行相关测试可以加快您的工作速度。

  • 您可以在不同的项目中重复使用模块中的代码。假设您的项目包含一些编写良好且足够通用的邮件发送代码。如果您以后有另一个需要邮件发送功能的项目,您可以简单地重新使用现有模块或在它的基础上构建(在另一个模块中添加它作为依赖项)。

  • 从长远来看,更易于维护。也许现在它看起来像一个小项目。几个月后情况可能会有所不同,然后您需要进行更多重构以将事物拆分为逻辑单元(模块)。

  • 概念清晰(由 Adriaan Koster 添加)。

关于 WAR:您可以有一个组装模块,它将所有东西放在一起并从所有相关模块生成最终的 WAR 文件。

最初,这似乎需要更多的工作,但从长远来看,模块化项目更易于使用和维护。大多数理智的开发人员更喜欢这种方法。

于 2011-07-13T08:41:42.723 回答
5

使用多个模块会迫使您具有依赖关系的层次结构。您有一个独立的模块,不依赖于您的任何其他模块。您还有另一个仅取决于此。它可能看起来比允许任何东西依赖于其他东西更难,但这种方法会导致依赖关系混乱,以后很难修复。

如果您尝试遵循分层模型,我建议您将每一层放在不同的模块中。这将确保您不会试图破坏模型。

于 2011-07-13T08:05:16.940 回答
3

简短的回答:今天它很小,明天它会变得更大更复杂,维护、重用、扩展、与其他系统集成等等

于 2015-11-23T17:51:57.710 回答
1

据我所知,Maven 对 WAR 依赖项帮助不大。当您谈论单个 WAR 时,这永远不会成为问题。

您可以将 java 类分成几个“jar”子模块,但是如果您将 WAR 项目拆分为几个较小的 WAR,使用某种“重叠”打包事情会变得复杂。

只是信息,我们的一个项目,它包含太多的网页,所以我们决定将它分成几个 WAR 子模块,但是,会话不会在部署的不同 WAR 之间共享,我们不会使用 Kerberos 的东西。最后,我们修改了很多 Glassfish、Jetty、MyFaces 等的源代码,使它们能够解析 JAR 中的 web.xml 内容。并将整个项目转换为Facelets 2.0(避免依赖JDK tools.jar和自定义资源处理程序),唯一的原因是将WAR子模块更改为JAR子模块,并将所有webapp/pages移动到类资源中。所以结论是,Maven 对 JAR 依赖项做得很好,但没有 WAR 或单个 WAR。

编辑您可以放入applicationContext.xml其中一个基本子模块,然后通过classpath:com/example/applicationContext.xml. Spring 3.0 也确实支持注释,您可以让 spring 自动扫描它们,而不是在 xml 中声明它们。

于 2011-07-13T13:46:40.433 回答
0

如果您想在另一个项目中重用您的类,或者如果您的项目部署在不同的配置中,则将您的项目拆分为多个 Maven 项目非常有用。

也许考虑一个 web 服务 - 如果您正在托管服务器,您可以为您的域类(模型)和可以由服务器和客户端使用的端点接口构建一个项目。服务器将是构建到 WAR 的另一个项目。

为了开发更多的客户,也可以使用第一个项目。

使用父项目对常见项目(如日志记录)以及不同的配置文件和构建配置进行依赖管理。

于 2011-07-13T08:08:05.053 回答