我正在考虑一个 DSL / 域设计来分析一大堆 Maven 依赖项。
输入是一个 poms 列表(实际上是 poms 和物理位置之间的映射),我认为它将被解析为“平面”(即非递归)文件,以一些不错的 scala 类型,如下所示:
class Artifact(
val groupId : String,
val artifactId : String,
val version : String
)
class Module(
val id : Artifact,
val location : URI, // any good type for this ?
val parent : Option(Artifact),
val modules : List(Artifact),
val dependencies : List(Artifact)
)
然后在那个“节点”上有三个结构
- 继承:由 <parent> 和 <modules>
- 依赖项:通过 <依赖项>
- 物理:文件系统/svn dir-layout
问题:这些应该如何设计?
我心中的一些可能性:
- 将结构强加于模块本身,例如通过使依赖项列表可变,并将其类型更改为 List(Either(Artifact,Module))。
- 复用集合 API,将继承树映射到 Tree(Module)。但是依赖图呢?
- 设计全新的结构并将 pom 列表映射到此
- 其他的?...
当然,我希望数据结构中包含尽可能多的信息,以避免重复计算。大纲是:
- 解析平面文件列表
- 丰富结构(通过结构更新(可变)或映射到不同的结构(不可变/功能)。
- 查询丰富的结构。
我想做的事情:
- 查找传入的依赖项
- 找到“集群”
- 查找第 n 级的关系
- 给出重构提示(上拉依赖,合并模块)
- 将 pom.xml 渲染为 html,浏览到相关的工件。(类似于http://jarvana.com)
感谢您的任何见解...