問題タブ [command-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2843 参照

java - ペイント アプリケーションでの元に戻す/やり直しのコマンド パターン

小さなペイント アプリケーションで元に戻す/やり直しを実装したいと考えています。コマンド パターンは用途に適しているようですが、最適な実装方法がわかりません。

パターンを理解しているので、各コマンドに含める必要があります。

  1. やり直しのためのペイント操作の詳細 (例: 線 -> 始点と終点、自由形式の線 -> GeneralPath)
  2. 元に戻す変更前のコンポーネントの状態。この場合、それはコマンドの影響を受ける領域の小さなスナップショット イメージになります。

それに基づく私の理解は、各コマンドは「アトミック」または自己完結型である必要があり、その操作を元に戻す/やり直すために必要なすべての情報を備えているということです。

残念ながら、最初に予想したよりも多くの情報を保存する必要があります。線については、 なども考慮する必要がありColor、最初に線を描画するために使用されますStrokeRenderingHintsこれにより、私の「単純な小さなコマンド」が何かに変わります..メモリが大きくなり、ボイラープレートコードが増えます(それぞれがシリアル化可能なBeanになります1)。

メモリ節約の理由から (ほとんどの場合)、コマンドの仕様を「チート」したかったのです。おそらく、100 回の更新ごとに描画領域全体のバックアップを取りますが、それ以外の場合は、変更されたイメージの一部を保存せず、新しいペイント操作ごとに最後の (最大で) 100 個のコマンドを単純に再構築します。しかし、Graphics各部分をペイントする前にオブジェクトの状態が正しいことを確認するには問題があるようです。この部分には行が必要になる場合がありますが、RenderingHintsは 4 コマンド前にColor変更され、 は 98 コマンド前に変更されましたがStroke、 は最後のコマンドと同じままです。 227 コマンド。

よりメモリ効率の高いコマンドを追求すると、「アトミック」であるという点でパターンが窓の外に投げ出されるようです。その結果、レンダリングに影響を与える可能性のある最初のコマンドを特定することが困難になります。

するべきか:

  • 新しいパターンをお探しですか?
  • パターンを微調整して、私の固有のニーズを実装しようとしていますか?
  • これらすべてを時期尚早の最適化としてゴミ箱に捨て、定義されたコマンド パターンに固執する最も単純な (そして最もメモリを消費する) 方法でコーディングしますか?

アップデート

  1. 「それぞれがシリアライズ可能な Bean になります」 2 回目の考えでは、いいえ。Graphics2Da (描画時に使用される多くのパラメーターをきちんとカプセル化したもの) がシリアライズ可能でないことを確認するために、ドーム チェックを行いました。さらに、 aBasicStroke シリアライズ可能ですが、ストロークの太さは保存されません。多くの属性のシリアル化可能なバージョンを作成できましたが、コードがさらに多くなるように思われるため、その仕様を放棄します。同じように。BufferedImage実行時に a への参照のみを保存しようとします。
0 投票する
2 に答える
2761 参照

design-patterns - コマンド設計パターン - Invoker はオプションですか?

CommandデザインパターンでInvokerクラスはオプションですか? クライアントは、具体的なコマンドとコマンドの受信者をインスタンス化する必要があります。クライアントは常に Invoker をインスタンス化し、コマンド オブジェクトを Invoker オブジェクトに渡す必要がありますか。後でクライアントがコマンドを実行する必要があるときはいつでも、クライアントは Invoker オブジェクトに尋ねるだけで、Invoker はコマンドを実行します (おそらくすぐに、または後で実行するためにコマンドをキューに入れることができます)。

それとも、これは逆ですか?クライアントがコマンドを同期的に実行する必要がある場合、クライアントは基本クラス インターフェイスを使用してコマンドを参照しますが、具体的なコマンドとレシーバーをインスタンス化します。クライアントがコマンドを実行する必要があるときはいつでも、クライアントは基本クラスのコマンド変数で実行メソッドを呼び出すだけですか? コマンドをいつ実行するかの追加ロジックが必要な場合、その追加ロジックを保持するために Invoker クラスが使用され、クライアントは Invoker オブジェクトと対話してコマンドを実行しますか?

0 投票する
1 に答える
443 参照

java - コマンドデザインパターンのシンプルなGUInullポインター

私はこれらのクラスを持っています:JPanel拡張、インターフェース、および3xJmenuItemクラス。

メニューからどのjMenuItemを選択したかに応じて、3つのJMenuItemに実装されているExecuteメソッドを呼び出したいと思います。どうすればこれを適切に行うことができますか?3つのjMenuItemのラッパークラスが必要ですか?

0 投票する
1 に答える
2573 参照

c# - MVC 3 コントローラーの依存性注入を使用したコマンド パターン

次の記事.NET Junkie - During the command side of my architectureを読みました。これは別の stackoverflow ユーザーによって提案されたもので、コマンド パターンの概要を説明し、記事の最後に DI でそれを使用する方法についての戦略を提供しています。

これは非常に役に立ちましたが、私が見逃していることが 1 つあります。たとえば、新しいクラスを作成するとしCheckoutCustomerCommandHandlerます。

MoveCustomerCommandHandlerさて、コンストラクターを介して何らかの理由でこのコマンドとをコントローラーに挿入する必要があるとしましょう。これは DI コンテナーのセットアップとコンストラクターにどのように影響しますか?

コアでは、どちらも同じインターフェースを実装しています。これにより、DI コンテナーのルックアップの問題が発生するようです。記事の例では、インジェクターのセットアップの例を次に示します。

0 投票する
1 に答える
148 参照

c# - コマンドパターンの2種類のコマンド

コマンドパターンを使用してアプリケーションを開発しています。プログラムには 2 種類の操作があります。1. 非同期で実行する必要がある長時間の操作 (ファイルのコピー/削除) 2. 単純な操作 (パネルの更新)

私の質問は: このパターンで 2 種類のコマンド (AsyncCmd と SimpleCmd) を実装できますか? Command Manager で実行する前に、コマンドの種類を確認します。

0 投票する
2 に答える
4614 参照

wpf - WPF:MVVM:コマンドとCallMethodAction?

新しい (小さな) プロジェクトで MVVM パターンを学習していますが、コントローラーでアクションを呼び出す方法について 1 つの質問があります。

RelayCommand を宣言し、それを初期化し、RelayCommand によって呼び出されるアクションを作成することを意味する Command を使用するように指示している多くのチュートリアルを見ました。

CallMethodAction反対側には、トリガーでを使用できると言う同僚がいます。

私にとって、彼のアプローチには、コマンドの初期化メソッドを作成する必要がないという利点があります(使用されない可能性があります)。

それで、私は何が欠けていますか?なぜ誰もがコマンドを使用するのですか?

0 投票する
2 に答える
1625 参照

dependency-injection - Open Genericのタイプに基づいてAutoFacのキーサービスを作成できますか?

OpenGenericICommandHandlerのTに基づいてkeyedServiceを作成したいと思います。ICommandHandlerにConsultantCommandから継承するTがある場合、ConsultatCommandHanlderキー付きサービスを登録したいと思います。

それを行う方法はありますか?またはそれが可能であるならば?私はAutoFacを初めて使用し、苦労しています。

私は現在、次のようにCommandHandlerを登録しています。

可能であれば、Closed Typeを取得するときにCommandHandlerを識別し、何らかの方法でCommandがConsultantCommandを実装しているものを識別する必要があると思います。

私は試した:

しかし、喜びはうまくいかないようです。コンパイルされますが、ConsultantCommandから継承するものであってもCommandHandlerは登録されません。私の構文はすべて間違っていると思います

0 投票する
2 に答える
4535 参照

design-patterns - コマンドパターンと責任の連鎖

私のアプリケーションでは、特定の一連の手順で DB からデータをロードする必要があります。たとえば、すべての顧客をロードしてから、すべての注文をロードして製品をロードするなどです。ただし、1 つまたは 2 つのケースでは、順序が異なり、ロードする必要もあります。追加データ。

私の最初の考えは、顧客、注文、または製品の実際のロードにコマンド パターン (ロード コマンド メソッドを使用) を使用し、一連の責任を使用してコマンドを結び付けることができないかということです。これは良いアプローチですか、それとも私はここで物事を設計しすぎていますか?

サンプルコードは非常に役に立ちます。提案をありがとう

0 投票する
4 に答える
25976 参照

c# - 適切に設計されたクエリコマンドおよび/または仕様

私はかなり長い間、典型的なリポジトリパターン(特殊なクエリのメソッドのリストなど)によって提示される問題の適切な解決策を探してきました。http://ayende.com/blog/3955/repository-を参照してください。 is-the-new-singleton)。

特に仕様パターンを使用して、コマンドクエリを使用するというアイデアが本当に気に入っています。ただし、仕様に関する私の問題は、単純な選択の基準(基本的にはwhere句)にのみ関連し、結合、グループ化、サブセット選択、射影など、クエリの他の問題を処理しないことです。基本的に、正しいデータセットを取得するために多くのクエリが実行する必要のあるすべての余分なフープ。

(注:コマンドパターンのように「コマンド」という用語を使用します。これはクエリオブジェクトとも呼ばれます。クエリとコマンド(更新、削除、入れる))

だから私はクエリ全体をカプセル化する代替案を探していますが、それでも十分な柔軟性があるので、コマンドクラスの爆発的な増加のためにスパゲッティリポジトリを交換するだけではありません。

私はたとえばLinqspecsを使用しましたが、選択基準に意味のある名前を割り当てることができることにはある程度の価値がありますが、それだけでは十分ではありません。おそらく私は、複数のアプローチを組み合わせた混合ソリューションを探しています。

私は、この問題に対処するため、または別の問題に対処するために他の人が開発した可能性があるが、それでもこれらの要件を満たす解決策を探しています。リンクされた記事で、AyendeはnHibernateコンテキストを直接使用することを提案していますが、クエリ情報も含まれている必要があるため、ビジネスレイヤーが大幅に複雑になると思います。

待機期間が経過するとすぐに、これに報奨金を提供します。ですから、あなたの解決策を価値のあるものにして、良い説明をしてください。私は最良の解決策を選び、次点者に賛成します。

注:ORMベースのものを探しています。明示的にEFまたはnHibernateである必要はありませんが、これらが最も一般的であり、最適です。他のORMに簡単に適応できるのであれば、それはボーナスになります。Linq互換もいいでしょう。

更新:ここに良い提案があまりないことに本当に驚いています。人々は完全にCQRSであるか、完全にリポジトリキャンプにいるようです。私のアプリのほとんどは、CQRSを保証するほど複雑ではありません(ほとんどのCQRS支持者は、CQRSを使用すべきではないとすぐに言います)。

更新:ここには少し混乱があるようです。私は新しいデータアクセステクノロジーを探しているのではなく、ビジネスとデータの間の適切に設計されたインターフェイスを探しています。

理想的には、私が探しているのは、クエリオブジェクト、仕様パターン、およびリポジトリの間のある種のクロスです。上で述べたように、仕様パターンはwhere句の側面のみを扱い、結合、副選択などのクエリの他の側面は扱いません。リポジトリはクエリ全体を扱いますが、しばらくすると手に負えなくなります。 。クエリオブジェクトもクエリ全体を処理しますが、リポジトリをクエリオブジェクトの爆発的なものに単純に置き換えたくはありません。

0 投票する
0 に答える
267 参照

actionscript-3 - コマンドパターンでフレームを切り替える

フラッシュ ゲームのイントロ アニメーションを作成しようとしていますが、アニメーションの 2 番目のフレームに移動するときに問題が発生します。

これは、メニューのゲーム開始ボタンが実行することになっているコード (ドキュメント クラスにあります) です。

ご覧のとおり、コマンド パターンを使用しています。changeFrameCommand は、「this」をフレーム番号 4 に設定します。ただし、次のコマンドで currentFrame をトレースすると、出力は「3」になります。プログラムを実行するとフレームがフレーム 4 に変わるため、これは意味がありません。次のコメントアウトされたコマンドは、animationHero2 がフレーム 4 にあるため、「null オブジェクト参照のプロパティまたはメソッドにアクセスできません」というメッセージをスローします。

問題が発生する可能性が最も高いのは changeFrameCommand であると思われるため、そのクラスのコードを次に示します。

誰かがこの状況に光を当てることができれば、私の締め切りは2日なので、私は永遠に感謝します.

リクエストに応じて、追加のコード。

SerialCommand クラス:

コマンドクラス: