1

私が現在直面している難問について、皆さんが私を助けてくれることを望んでいました。私は現在、ロギングを一元化する必要があるという要件の1つである既存のWebアプリケーションプロジェクトに取り組んでいます。アプリケーションは、クライアントレイヤー(つまり、ビュー)、サービスレイヤー、ビジネスレイヤー、およびDAOレイヤーで構成される階層化されたアプリケーションです。

現在、アプリケーションへのログインはコントローラーメソッドによって処理されます。コントローラーメソッドでは、情報をログに記録する必要がある各コントローラーメソッドが、ロギング関数を呼び出してデータを手動でログに記録します。これらのコントローラーメソッドによって処理されるリクエストは、モバイルデバイス(電話など)、Webブラウザー、Webサービスなど、さまざまなクライアントソースから送信されます。現在、ログに記録する必要のあるすべてのデータは、汎用オブジェクトにキャプチャされ、これらのプロパティをDBテーブルに永続化するためのロギングメソッド。

問題は、この汎用オブジェクトがまさにそれ、汎用オブジェクトであるということです。ロギング、検索、その他多くのタスクを含む他の多くのタスクに使用されます。この汎用オブジェクトがロギングに使用される場合、いくつかの属性を除いて、汎用オブジェクト(ロギングの場合)にデータを取り込むために使用される属性のほとんどは、要求、つまり(HttpServletRequestオブジェクト)から取得されます。 。このオブジェクトの多様性の結果として、この汎用オブジェクトが誤用される可能性があります。したがって、この汎用オブジェクトを削除し、特殊なタスク用の特殊なオブジェクトを作成する必要があります。ロギングの場合、ロギングする必要のあるデータを永続化するために使用するロギングオブジェクトを作成することにしました。SpringAOPエフェクトを使用してロギングを行います

難問はこれです

1)コントローラーを使用してログに記録する新しい特殊なログオブジェクトのプロパティを設定し、AOPアドバイスを使用して、コントローラーメソッドの実行が終了したら、永続性のためにログオブジェクトを取得する必要があります

また

2)リクエストオブジェクト(つまり、HttpServletRequestオブジェクト)に配置した属性を使用して、AOPアドバイスで新しいログオブジェクトのプロパティを設定する必要がありますか?

オプション1に関する私の問題は、コントローラーがロギングを認識し、優れた設計原則に従って、コントローラーはそのようなタスクを実行するためにビジネスレイヤーとサービスレイヤーにのみタスクを委任することになっていることです。オプション1は、コントローラーがタスクの委任以上のことを実行していることを意味します。つまり、ログオブジェクトを構築します。

オプション2に関する私の問題は、ロギングオブジェクトがリクエストオブジェクト(つまり、HttpServletRequestオブジェクト)と密接に結合していることです。したがって、そのアプローチに潜在的な可能性があるかどうか疑問に思っています。

あらゆる種類の提案、アドバイス、批評を歓迎します。また、誰かが同じような状況に対処しなければならなかった場合、私は彼らが問題に対処するためにどのように取り組んだかを聞きたいです。

よろしくお願いします。

4

1 に答える 1

0

アスペクトを使用して、インターフェイスとして表されるロギングをサービスレイヤーに追加します。

HTTPフィルターまたはアスペクトを使用して、コントローラー層からログに記録できます。

必要に応じて、AOPを複数のレイヤーに適用できます。

于 2012-10-10T00:52:33.853 に答える