2009-04-15 13 views
2

私はたくさんの異なるフォームとユーザーコントロールでwinformsアプリケーションを開発しています。フォーム/コントロールが終了しているとき、およびアプリケーションが終了しているときに、現在のフォーム/コントロールに保存されていない変更があることをユーザーに通知するための実装が推奨されるパターンはありますか?保存されていない変更のパターン

答えて

1

そのオブジェクトに組み込まれているいくつかの良いエンティティトラッキングを持っているので、私はORMのためLLBL世代のプロを使用しています。 私はかなりうまくいくように見えました。私は、各フォームに見エンティティのコレクションを持っている、と私はCloseForm()メソッドを持っている私のベースの制御/フォームで

public interface IClosingNotification 
{ 
    /// <summary> 
    /// True if there is a dirty entity (or a dirty entity in the collection) present 
    /// </summary> 
    bool DirtyEntityPresent { get; } 
    /// <summary> 
    /// Register an entity to be watched for changes 
    /// </summary> 
    /// <param name="entity"></param> 
    void RegisterForClosingNotification(IEntity entity); 
    /// <summary> 
    /// Register a collection to be watched for changes 
    /// </summary> 
    /// <param name="collection"></param> 
    void RegisterForClosingNotification(IEntityCollection collection); 
    /// <summary> 
    /// Returns true if the form should close without any notification 
    /// </summary> 
    /// <returns></returns> 
    bool ShouldClose(); 
} 

: は、私は私のベースのユーザーコントロールとベースフォームを実装する新しいインターフェイスを作成しましたこれらのクラスでは、フォームが終了するときに使用します。 私のフォームでは、オブジェクトを作成するたびに閉じる通知を登録することができます。 RegisterForClosingNotification(MyCustomer);

このシナリオではうまくいきます。

1
  1. メメントは取り消し可能な変更をカプセル化する方法です。

    コミットされていないメモインスタンスのログを保存できます。

    しかし、それは通常は複雑です。

  2. 通常、が最適です。

    アプリケーションには、「すべての変更が保存されました」、「未保存の変更」という2つの「変更」状態があります。

    各ステートには、「変更」および「保存」メソッドに基づく移行規則があります。

    • 「保存されたすべての変更」の実装は何もしません。

    • 保存されていない変更の実装では、状態が「すべての変更が保存されました」に設定されます。

    • 保存されたすべての変更の実装 "変更"は、状態を未保存の変更に設定します。

    • 「変更」の未保存の変更の実装では何も行われません。

関連する問題