5

いくつかのレイヤーで実装されているJavaシステムがあります。最下位レベルには、データベース、blobストレージ、処理キューなどのさまざまなインフラストラクチャコンポーネントを抽象化するサービスがあります。さらに、これらの1つ以上を使用するワークフローを実装するドメインレイヤーがあります。サービス(コマンドおよび複合コマンドパターンを使用)。最後に、その上にjax-rs(ジャージ)ベースのレイヤーがあり、ドメインレイヤーからのワークフローの観点から実装されたRESTインターフェース/プロトコルを提供します。

私のScalaの経験は限られていますが、Javaコードは非常に冗長で、デバッグが難しい場合があるため、ドメインレイヤーのより表現力豊かなバージョンを作成するのに適したツールかもしれません。コマンドの構成と実行の制御が、具体的なコマンドによって拡張された基本クラスによって処理されるためです。後から考えると、これは理想的な設計上の選択ではなかったかもしれません。

この非常に高レベルの説明が、私が達成しようとしていることを説明するのに役立つことを願っています。もっと具体的にする必要があるかどうか教えてください。私は主に、Javaベースのサービスレイヤーを維持しながら、ドメインレイヤーをScalaで構築する方法に興味があります。さらに、ドメイン層の上にhttp / RESTプロトコルを実装して、JavaWebアプリケーションコンテナーにデプロイできるようにする方法についての提案も非常に興味深いものです。

4

1 に答える 1

1

戦術的に明らかな出発点は、Scalaの構造型を利用して、コマンドを特性として表現することを検討することです。

trait CommandType1 { def operation() }

次に、これらの特性からコマンド構成を構築することができます。

case class CompositeCommand(commandOperand: CommandType1*) extends CommandType1 {
  def operation() = commandOperand foreach { _.operation() }
}

ワークフローレイヤーに関してScalaがJavaより優れているもう1つの利点は、コマンドを合格関数として定義できることです。これにより、抽象的な操作を表す一般的な高レベルのコマンドを作成し、一般的に使用/アクセスされるワークフロー用にこれらのコマンドの部分的な機能を作成して保存する可能性が広がります。

正面を向いたScalaプロトコル層は、着信要求を処理するためにアクターをスピンアップすることを検討できます。さらに、ビジネスロジックを制御するためのDIを提供し、フロントエンドコードで動的ディスパッチを行うためのマルチメソッドを提供するScalaのCakePatternのようなものを検討する価値があります。

于 2012-09-07T11:25:16.230 に答える