事件的好處 實現對修改的封閉,對擴充套件的開放

2021-09-22 13:11:48 字數 1084 閱讀 8254

事件是這樣的,我覺得用事件來做這事比較好,它很好的遵循了「開閉原則」,當然這並不是最重要的,最重要的應該是它更符合程式開發的原則。

場合:乙個訂單處理問題,乙個訂單的產生可能由多種途徑生成,a產品走a產品的訂單處理過程,完成後顯示a產品的訂單成功頁,b產品走b產品的購買流程,完成後,顯示b產品聽訂單成功頁,當然陸續可能會有c產品,d產品等等

實現:不考慮訂單處理業務,只考慮訂單成功頁的顯示

解決1:由a產品頁向訂單統一處理程式傳遞引數,在訂單統一處理程式裡去判斷引數,然後顯示資訊

解決2:a產品訂閱乙個事件,去返回訂單成功後顯示的頁面,在訂單統一處理程式裡觸發這個事件,然後自己顯示指定資訊

從上面兩解決解決方法中,可以看到「方法2」更加靈活,更符合物件導向的原則,「原則」不是說說而以的,它確實有它的意思,有它的好處,當有c產品,d產品出現時,只需要修改c和d對應的部門就可以了,而「單統一處理程式」不需要做修改,而「方法1」則需要修改「單統一處理程式」,這樣做下去會使你的程式的維護性和擴充套件性大打折扣。

**如下:

///

/// 返回一條特定的訊息 

///

public class returnmessage 

else 

return "檢視已買到的課程"; 

} #endregion

} #region delegates 

///

/// 返回乙個字串訊息的委託 

///

public delegate string returnmsgeventhandler(); 

#endregion

在主程式中觸發時可以這樣:

viewdata["msg"] = returnmessage.onreturnmsg();

在訂閱時可以這樣:

returnmessage.returnmsg += new returnmsgeventhandler(returnmsg_returnmsg);

string returnmsg_returnmsg() 

也可以使用匿名方法,寫在一行:

returnmessage.returnmsg +=  delegate();

事件的好處 實現對修改的封閉,對擴充套件的開放 續

首先,為了只有返回值的委託來說,我們是不用再去定義它的,完成可以用.net提供的func這個委託來實現 public class returnmessage returnmessage.returnmsg delegate 不要以為這樣省記憶體空間,它只是 上精簡了,事實上系統為我們自動建立了乙個方...

對 infotype 的修改

tables pernr.infotypes 0002.data return struc type bapireturn1,record key type bapipakey.parameters natio o like p0002 natio default de natio n like p...

ABAP實現對變式的修改

有關變式的function group svar 裡面基本上包含了對變式的操作,下面有個例子可以完成對變式的修改 data i valutab like rsparams occurs 0with header line data i objects like vanz occurs 0with h...