1

バックエンドシステムの実行にJavaEEを使用していますが、Webサービスの作成に関してJavaEEを適切に階層化する方法について質問があります。

私は、DDDの原則に従ってアプリケーションをほぼ整理しています。つまり、ドメインレイヤー、リポジトリレイヤー、およびサービスレイヤーがあります。したがって、サービス層には@Statelessの注釈が付けられ、それらは私のEJBです。

今、私は夢中になって、JAX-RSフレームワークのより多くのアノテーションでこのサービスクラスにアノテーションを付けることができます...しかし、これがいくつかの理由で正しいかどうかはわかりません:

  1. これでレイヤーを少し混ぜてみませんか?
  2. 次に、Webサービスをバージョン管理するにはどうすればよいですか?今日Webサービスを作成し、明日はそれが本当に悪いことがわかったとしましょう。しかし、夜中に誰かがそれを使用するアプリケーションを作成し、それをゴミ箱に捨てると、アプリケーションは使用できなくなります。私が欲しいのは、www.myurl.com / api / v1 / customersにあるWebサービスと、www.myurl.com / api / v2/a_new_customers_webserviceにある新しいWebサービスです。

それが私が何らかの形で望んでいることです。

他の短所もあるかもしれませんか?

では、解決策は何でしょうか?JAX-RSアノテーションでアノテーションを付ける別のクラスのセットを作成し、メソッドがサービスレイヤーのEJBのメソッドを内部的に使用できると言った場合、正しいですか?

別のWebサービスバージョンがある場合は、他のURLとロジックを使用する別のクラスのセットを作成できます。それとも私はすべて間違っていますか?これをどのように整理しますか?

4

1 に答える 1

2

根本的な問題は、再利用のためにコードを整理する方法です。ご指摘のとおり、次のことができます。

  1. EJBサービスにJAX-RSで注釈を付けて、Webサービスにします。
  2. 他の一般的なEJBサービス(1レベルの間接参照)を再利用するEJB Webサービス(つまり、JAX-RSアノテーションを使用)を作成します。
  3. 共通論理をPOJO(1レベルの間接参照)として再利用するEJBWebサービスを作成します。

3つすべてが私にとって有効な選択です。

EJBサービスのAPIには自信があるが、WebサービスのAPIには自信がない場合(インピーダンスの不一致がある可能性があります)、2を選択します。

EJBサービスが何をすべきかについて自信がない場合は、おそらくそれが最初に理解することです;)

現在自信があるが、将来変更される可能性がある場合は、現時点で最も単純なソリューション1を選択し、変更する必要があるものに応じて、必要に応じて後でリファクタリングします。YAGNIを適用します。

于 2012-11-01T14:28:45.970 に答える