1

私は Java を使用してタスク マネージャー プログラムを作成し、現時点で単一の UI 実装を作成しました。現在、プログラムには 3 つのレイヤーがあります。ユース ケース コントローラーを介してドメイン層と対話するプレゼンテーション層、および最後に永続化に使用される技術サービス層。この時点で、タスクの追加、タスクのステータスの編集など、ユーザーが実行できるアクションがいくつかあります。このスキームでのロガーの目的は、ユーザーが実行したすべてのアクションを追跡することです。そのため、ロガーを呼び出してコマンドを書き込むことができる場所がいくつかあります。これはひどい設計上の決定になるため、プレゼンテーション レイヤーでのログ記録は行いません。そのため、コマンド インターフェイス (元に戻す/やり直し機能を実装する目的ですべてのコマンドの実行を処理するために実装された) のコントローラーが残されます。 )、

コントローラーは、UI レイヤーとドメイン間の接点として機能するため、これには比較的適切なオプションだと思います。したがって、すべての重要なコマンドは最終的にコントローラーを通過し、すべての重要なメソッドがログに記録されていることを簡単に確認できます。 . コントローラーでこれを実行しない理由は、凝集度が低下し、カップリングが増加し、コントローラーが肥大化する可能性があるためです。

具体的なコマンドも、ログに必要なすべての情報を持っているため、別の潜在的な場所です。これにより、コマンドの凝集性が低下し、結合が増加します。また、ドメイン オブジェクトに対してアクションを実行するためにコマンド インターフェイスを使用しないと、ログが失われます。

最後に、これにより、ロガーを下位レベルのドメイン オブジェクト メソッドに実装することになります。プログラムが使用されていて、必要なすべての情報が利用可能な場合、ログは常に発生するため、これは適切な候補です。唯一の欠点は、ロガー コマンドが下位レベルのドメイン オブジェクトにまばらに分散され、正しいメソッドがすべてログに記録されていることを確認することが難しくなることです。

この種の決定について議論を進めたいと思います。皆様のコメントをお待ちしております。

4

1 に答える 1

1

実用性を第一に考えます。ロギングは、多くの場合、メンテナンスと管理の問題です。設計内の各レイヤーはロギングの候補になりますが、その理由は多少異なります。

オブジェクトの階層と設計を本当に知らなくても...

ドメインから UI に至るまで、各レイヤーは前のレイヤーの動作の抽象化またはコレクションです。どのレベルの粒度を求めているかなどを自問する必要があります。コマンドのログを表示すると便利ですか? 関連する各ドメイン層呼び出しのログを表示することも役に立ちますか? ドメイン呼び出しを解読して特定のコマンドに関連付けるのは、必ずしも容易ではない場合があります。

于 2010-12-17T03:32:23.963 に答える