私たちのプロジェクトの 1 つにある XML ベースのフォーム ファイルを DSL ベースのファイルに置き換えることを考えています。XML ファイルは、さまざまなコンテナーにコンポーネントが配置されたウィンドウを記述し、イベント リスナーがそれらにアタッチされます。UI のタイプは、受け入れることができるデータの種類と、データベースに保存する方法を示します。私はそれが良い設計ではないことを知っていますが、それはレガシーシステムです。アーキテクチャ全体をある日から別の日に変更することはできません:)
私は次の目的で DSL を使用するのが好きです。
- 読みやすさを改善する
- IDE でコード補完を提供します (現在の XML にはスキーマ定義がありません)。
- オプションで、UI 定義にイベント リスナー コードを含める
現在、次のようになっています。
<Form type="BIBLIOGRAPHY" name="BOOK" maximizable="false" minimizable="true">
<Size width="320" height="240" />
<Tab name="FIRST_PAGE">
<Control type="INPUT.FIELD" name="SOME_FIELD" value="database_column" />
</Tab>
</Form>
そして、私はそれを次のようなものに置き換えるのが好きです:
form(type=FormType.BIBLIOGRAPHY, name=FormName.BOOK, maximizable=false, minimizable=true) {
size = { width = 320, height = 240 }
tab(name="FIRST_PAGE") {
input(name="SOME_FIELD", value="database_column")
}
}
私はGroovy を DSL として使用することを考えました。これは Closures とメタ クラスでこれに適した基盤を提供します。ただし、コード補完には DSLD が必要であり、これらの使用は Eclipse と IntelliJ でのみサポートされていることに気付きました。チームメンバーは主に NetBeans で作業します。そのため、正しく記述された XML スキーマを持つ XML は、これをより適切にサポートできます。
また、私の場合、流れるような API インターフェイスとビルダー パターンを組み合わせることで実現できる Java DSL についても読みました。大きな利点は、これにより Java コードが生成されるため、コード補完、Javadocs、すべてが IDE ですぐに機能することです。Java を完全に理解する Groovy を使用することで、動的コンパイルを使用できます。ただし、これにより、Spring 以外のセッターを持つ非標準の Java Bean が導入されます (プロジェクトのスパインを Spring に置き換えたばかりなので、これは重要です)。これらの UI クラスを Spring で直接使用するかどうかはわかりませんが、このオプションを維持したいと思います。また、Java DSL は見栄えが悪く、動作させるには多くの手書きコードが必要になる場合があります。
そのようなことをするのは良い習慣ですか?これを行う他の解決策はありますか?