問題タブ [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.
java - Functional Java's Effect に似た Guava の何か?
純粋な関数型プログラミングの目標の 1 つは、可変性を排除し、それによって副作用を排除することであることを私は知っています。しかし、現実を直視してみましょう。Java は、関数型プログラミング ライブラリがすべて存在するにもかかわらず、関数型言語ではありません。実際、一部の FP ライブラリはこれを認識し、期待しているようです。たとえば、Functional Java にはEffect
クラスがあります。Jedi FP ライブラリには、Command
インターフェイスがあります。これによりIterable
、厄介な for ループのボイラープレートを使用せずに、型安全性を備えたコマンド パターンを の要素に適用できます。
問題は、グアバにそのようなものはありますか?
明確化のために回答が受け入れられた後に編集
私は、特定の状況下で、ほとんどの Java FP ライブラリに固有の「垂直問題」に役立つフレームワークを開発しています。したがって、上記のコード例を実際には作成しませんCommand
。つまり、宣言の直後にすぐに適用する目的で、垂直方向のノイズの厄介さをすべて備えた の新しいクラス実装を明示的に宣言します。
私は実際のコマンド パターンの行に沿ってより多くのことを考えていました。別の場所で宣言されたいくつかの可能なコマンドがあり、そのうちの 1 つだけがそれを繰り返し適用したいコードに渡されます。さらに、私のフレームワークの目標は、単純に縦の問題を別の場所に移すことなく、関数型インターフェイス オブジェクト (関数、述語、コマンド、その他の単純なラムダ) を作成することをより慣用的にすることです。これはGuavaの範囲内ではないことに長い間気づきました。しかし、コマンドのようなインターフェイスは他の FP ライブラリで利用できるため、アナログが Guava に存在するかどうかを知りたかっただけです。
私のフレームワークを使用したより完全なコード例は、次のようになります。
java - 保存/ロードのためのJavaでのコマンドパターンの使用
私はJavaで基本的なボードゲームを実装していますが、解決の長所と短所を判断するのに苦労しています。私はすでにコマンドパターンを使用してゲームの元に戻す機能を有効にすることに成功しており、元々はゲームモデルオブジェクトのセット全体をシリアル化することでゲームの保存/読み込みを実装することを目的としていました。
しかし、このゲームはランダムな要素がなく、常に同じ状態で初期化されるボードゲームであるため、コマンドスタックを含むオブジェクトとその時点までのコマンド自体をシリアル化するだけで、保存/読み込み機能を実装できることに気付きました。次に、ゲームを保存された位置に戻すために、すべてのコマンドを再実行します。
私のコマンドはボードのタイルやピースを形成するオブジェクトインスタンスへの参照を保持しているため、現在の設計ではこれを行うことができません。これはOOのベストプラクティスであると私は信じています。つまり、これらのモデルオブジェクトもシリアル化する必要があり、コマンドをシリアル化して実行するという目的が失われます。私の質問は、コマンドにボードタイルの整数位置を保持させるだけでは、悪い習慣と見なされるかどうかです。
コマンドクラスコードの関連部分:
Tile参照を、TileLocationと呼ばれる新しいシリアル化可能なクラスへの参照、またはボードがタイルを見つけられるようにXとYの整数を保持するその効果のあるものに変更するつもりです。
c++ - 時間順のコマンド パターン キュー?
コマンド パターンを使用するように一部のコードを変更し、コマンド オブジェクトをキューに格納します。コマンドは特定の時間に実行する必要があるため、実行するコマンドを見つけるために 1 秒に 1 回リストを反復処理します。
各コマンド オブジェクトには時間が関連付けられており、この時間を現在の時間と照合します (小さなしきい値内)。そのため、時間が一致する場合はコマンド オブジェクトをリストから削除してから実行する必要があります。通常、常に 10 個未満のコマンドがあります。どのコレクション データ構造を使用する必要がありますか?また、リストの反復中にコマンド オブジェクトを削除するにはどうすればよいですか?
design-patterns - コマンドパターンはアダプター以上ですか?
GoF Command Pattern UML によると、 ConcreteCommandはRecieverを共通のCommand (可能性がある) インターフェイスに適応させるだけのように思えます。私はおそらく金槌に打たれているので、どこが違うのか、何が間違っていたのかを説明してください。
java - Java のコマンド パターンのインターフェイス
Java のコマンド パターンに必要なインターフェイスを既に提供しているライブラリはありますか?
例えば:
ありがとう。
c# - 私の場合、戦略パターンまたはコマンド パターンのどちらを使用しますか?
私が実装している 2 つのアルゴリズムがあります。
- ベクトル値と動作するアルゴリズム
- マトリックス値で動作するAlgorithmB
アルゴリズムの共通点:
- どちらも同じ入力シーケンスで提供される「合計」アルゴリズムです。アルゴリズムは、特定の値を考慮するかどうかによって若干異なります。また、シーケンスの値ごとに実行される計算も異なります。
- 両方のアルゴリズムは、同じオブジェクト (たとえば、
Antenna
送信または受信にアルゴリズムを使用する ' ') によって参照されます。 - どちらの場合も、Vector または Matrix の結果をシリアル化できるようにしたいと考えています。さらに、以前の世代から計算された (逆シリアル化された) ベクトル/行列値を使用して、任意のアルゴリズムを初期化できるはずです。
私は最初に Strategy パターンを使用して上記を実装しようとしましたが、すぐに、さまざまな型/値のために戦略パターンが最適ではない可能性があることに気付きました。さらに複雑なことに、私の ' Antenna
' オブジェクトはどちらの方向にも任意のアルゴリズムを使用できます。
これは、「送信」と「受信」の概念を複数回複製していると感じています(AlgorithmA
IAlgorithm を実装する は、それ自体が派生型 ' AlgorithmATransmit
' と ' ' を持っているためAlgorithmAReceive
です。つまり、方向に応じて同じアルゴリズム内でわずかに変化します)。
また、アルゴリズム ロジックとシリアル化されたデータをより明確に分離したいと考えています。
これについてご意見をお聞かせいただければ幸いです。ありがとう !
c# - MVVMを使用しないICommand実装を理解する
コマンドの操作方法を理解しようとしています。私はコマンドについてたくさん読みましたが、ほとんどの場合、コマンドはMVVMパターン内で使用されていることを知っています。また、RoutedCommandクラスがあることも知っています。これは、開発中の時間を節約するためによく使用されます。
しかし-私は基本を理解したい-そしてまさにそれが問題だ。どうぞ:
私のアプリでは、クラス'MyCommand'を定義しました:
ええと、静的アクセスを取得するために、すべてのアプリケーションコマンド専用のクラスを作成することにしました。
ほぼそこに。次に、メインウィンドウに2つのボタンを配置します。それらの1つは、コマンドに「バインド」されています。
そしてここにMainWindow.csがあります:
それで、私のプロジェクトを実行しましょう。ご覧のとおり、コンソール出力をいくつか作成しました。button2をクリックすると、出力は次のようになります。
CanExecuteが呼び出されました!呼び出された実行!CanExecuteが呼び出されました!MyEventHandlerは
だから、私の目にはこれが起こるのです:1。)ボタンのコマンドが「アクティブ化」されます。executeメソッドを呼び出す必要があるかどうかを確認するために、CanExecuteメソッドが呼び出されます。2.)CanExecuteメソッドがtrueを返す場合、Executeメソッドが呼び出されます。3.)executeメソッド内で、イベント「CanExecuteChanged」を発生させる必要があることを定義しました。これを呼び出すと、最初に「CanExecute」がチェックされ、次にイベントハンドラーが呼び出されます。
これは私にはわかりません。イベントを呼び出す唯一の方法は、Executeメソッド内です。ただし、Executeメソッドは、CanExecuteをチェックした後、コマンドロジックを介して呼び出されます。イベントを呼び出すとCanExecuteもチェックされますが、なぜですか?私は混乱しています。
そして、ボタンを無効にしようとすると、事態はさらに混乱します。たとえば、「CommandParameter」があり、「CanExecute」がこれで機能するようになりました。したがって、メソッドがfalseを返す可能性があります。この場合、ボタンは無効になっています-わかりました。
しかし:どうすればそれを再アクティブ化できますか?すでに知っているように、CanExecuteChangeイベントを発生させることができるのはコマンドクラス内からのみです。つまり、無効化されたボタンをクリックできないため、コマンドはCanExecute(またはExecute)メソッドを呼び出しません。
私には見えない重要なものがあるように思えますが、実際にはそれを見つけることができません。
手伝っていただけませんか?
winforms - WinForms、MVP、およびコマンドでメニューを処理する方法
MVPを使用して実装されているWinFormベースのソリューションがあります。
メニューごとにコマンドを使用するメニューがあり、コマンドを呼び出す他のメカニズムもあります。
ビューの具体的な実装から、ビュー要素 (メニュー、ボタンなど) は CommandBinder を使用してコマンドにバインドされます。
ここでの私の質問は、プレゼンターをコマンドにどのようにリンクする必要がありますか?
各コマンドは Presenter のそれぞれの関数を呼び出す必要がありますか? 各プレゼンターはコマンドを所有し、そこから呼び出される必要がありますか?
android - アプリケーションのアクティビティ メソッドを渡すコマンド パターンは?
@RomainGuy によるメモリ リークの回避の記事を読んだ後、現在の Android アプリケーションが、アプリケーションのメイン アクティビティを渡すという間違いに悩まされていることに気付きました。そのため、いつでもそのアクティビティ パラメータをActivity.getApplicationContext()に置き換えることができます。
しかし、私のアプリケーションには、アプリケーションのメイン アクティビティのメンバーにしかできないメソッドを実行する必要がある特定のクラスがあります。
したがって、コマンド パターンを使用してこの制限を回避することを考えていました。
問題は、その例を見ると、次のことです。
私は再びアクティビティの周りのパスを必要とする行き止まりに直面しています (今回はObject
データとして偽装されています)。
この「鶏が先か卵が先か」の状況から抜け出すにはどうすればよいでしょうか。
この問題にアプローチするより良い方法はありますか?
design-patterns - コマンドパターンは依存性逆転の原則の実装ではありませんか?
コマンドパターンには、Invoker、Command、Receiverの3つの主要コンポーネントがあります。クライアントは、 Receiverで特定のメソッドを呼び出すために必要な情報をInvokerに提供しますが、実際にを呼び出すのはCommandオブジェクト(Receiverによって格納されます)です。M
M
a)CPを実装するには、コマンドの数を増やしてもInvokerクラスを変更する必要がないように、 Invokerのロジックをコマンドの数から切り離す必要があります。これを行うには、CommandオブジェクトとInvokerを抽象化(つまりインターフェイス)に依存させます。
そのため、CPはDIPの特定の実現だけではありませんか?
b)CPが実際にDIPの実装である場合、 CPが他のタイプのDIP実装と正確に異なる点は何ですか?つまり、 DIPの他のすべての実装にもInvokerオブジェクト(つまり、より高いレベルのモジュール)、Commandオブジェクト(つまり、より高いレベルのモジュールに動作を提供する依存関係)があり、Receiverは依存関係オブジェクト(つまり、下位レベルのモジュール)呼び出し?
ありがとうございました
編集:
a)
依存オブジェクトは依存関係をフィールドとして保持し、それを後続のすべてのメソッド呼び出しに使用します。
そして、依存オブジェクトがこの依存関係をフィールドとして保持しない場合、したがって、すべてのsubsequnt呼び出しにそれを使用するのではなく、常に新しい依存関係オブジェクトを受け取ります。次に、DIではなくCPがあると主張できますか?
逆もまた同様です。Invokerが常に同じコマンドオブジェクトを呼び出す場合、実際に実行する作業コマンドオブジェクトに関係なく、CPではなくDIがあると主張できますか?
b)あなたが言いたいことは理解していますが、何が何かを振る舞うのか、何がコマンドなのかを区別するのに、まだいくつかの大きな問題があります。私の見解では、コマンドをInvokerに渡すことは、依存オブジェクトがそのジョブを実行するために必要な動作を注入することとして解釈することもできます。それは本当にとても明確ですか、それともより主観的ですか?したがって、オブジェクトによって実行される作業がコマンドであるか動作であるかをどのように判断するのでしょうか。