0

私は自分のアプリケーション(obj-c)を作成し、非常に厳格なクラス階層を作成しました。すべてのクラスは、他のクラスについて、およびそれらのクラスがデータを管理する方法について、ほとんどまたはまったく知りません。

次に、アクティビティの完全な説明を含むログファイルを作成する必要がありますが、「完全な」プロセスを知っているクラスはないため、「完全な」ログを書き込むことができるクラスはありません。

多くの詳細を共有せずにクラス間で情報を共有するための設計パターンまたはベストプラクティスを探しています。

私の英語が理解できたと思います。

4

3 に答える 3

2

各クラスで他のクラスについて知ることは、あなたにとって良い習慣ではないかもしれないと思います。このようにして、クラスはますます相互に依存するようになり、多くの設計原則と矛盾し、コードのモジュール性が損なわれます。

私はあなたのログ活動のために別のモジュールを追加し、すべてのプロセスについて知る能力を与え、あなたにロギングについての力を与えるでしょう。この方法は、実装するのに十分簡単で単純です。さらに、アスペクト指向アーキテクチャアスペクト指向プログラミングを見ることができます。これにより、横断的関心事(あなたの場合はログ)を分離することができます。AspectCocoaAOP-in-Objective-Cを確認する必要があります

于 2012-11-20T09:52:56.977 に答える
0

Log4Netに実装されているいくつかのパターン(http://logging.apache.org/log4net/release/features.html

階層型ロギングアーキテクチャ 階層型ロギングは、コンポーネントベースの開発に最適です。各コンポーネントには独自のロガーがあります。個別にテストする場合、これらのロガーのプロパティは、開発者の要求に応じて設定できます。他のコンポーネントと組み合わせると、ロガーはコンポーネントのインテグレーターによって決定されたプロパティを継承します。他のコンポーネントに影響を与えることなく、1つのコンポーネントのロギングの優先順位を選択的に上げることができます。これは、他のコンポーネントからのメッセージでトレースファイルを混雑させることなく、単一のコンポーネントからの詳細なトレースが必要な場合に役立ちます。これはすべて、構成ファイルを介して実行できます。コードを変更する必要はありません。

ロギングコンテキスト log4netは、ロギングの時点で開発者に透過的な方法でロギングコンテキストデータを収集するために使用できます。GlobalContextとThreadContextを使用すると、アプリケーションはロギングメッセージに添付されたコンテキストデータを保存できます。たとえば、Webサービスでは、呼び出し元が認証されると、呼び出し元のユーザー名をThreadContextプロパティに格納できます。このプロパティは、同じスレッドから作成された後続の各ログメッセージの一部として自動的にログに記録されます。

于 2012-11-19T21:56:50.767 に答える
0

各クラスをロギングデコレータでラップするのはどうですか?

于 2012-11-20T09:03:13.303 に答える