私は科学計算アプリケーション用のMatlab GUIを開発しており、かなり重い中間結果をプロットする必要があります。
現在、計算は関数として表されます。 GUIはユーザー入力を受け入れ、それを計算関数に渡し、最終的なデータ結果を返します。
アーキテクチャ上、GUIにはビューとコントローラクラスが組み込まれています。 Mainは、ソースファイルにある計算関数を定義することに加えて、これらのオブジェクトを初期化します。
さて、中間結果をプロットする必要があるので、計算ロジックとプロットの間の関心の分離を作成するための最良の方法を見つけようとしています。ユーザーへの中間結果の物理的な表示は、計算が完了するまで行われる必要はありません。
私の本能は、計算関数はそれらがプロットされていることを知らないはずです。
これまでのアイデア:
最終的に、計算は別のオブジェクトでキャプチャおよび処理する必要がある中間結果を生成して破棄します。元の関数を変更せずに追加のロジックを散在させる何らかの方法が必要です。
他のアイデアはありますか?これはMatlabで行われていますが、他の言語でこれに取り組む従来の方法がある場合は、それについて学びたいと思っています。
過去の研究:
この問題は、 この質問 のように、ロギングコードを整理するのと非常に似ています。ただし、ロギングステートメントがビジネスロジックに散在していることは広く受け入れられているようですが、プロットがより強力な分離を要求するのか、それとも不可分にそれ自体がビジネスロジックと見なされて計算コード内に含まれるのかは不明です。
私は解決策#5に行くでしょう-標準の依存性注入:
そのようにして、計算はそのインターフェースの実装について何も知りません(これは、ロガー、プロットロジック、他の種類のGUI、または完全に異なる何かである可能性があります)。中間結果が処理されるか、すぐに表示されるか、バッファリングされるか、非同期イベントとしてどこかに送信されるか、または無視されるか、およびその方法はわかりません。
GUIでこれらの結果をプロットする場合は、これを正確に実行するインターフェース実装を渡す必要があります。それでも、2つのコンポーネントは厳密に分離されています。