依存性注入を使用して新しいアプリケーションを緩く結合することを初めて試みました。私の問題は、ステータス情報をユーザーに返す方法です。昔は、すべてのコードがGUIに詰め込まれていたため、非常に面倒で保守が困難な場合でも、非常に簡単でした。クラスの配置は次のようなものです(私のUMLスキルをチェックしないでください-それらは存在しません):
右側を取ると。AirportsInformationRepositoryはデータを保存するだけで、要求されたときにコントローラーがデータを利用できるようにします。最初に、Persistクラスを使用して情報を取得し、ユーザーのハードドライブから特定のフィルターに一致するファイルを取得します。デコンパイラーを使用して、ファイルから情報を抽出します。これはすべて正常に機能し、情報自体は必要に応じてGUIに到達します。
私の問題は、並行して、何が起こっているのかをユーザーに伝える方法です。これは、逆コンパイラで発生する可能性があります。たとえば、取得したファイルを逆コンパイルできない場合や、データが含まれていない場合などです。構成ファイルが嘘をついていて、いくつかのフォルダーが存在しない場合、Persistクラスで発生する可能性があります。致命的なエラーがない限り、このような問題によってプロセスが停止することはありません。
致命的なエラーが発生した場合は、すぐにユーザーに返信する必要があり、プロセス全体が停止します。そうしないと、プロセスを通じて警告が収集され、スキャンが完了したときに表示される可能性があります。
私はロギングに精通しており、アプリケーションには、未処理の例外やその他の障害がないかアプリケーションを監視するロガーがあります。これはディスクに書き込み、バグに対処するためにほとんどの場合と同じようにこれを使用します。正直なところ、ファイルが見つからない場合やユーザーが構成ファイルへの無効なパスを入力した場合でも、アプリに問題はないため、これをユーザーへのステータスレポートに使用したくありません。
私は考慮しました:
- 各クラスにログを蓄積し、プロセスが完了した(または失敗した)ときにログをコンシューマーに返します。私はそれが本当に厄介だと思っています
- イベントを使用しますが、コンシューマーがサブスクライブしていて、イベントがログと同じようにチェーンを通過している場合、それがはるかに優れているとは思いません。別の方法は、GUIを直接サブスクライブさせることだと思いますが、逆コンパイラーについては何も知らないはずです。
- 静的クラスであるか、program.csでインスタンス化されるホームロールロガー
- ある種のメッセージングフレームワーク-はっきりしていませんが、GUIが他のクラスについて何も知らなくてもサブスクライブできる中央のイベントハンドラーにかなり似ていると思います。
要約すると。「通常どおりのビジネス」ステータス情報を蓄積し、スキャンの最後にGUIに提供すると同時に、致命的な問題で停止できるようにするための最良の方法は何ですか。
これを読んでくれてありがとう。投稿の長さについてお詫び申し上げます。
編集 私はアプリがNET3.5を使用していると言ったはずです。エレガントな解決策を得るためにこれを変更しますが....