舞台裏で Web サービスを使用するサービス API を使用する UI クライアントを構築しています。API サービスの 1 つが次のようになります。
interface UserService {
List<User> findUsers(User loggedInUser, UserSearchParameters searchParameters, PagingParameters pagingParameters) throws AuthenticationFault, InvalidIndexFault;
void removeUser(User loggedInUser, User userToRemove) throws AutheticationFault;
void addUser(User loggedInUser, User newUser) throws AuthenticationFault;
}
LoggedInUser は、代わりにメソッドが呼び出されるユーザーです。AuthenticationFault はチェック例外です。これらのサービス インターフェイスは 20 ほどあります。私がやりたいことは、loggedInUser パラメーターと AuthenticationFault 例外を隠すファサードを実装することです。ファサードの実装は、現在クライアントにログインしているユーザーでこれらのメソッドを呼び出します。
また、他のチェック済み例外についてもクリーニングを行いたいと思います。ご覧のとおり、クライアントがページ -1 を取得しようとしたときにスローされる InvalidIndexFault 例外がありますが、これはプログラマーのエラーであり、チェック例外として使用したくありません。
現在、私がやったことは、好きではない例外に対して常に RuntimeException を再スローすることですが、後で気が変わった場合、後でそれを変更するのは大変な作業です。これもコードの重複のように感じます。他のプログラマーは例外を飲み込んでログに記録するだけで、まったく恐ろしいことです。ほとんどの場合、例外が発生した場合は、エラーを表示する UI のエラー ハンドラーにバブルアップしたいと考えています。
私の頭に浮かんだいくつかの解決策がありました:
- Java 動的プロキシ
- コード生成
私はこれらの解決策を試してみることができなかったので、最初にここで質問したほうがよいと考えました. これをどのように実装することをお勧めしますか? 環境はJava 6で、ビルドツールはMaven 3です。
PS。これに答える場合は、「番号 2 を選択」以上のことを言ってください :) ヒントやその他の実装の詳細を歓迎します。
明確化として、現在ログインしているユーザーを取得することは問題ではないため、私を手伝う必要はありません。私は現在、それをインターフェースの背後に隠し、IoC を使用して注入しています。舞台裏で ThreadLocals を使用