2011-06-16 36 views
0

我正在開發的系統的核心目標是太笨重了。問題在於它可以通過許多不同的方式採取行動。您可以:如何構造許多類似事件的方法?

  • 取消它
  • 否認
  • 丟棄
  • 賣它
  • 拆分它
  • 到期。
  • ...,還有更多。

我正在考慮把那些類事件的方法從類中分解出來,並使它更通用一些,就像命令模式一樣。但大多數方法有不同的參數,所以使用像Run()Execute()這樣的解決方案可能會成爲一個問題?

任何想法如何構造這個,使其靈活和簡單的添加新的命令,或行動或你想要稱之爲什麼? (因爲沒有聽衆,所以我不會稱它們爲真實事件)。

回答

0

你能在你的構造函數中傳遞你的命令所需的參數嗎?這樣,你可以有一個無參數的命令。

class SellItCommand : ICommand { 

    private decimal price; 

    SellItCommand(decimal price) { 
    this.price = price; 
    } 

    void Execute() { 
    // Do whatever needs to be done with in the sell command using this.price 
    } 
} 
+0

是的,我在考慮這個。所以我最終會得到很多小的不可變類做一件事情?任何優點/缺點與此? – ciscoheat 2011-06-16 20:06:00

+0

好吧,缺點是有爆炸和專業的風險,每個班級做一件事情,維護起來會更容易。如果沒有更多關於系統的知識,很難判斷是否有任何需要注意的命令模式。 – Martin 2011-06-16 20:34:32

0

封裝參數,作爲單個參數:

public class SellCommand: Command { 
    Product OwnerProduct; 

    ProductCommand (AOwnerProduct) 
    { 
    this.OwnerProduct = AOwnerProduct; 
    } 

    public override void Execute(KeyValueArray Parameters) 
    { 
     double Price = (double)Parameters.ValueofKey("price"); 
     // do something else 
    } 
} 

public class BuyCommand: Command { 
    Product OwnerProduct; 

    ProductCommand (AOwnerProduct) 
    { 
    this.OwnerProduct = AOwnerProduct; 
    } 

    public override void Execute(KeyValueArray Parameters) 
    { 
     double Cost = (double)Parameters.ValueofKey("cost"); 
     // do something else 
    } 
} 


public class Product { 
    public void AnyMethod() 
    { 
    KeyValueArray Parameters = new KeyValueArray Parameters(); 
    KeyValueArray.Add("price", "12.5"); 
    } 
} 

其僞的排序,你可能想使用符合您的編程框架,集合庫。