2011-05-23 51 views
5

所以我有一個數據庫(SQL)管理程序,我一直在處理我公司銷售的物品。對於程序的主要部分,在用戶使用某些自定義控件時會更新項目信息。這一切都很好。但是現在我正在添加/刪除/複製項目的程序的更高層部分。這不能是「即時更新」,就像編輯項目信息一樣,因爲這太容易讓事情變得非常糟糕。所以我基本上想在這裏爲它們設置一個文件 - >保存類型的交易。我如何看到這個工作是在列表中創建所有的sql命令,然後在保存時運行它們。排隊的命令

這裏可用的功能是添加一個新項目,刪除一個項目,從另一個項目複製和重命名。

因此,這將是一個列表,如:

insert... 
update... 
update... 
delete... 
update... 
etc. 

這將貫穿和執行所有的命令。我遇到的問題是我已經擁有一個具有處理所有這些功能的方法的類。我想不出一種方法來調用隊列中的所有方法,並且重寫所有在另一個類中的sql語句對我來說似乎很愚蠢。有沒有辦法,我能記住的東西就像一個列表的方式:

item.Rename() 
item.ChangeSize() 
item.Delete() 

我覺得像我這樣得太多......或者也許underthinking ......我不知道。

回答

6

你在找什麼是Command Pattern

基本思想是你有一個ICommand接口,它有一個方法Execute()
然後您實現多個ConcreteCommand,例如,具有參數化構造函數或屬性NewNameRenameCommand

不要忘記處理異常,並可能實現一個撤消方法,如果這些可能發生。我不太瞭解你的應用程序在這裏做出假設。

public interface ICommand 
{ 
    void Execute(); 
} 

public class RenameCommand : ICommand 
{ 
    private string newName; 

    public RenameCommand(string newName) 
    { 
     this.newName = newName; 
    } 

    void ICommand.Execute() 
    { 
     item.rename(newName); 
    } 
} 
+1

非常感謝。剛剛測試了一下,我可以看到它會非常出色地工作。比我預期的要容易得多。 – Nick 2011-05-23 13:23:55