9

これは一般的な質問になります。

特にGUIアプリケーションの設計に苦労しています。異なるパーツ間の相互作用を扱う。

共有状態をどのように処理すればよいかわかりません。一方では、共有された状態は良くなく、可能な限り明確にする必要があります。一方、状態を共有しないと、コンポーネント間に不要な結合が生じます。

例:

スクリプトを使用して、アプリケーションを Emacs/Vim のような方法で拡張できるようにしたいと考えています。明らかに、GUI が使用できるように、ある種の共有状態を変更する必要があります。私の最初の計画は、どこからでもアクセスできるグローバルな「セッション」を持つことでしたが、それについてはよくわかりません。

トリッキーな使用例の 1 つは、キー バインドです。ユーザーがスクリプトからカスタム キーバインドを指定できるようにしたい。各キーバインドは、セッションを唯一の引数として受け取る任意のコマンドにマップされます。

現在、エディター コンポーネントはキープレスをキャプチャします。セッションごとのキーマッピングにアクセスできる必要があるため、セッションにアクセスする必要があります。エディターをセッションに結合することは良い考えですか? 他のコンポーネントもキーバインディングにアクセスする必要があるため、セッションは共有され、シングルトンになる可能性があります...

MVC を超える GUI アプリケーションの設計について、何か良い読み物はありますか?

これは Python と wxPython、FWIW です。

[編集]: 具体的なユースケースを追加しました。

4

3 に答える 3

2

この質問に遅れて申し訳ありませんが、何もありませんつまり、同様のことを行うアプリケーションのソースを見ることに勝るものはありません。( http://pida.co.ukのようなものをお勧めするかもしれませんが、あなたが作っているように聞こえるので、拡張可能なwx + Python IDEがたくさんあります)。

いくつかのメモを作成する場合:

  1. メッセージ パッシングは本質的に悪いものではなく、コンポーネントがインターフェイスに準拠している限り、必ずしもコンポーネント間の結合を引き起こすわけではありません。

  2. 共有状態は本質的に悪いわけではありませんが、私はあなたの本能に従い、できるだけ使用しないようにします。ユニバース自体はステートフルであるため、これを完全に回避することはできません。私は通常、アプリケーションごとに非シングルトンの単一インスタンスであり、他のコンポーネントの仲介を担当する共有「Boss」オブジェクトを使用する傾向があります。

  3. キーバインドについては、ある種の「アクション」システムを使用する傾向があります。アクションは、「現在のバッファを保存する」など、ユーザーが実行できる高レベルの処理であり、UI でツールバー ボタンやメニュー項目によって便利に表すことができます。したがって、スクリプト/プラグインはアクションを作成し、それらを中心的なもの (たとえば、ある種のレジストリ オブジェクト - 1 と 2 を参照) に登録します。そして、彼らの関与はそこで終わります。これに加えて、キーをアクションにマップするある種のキーバインディングサービスがあります (レジストリから、セッションごとに、またはその他の方法でリストします)。このようにして、プラグインとキーバインド コードの分離、エディターとアクション コードの分離を達成しました。追加のボーナスとして、「ショートカットの設定」または「ユーザー定義のキー マップ」のタスクが特に簡単になります。

続けることもできますが、私が言わなければならないことのほとんどは PIDA コードベースにあるので、元のポイントに戻ります...

于 2009-02-03T02:39:33.470 に答える
2

MVC を見たことがあれば、おそらく正しい方向に進んでいるでしょう。MVC、MVP、パッシブ ビュー、監視コントローラー。これらはすべて、目的を達成するためのさまざまな方法であり、それぞれに長所と短所があります。パッシブ ビューは「理想的」ですが、GUI インターフェイス (IInterface) に非常に多くのウィジェットを導入することになります。一般的に、監督コントローラーは良い妥協点だと思います。

于 2009-01-22T23:36:00.367 に答える
1

MVC では、Model スタッフ情報の共有状態です。

コントロールは、GUI コントロール設定の共有状態と、マウス クリックなどへの応答です。

あなたのスクリプトの角度は

1) モデル オブジェクトを更新します。これはいい。コントロールはモデル オブジェクトの「オブザーバー」になることができ、ビューは観察された変更を反映するように更新されます。

2) コントロール オブジェクトを更新します。これはあまり良くありませんが... Control オブジェクトは、Model や View に適切な変更を加えることができます。

MVCの何が問題なのかわかりません。具体的な問題や懸念事項を含む、より詳細な設計例を提供していただけますか?

于 2009-01-22T23:40:19.860 に答える