問題タブ [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.
design-patterns - プログラムに元に戻す機能を提供するデザイン パターンが必要です
プログラムに元に戻す機能を提供するデザイン パターンが必要です。すでに Memento を使用していますが、授業のためにもう 1 つ必要です。
c# - WPF:編集可能なComboBoxで元に戻すを無効にする
Mementoパターンに基づいた元に戻るシステムを実装しました。TextBoxで組み込みのUndoを無効にし、ComboBoxでこれを行う方法を考えていました。私が持っているコンボボックスは編集可能であるため、TextBoxが含まれています。これにアクセスして、元に戻すを無効にするにはどうすればよいですか。
ComboBoxから派生してプロパティを追加し、コントロールテンプレートをオーバーライドして、TextBoxにプロパティを設定できることはわかっていますが、xamlの標準のComboBoxでこれを行う方法が必要です。
java - java.io.Serializable はどのように Memento パターンですか?
私たちが知っているように、メメントパターンはカプセル化に違反することなく、オブジェクトの内部状態をキャプチャして外部化し、元の状態を知らなくても後で回収できます。
私の質問は、プライベート変数をシリアル化し、オブジェクトの状態をファイルに書き込むと同時に、プライベート変数の値が世界に公開され、カプセル化がここで失敗しているように見えるjava.io.Serializable
ため、このパターンの下でどのようになるかです。
java - 取り消し可能なコマンドを実装 - Java
私は現在、小さなテキスト エディター (学校向けのプロジェクト) をプログラミングしていますが、取り消し可能なコマンドを管理する適切でクリーンな方法を見つけるのに苦労しています。
(改善だけではないため、コード レビューの質問ではありません。アプリケーションを希望どおりに動作させたい場合は、コードを変更する必要があります)
私のアプリケーションの動作は次のとおりです。実際には文字の配列リストであるバッファを保持する具体的なサブジェクトがあります。この配列リストが変更されるたびに (挿入、切り取り、貼り付けなど)、サブジェクトはオブザーバーを更新します (現時点では 1 つの GUI のみで構成されます) (MVC パターン)。
元に戻すとやり直しのために今まで行っていたのは、バッファの状態全体を保存することでした(記念品を介して)。これは正常に機能していますが、
- 明らかに改善できます。
- 実装する必要がある新機能が機能していない (ユーザー アクションを記録して、いつでも再生できるようにする)
バッファの代わりにコマンドを保存する方法がわかりません。また、それが良い方法であるかどうかもわかりません。
プログラムの一部を次に示します (insert コマンドの場合)。
「GUI」.java
CommandManager.java
CommandInsert.java
TextConcrete.java
CommandUndoable は、バッファの状態を保存し、CareTaker (CommandManager) 内のメモのリストに保存する単なるメモです。
どんな助けでも本当に感謝します。
c# - 前の状態を含む状態パターン C#
私は C# での状態パターンの実装に不慣れです。実装方法に関する情報を提供していただけますか。
ステート パターンを使用して、C# でステート マシンをリファクタリングしています。現在、私の状態マシンには 5 つの状態が含まれており、状態を前後に移動することしかできません。つまり、状態 1 から状態 2、3、4 に移動して、最終的に状態 5 に到達する必要があります。
やるだけで前に進めます
先に進むたびに新しい状態を作成しますが、すべての状態が作成された後、および/または前に戻りたい場合は、新しい状態だけでなく、同じ状態に移動する必要があります。どうやってやるの?シンプルにする良い方法はありますか?
c# - Memento パターンは C#4 でどのように実装されていますか?
Memento パターン自体はかなり単純明快に思えます。ウィキペディアの例と同じものを実装することを検討していますが、その前に、実装または使用を容易にする C# の言語機能はありますか?
eclipse-plugin - ビューを閉じるときにEclipse呼び出しViewPart saveState
を拡張するビューを使用する Eclipse プラグインがありますViewPart
。ViewPart
を必要とするsaveState
メソッドがありますIMemento
。
コードをsaveState
対応するinit
メソッドに追加したところ、機能しました。残念ながら、saveState
ワークスペース全体がシャットダウンしている場合にのみ呼び出されます。私の見解はそれほど重要ではないので、常に開かれていると期待できます。したがって、saveState
ビューを閉じるときに呼び出されると便利です。
ビューの閉鎖に反応する手段としてビューパーツリスナーを見つけましたが、得られないのはどこからIMemento
来たのかです。ワークスペースの閉鎖で使用される memento オブジェクトはどこで取得できますか? init
または、ビューが (再) 開かれた場合にビュー部分がメソッドでそれを使用するようにするには、独自の memento オブジェクトをどこに保存する必要がありますか?
これは私のものですsaveState
- ビューが閉じるたびにそれを呼び出すようにビューに伝えることはできますか?
javascript - Jquery Forms: memento パターンを使用してダーティ フォーム通知システムを構築する - 既存のパターン?
現在、ページから移動する前にフォームが変更されたことをユーザーに通知するスクリプトを作成しています (これは ASP.NET MVC アプリです)。
最初に、ユーザーが入力を変更したかどうかを検出する簡単なスクリプトの作成から始め、少しひっくり返してフォームを「ダーティ」として指定しました。
これは単純すぎて、拡張フォーム入力のサポートが不足していたので、次にプラグインを試しました。
私が見つけた最高のものはこれでした: http://mal.co.nz/code/jquery-dirty-forms/
この jquery ダーティ フォーム プラグインはかなりうまく機能しますが、私が必要とする重要な機能が 1 つ欠けています。以前の値をユーザーが入力した値と比較する機能。
たとえば、テキスト フィールドに元々「Foo Bar」という値があり、ユーザーがその値を「Foo」に変更した場合、フォームはダーティになります。
ユーザーがそのテキスト ボックスの値を "Foo Bar" に戻してから、このプラグインを使用すると、フォームは依然として "ダーティ" のままであり、これは私の要件では正しくありません。
必要な機能を実行するプラグインがないため、独自のプラグインを作成する必要があります。このような機能を構築するためのベスト プラクティスは何ですか?
私の考えはこれでした:
- このアプリは MVC であるため、次の技術を使用できます。
- jquery
- json
- データ注釈
私の最初の考えは次のとおりです。
- ページには多くのフォームを含めることができます。各フォームには、最初は false に設定された属性「isDirty」があります。
- 比較する各フィールドの元の値を保存する必要があります(メモ)
- 各フィールドには、そのフィールドを「ハイライトなど」で呼び出すクラス/フラグ/属性「isDirty」を含めることができます。
- これらのフィールド値を JSON NVP データ構造に格納できます
- 送信時に、JavaScript はその JSON 文字列を調べて元の値を調べ、現在の値と比較します。無効な場合は、ダーティ ルールに違反するテキスト フィールドに「ダーティ」フラグ (クラス名を追加) を追加します。 .
パフォーマンスと再利用性は明確な考慮事項です。このパターンを任意のフォームに適用できるはずであり、ほとんど作業を行わずに元の値を使用して検証を実行できるようにする必要があります。
私のニーズに似た既存のパターンを見た人はいますか? 私のアイデアは実現可能ですか?誰かが私が取ることができるより良いルートについて意見を持っていますか? 拡張できるコード サンプルから始めるのは素晴らしいことですが、疑似コードも良いでしょう。
[アップデート]
私がやろうとしていることは一般に「フォームスタッシュ」として知られていますが、Googleはその検索用語にはあまり役に立ちません。
私が取り組んできたこのスクリプトは、私がやりたいことと似ています: (このページから: http://www.mydogboris.com/2009/10/using-jquery-data-feature-to-detect-form-変更/ )
java - プロキシと記念品のパターン
Proxy - ProxyService を RealService 呼び出しに変換するコード (および場所) は? なぜ/いつこれを使用するのですか? レイヤー - 実装方法は? Memento - 状態をキャッシュやファイルに保存しないのはなぜですか?
Proxyパターンについての私の理解では、 concretionsとconcretions を備えたある種のService
インターフェースがあるということです。何らかの理由で にアクセスできないため、インスタンスに対してコーディングし、フレームワークがプロキシをサービスの実際のインスタンスにリンクできるようにします。2 つの問題のみ:ProxyService
RealService
RealService
ProxyService
Service
とにアクセスできるときの例は 1 つも思いつきませんが、そうではありProxyService
ませRealService
ん。
これはMementoパターンとどう違うのですか? Memento の定義についての私の理解では、オブジェクトの状態を保存するために使用されるということです。これは、プロキシが実際に行っていることです。そうでない場合は、Memento と Proxy の違いを説明してください。前もって感謝します!
c# - 複数の変数に対する元に戻す/やり直しの実装
元に戻す/やり直しの実装をリファクタリングしようとしていますが、その方法がわかりません。
明らかに、UndoRedoAction 子クラスのそれぞれは、異なるフィールドにアクセスするためのカスタム機能を備えていますが、これらのフィールドに対して実行する機能は同じです。これらの int をプロパティにしてプロパティ名を渡す以外に (私はやりたくない、魔法の文字列など)、すべてを実行する子クラスの束を作成する代わりに、これらを汎用の UndoRedoAction に結合するクリーンな方法はありますか?異なる変数に対するまったく同じアクション?
この問題を解決する Memento パターンの使用を検討しましたが、これほど小さなシナリオではやり過ぎのように思えますし、心配する必要のある一方通行のアクションもありません。Memento パターンが本当に役立つのはこのような場合です。
ありがとう。
明確化:これらの UndoRedoAction オブジェクトは、元に戻すキャッシュとして機能する Stack<UndoRedoAction> 内に配置されます。より具体的には、2 つのスタックがあり、1 つは取り消し用、もう 1 つはやり直し用であり、一方からポップされたアクションは他方にプッシュされます。さらに、Zaid Masud の回答に応じて、変数は必ずしもすべて int ではなく、すべて同じオブジェクト型でさえありません。私の例では、簡単にするためにそれを行っただけです。