大量のMaven依存関係を分析するためのDSL/ドメイン設計について考えています。
入力はpomのリスト(事実上pomと物理的な場所の間のマップ)であり、次のようないくつかの素晴らしい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)
)
次に、その「ノード」には3つの構造があります
- 継承:<親>および<モジュール>による
- 依存関係:<依存関係>による
- 物理:ファイルシステム/svndir-レイアウト
質問:これらはどのように設計する必要がありますか?
私の心のいくつかの可能性:
- 依存関係のリストを変更可能にするなどして、モジュール自体に構造を課し、そのタイプをList(Either(Artifact、Module))に変更します。
- コレクションAPIを再利用し、継承ツリーをTree(Module)にマップします。しかし、依存関係グラフはどうでしょうか?
- 完全に新しい構造を設計し、pomのリストをこれにマッピングします
- その他?..。
もちろん、繰り返しの計算を避けるために、データ構造にはできるだけ多くの情報を入れたいと思います。概要は次のとおりです。
- フラットファイルのリストを解析する
- 構造を強化する(構造の更新(可変)または別の構造へのマッピング(不変/機能)のいずれかによって)。
- クエリリッチ構造。
これでやりたいこと:
- 入ってくる依存関係を見つける
- 「クラスター」を見つける
- n年生の関係を見つける
- リファクタリングのヒントを与える(プルアップ依存関係、マージモジュール)
- pom.xmlをhtmlとしてレンダリングし、関連するアーティファクトを参照します。( http://jarvana.comと同様)
洞察をありがとう...