事件是這樣的,我覺得用事件來做這事比較好,它很好的遵循了「開閉原則」,當然這並不是最重要的,最重要的應該是它更符合程式開發的原則。
場合:乙個訂單處理問題,乙個訂單的產生可能由多種途徑生成,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...