の良い例は何cross-cutting concern
ですか? ウィキペディアのページにある医療記録の例は、私には不完全に思えます。
具体的には、この例から、ロギングによってコードの重複 (散乱) が発生するのはなぜですか? log("....")
(大したことではないように見えるどこでもなどの単純な呼び出しに加えて)。
core concern
aと aはどう違いcross-cutting concern
ますか?
私の最終目標は、AOP をよりよく理解することです。
の良い例は何cross-cutting concern
ですか? ウィキペディアのページにある医療記録の例は、私には不完全に思えます。
具体的には、この例から、ロギングによってコードの重複 (散乱) が発生するのはなぜですか? log("....")
(大したことではないように見えるどこでもなどの単純な呼び出しに加えて)。
core concern
aと aはどう違いcross-cutting concern
ますか?
私の最終目標は、AOP をよりよく理解することです。
Crosscutting Concernを理解する前に、 Concernを理解する必要があります。
懸念は、機能に基づいて分割されたシステムの一部を指す用語です。
懸念事項には次の 2 種類があります。
この図は、モジュールに分割された典型的なアプリケーションを表しています。各モジュールの主な関心事は、特定のドメインにサービスを提供することです。ただし、これらの各モジュールには、セキュリティ ログやトランザクション管理などの同様の補助機能も必要です。横断的関心事の例は「ロギング」です。これは、分散アプリケーションでメソッド呼び出しを追跡することによってデバッグを支援するために頻繁に使用されます。各関数本体の最初と最後の両方でロギングを行うとします。これにより、少なくとも 1 つの関数を持つすべてのクラスがクロスカットされます。
分野横断的な懸念の最も良い例は、トランザクションの振る舞いだと思います。たとえば、すべてのサービス メソッドで commit および rollback 呼び出しを使用して try-catch ブロックを配置する必要があると、忌避されます。AOP がメソッドを必要なトランザクション動作でカプセル化するために使用できるマーカーでメソッドに注釈を付けることは、大きなメリットです。
分野横断的な関心事の例としてのもう 1 つの適切な候補は、承認です。誰がそれを呼び出すことができるかを示すマーカーでサービスメソッドに注釈を付け、メソッド呼び出しを許可するかどうかをAOPアドバイスに決定させることは、サービスメソッドコードでそれを処理するよりも望ましい場合があります。
AOP アドバイスを使用してロギングを実装することは、柔軟性を高める方法であり、ジョインポイントを変更することでログに記録される内容を変更できます。実際には、そうしているプロジェクトはあまり見かけません。通常、log4j のようなライブラリを使用すると、必要に応じて実行時にログレベルとカテゴリでフィルタリングできますが、十分に機能します。
中心的な関心事は、アプリケーションが存在する理由、アプリケーションが自動化するビジネス ロジックです。配送貨物を処理するロジスティクス アプリケーションがある場合、トラックに積み込める貨物の量や、トラックが配達物を降ろすのに最適なルートを把握することが、主要な関心事になる可能性があります。分野横断的な関心事は、通常、ビジネス ロジックとは別に保持する必要がある実装の詳細です。
ウィキペディアからこれは非常に明確であることがわかりました:
医療記録を処理するためのアプリケーションを作成する場合、そのような記録のインデックス作成は中心的な関心事ですが、記録データベースまたはユーザーデータベース、または認証システムへの変更履歴のログ記録は、より多くの部分と相互作用するため、分野横断的な関心事になります。プログラムの。
横断的になりがちな懸念事項の例には、次のようなものがあります。
ビジネスルール
キャッシング
コードの移動性
データ検証
ドメイン固有の最適化
エラーの検出と修正
言語のローカリゼーションを含む国際化とローカリゼーション
情報セキュリティー
ロギング
メモリ管理
モニタリング
持続性
製品の特徴
リアルタイム制約
同期
取引処理
状況依存ヘルプ