13

我想确保我的项目不包含包之间不必要的依赖关系。例如,我想确保项目具有分层结构。即模型在一切之下,业务逻辑依赖于模型,视图依赖于业务逻辑和模型。每一层都放在自己的包中。

您能否推荐任何允许我指定这些约束并将它们作为持续集成的一部分进行检查的开源工具?

PS 我知道我可以将项目分离到单独的 Maven 模块中。不幸的是,我的真实案例比三层系统更复杂。如果我使用 maven 模块,我会有几十个相当小的模块。

4

6 回答 6

6

尽管我不确定是否可以在违反层依赖关系时强制构建失败,但至少有一个工具可以检查和可视化这些层:Sonar。您可以将它与您的 maven 和 jenkins 构建以及 eclipse(可能还有其他 IDE)集成。

Sonar 具有一个依赖矩阵视图,可以可视化包的相互依赖关系。

编辑:似乎可以配置声纳以强制构建因违规触发而失败:构建断路器插件

于 2012-11-19T18:20:07.943 回答
4

这是一个非常有效的问题,因为许多项目通过 Maven 模块强制执行依赖关系,这是对生产力和灵活性的巨大浪费。

在花了很多时间研究这个主题之后,我可以推荐两个工具:

这两种工具在过去几年都没有太大的发展,但运行良好。Macker 具有基于 XML 的语法,但 Classycle 具有简洁的 DSL。Classycle 是更高级的专用工具,具有层的概念。这些工具允许您在包和某些类类型之间实施严格的障碍。此工具应在构建过程中配置为立即因任何约束而失败。

在此处( http://innig.net/macker/example/layering/src/macker.xml)和此处(http://classycle.sourceforge.net/ddf.html#layer )检查分层示例。

一个好的开源工具仍然有一个利基市场,它可以连接到编译器,当你在 IDE 中而不是在构建工具中时会给你错误。Structure101功能更丰富,但也很重,并且依赖于 Eclipse 插件。

更新

这些也是JQAssistant,它非常强大,但可能需要相当长的时间来学习和设置。

于 2013-02-11T14:09:48.610 回答
3

JDepend可以分析您的代码库并为您提供您正在寻找的指标。您正在寻找的三个主要指标是Afferent CouplingsEfferent CouplingsPackage Dependency Cycles

Architexa是另一个在这里可能有所帮助的工具。

于 2012-11-19T18:19:51.953 回答
1

您可以使用 Checkstyle 来实现“自定义检查”。查看它以了解更多信息: http ://saturnnetwork.wordpress.com/2012/11/26/ultimate-architecture-enforcement-prevent-code-violations-at-code-commit-time/

我自己没有尝试过,但我认为实施起来并不难,而且是免费的。

于 2012-11-27T07:32:08.527 回答
1

一般来说,有几种工具可以帮助您实施分层架构和依赖限制。这些工具是特定于语言的。如果您使用的是 Java,我建议您使用 checkstyle 创建自定义检查。

我撰写了 Anton 提到的文本(Ultimate Architecture Enforcement)。这是基于我们自己的成功经验。自定义检查可以集成到 IDE(例如 Eclipse),可以集成到您的持续集成工具(例如 Jenkins),作为防止违规的最后手段,可以作为 Subversion 上的预提交验证自动执行。自定义检查本身是使用 checkstyle API 用 Ja​​va 编写的。

于 2013-03-22T14:32:55.380 回答
0

Structure101允许您将层可视化地定义为架构图中的单元,这些单元映射到物理代码并检查一致性。这些图表在开发人员的 IDE 中可见,如果违反分层规则,则会生成编辑时警告。也可以在 CI 期间中断/报告构建。SonarJLattix是其他用于视觉依赖控制的工具。

于 2012-11-20T13:30:32.093 回答