問題タブ [memento]
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.
domain-driven-design - スナップショット/記念品パターンの永続性
集約ルートは通常、すべてのイベントを再生して自身を正しい状態にすることを理解しています。これは非効率になる可能性があるため、集約ルートのスナップショットを作成する memento パターンが提案されました。私の理解では、ドメイン モデルは持続性とは何の関係もありません。また、スナップショットは読み取りモデルとは何の関係もないと思います。誰かがとても親切で、スナップショットが通常どこに永続化されているかを指摘してもらえますか? ありがとう。
java - 電卓の元に戻すシナリオでの Memento デザイン パターンの必要性は何ですか
私はメメントのデザインパターンについて読んでいます。電卓の元に戻す機能について説明している例を見つけました。
以下のコードで電卓の元に戻すことができます。
Calculator
CalculatorTest
Output
元に戻すのに適しています。このシナリオで Memento パターンを使用するのはなぜですか?
c# - 「Catel.IoC.IServiceLocator」には「インスタンス」の定義が含まれていません
私は .NET 開発と Catel にまったく慣れていませんが、それを学ぶためのプロジェクトに取り組んでいます。現時点では元の開発者は不在なので、代わりにここで運試しをします。
Undo/Redo を実装するには、Catel の Memento パターン サポートが優れているように思われるので試してみますが、MementoService のインスタンスを取得するのに問題があります。ViewModel で行うと、次の
var mementoService = ServiceLocator.Instance.ResolveType<IMementoService>();
ようになります。
'Catel.IoC.IServiceLocator' does not contain a definition for 'Instance' and no extension method 'Instance' accepting a first argument of type 'Catel.IoC.IServiceLocator' could be found (are you missing a using directive or an assembly reference?)
モデルで同じことをしても、この問題は発生しないことに気付きました。サービスのインスタンスを取得しようとする場所に応じて、異なる方法でサービスのインスタンスを取得する必要があるのは奇妙に思えます。
私は自分が間違っていることを理解していません。NuGet パッケージ マネージャー コンソールは、Catel.Extensions.Memento 3.7 と、Catel.Core、Catel.MVVM、および Catel.Extensions.Controls 3.7 がインストールされていることを示しています。.NET 4.0 で Visual Studio 2013 を使用しています。
catel - Memento のやり直し操作を削除しますか?
私のアプリケーションでは、ユーザーは行を DataGrid に追加し、各行のプロパティを変更できます。ユーザーは行を削除することもできます。これらのアクションを元に戻したりやり直したりすることは問題なく機能しますが、ユーザーが行を追加した場合、たとえば 3 行を追加し、いくつかの値を変更してから元に戻し、行が 1 つしかない場所に戻し、新しい行を追加すると、元に戻すことができるのは非論理的です (最後に追加された行の後に新しい行が表示されます)。したがって、ユーザーが新しい行を追加すると、すべてのやり直しが削除されます。
RedoBatches を使用してすべてのやり直しの列挙を取得し、それぞれに対して Clear を実行してそれらを削除しようとしましたが、[やり直し] ボタンはまだアクティブであり、押すとこれらのアクションをやり直します。
これはこれを達成しようとする適切な方法ですか、それとも不可能ですか、それとも別の方法で行う必要がありますか?
catel - Catelで元に戻す/やり直しをサポートする状態変更ダイアログをどのように実装する必要がありますか?
ダイアログを使用すると、元に戻すとやり直しが正しく動作しません。
ダイアログを介して変更できるオブジェクト ( running
、paused
、 )の状態を示すプロパティを持つ単純なモデルがあります。stopped
何が起こるかというと、元に戻すキューで何もしていないように見えるアクションを取得したり、元に戻したりすると、オブジェクトが中間状態に復元されます。
モデル オブジェクトは、コンストラクターで memento に登録されます。ダイアログには、3 つの異なる状態のいずれかを表す 3 つのラジオ ボタンがあります。各ラジオ ボタンは、それぞれコマンドにバインドされます。各コマンドはプロパティの変更を実行します。各コマンドがオブジェクトにプロパティを直接設定するか、各コマンドが呼び出されたときにビュー モデルのインスタンス変数を設定し、Saving イベントを使用してオブジェクトを変更します。
最初のアプローチを使用する場合、ユーザーがダイアログで [OK] をクリックする前に複数のラジオボタンをクリックすると、各プロパティの変更が元に戻すキューに入れられます。ダイアログ全体をバッチにラップすることで解決しようとしましたが、その結果、状態の変更が元に戻り、オブジェクトは最終的な状態になる前の状態に復元されます。つまりstopped
、ダイアログが開く前にプロパティが設定されていて、ユーザーがラジオボタンを一時停止してから開始し、最後に[OK]を元に戻すと、プロパティがpaused
期待されるのではなくに設定されstopped
ます。
2 番目のアプローチを使用してユーザーがダイアログを開いた場合、状態を に変更し、ダイアログpaused
で [OK] をクリックします。元に戻す/やり直しは期待どおりに動作しますが、ダイアログを再度開いて [キャンセル] を選択すると、元に戻すキューにもう 1 つのアクションが追加されます。ユーザーは、元の状態に戻すために [元に戻す] を 2 回クリックする必要がありますstopped
。
したがって、私の質問は、期待される動作を得るためにこれをどのように正しく実装する必要があるかです。ダイアログ内のすべてのインタラクションではなく、各ダイアログのインタラクションを元に戻すことができるということですか?
ViewModel のコードは次のとおりです。
java - 記念品のパターンが正しく機能しない
Memento パターンの実装をJava で実装しようとしました。
例は簡単です - 例としてビデオゲームをコピーしF5
ますF9
.
簡単な実行からの出力は次のとおりです。
しかし、最後の 2 行は次のようになっているはずなので、これは間違った結果です。
何が悪いのかわかりませんでした。コードは問題ないようです。
コード スニペットは次のとおりです。
助言がありますか?