簡體   English   中英

最佳實踐:事件的動作枚舉用法

[英]Best-Practices: action enum usage for events

我發現自己很難為事件設計動作枚舉。

f.ex制造計算處理器。

所以我應該有這樣的枚舉?

public enum CalculatorCoreActions
{
    ProcessStarted,
    ProcessFinished,
    ProcessFailure,
    ProcessFailed,
    SubstractionStarded,
    SubstractionFinished,
    SubstractionFailure,
    SubstractionFailed,
    <etc.>...
}

或者我應該做兩個枚舉?,f.ex:

public enum CalculatorAction
{
    Process,
    Substraction,
    Division
}

public enum CalculationActionResult
{
   Started,
   Finished,
   Failure,
   Failed
}

甚至我應該創建一個新的類?

public class CalculatorActionEventArgs : EventArgs {<...>}
public class CalculatorActionFailedEventArgs : EventArgs {<...>}
public class etc... : EventArgs {<...>}

您認為哪種方法最好?

你想做什么? 您打算將枚舉用於什么? 您的第一個示例對於很少的組合可能是可以的,而第二個示例將更復雜,但更干凈,更易於擴展。

我的猜測是,您希望能夠顯示計算狀態,並可能在例如錯誤處理中對狀態進行操作。 您可能會考慮使用StateState Machine模式而不是枚舉,以避免枚舉上出現大量switch語句。

在您提出的兩個枚舉選擇中,我將使用第二組枚舉。

為什么呢,當您將狀態與行動進行交叉(字面上乘)時,您會想到一個大的增長模式。 如果您將來想添加狀態或功能,則不再添加一項,而是添加1xM或Nx1項。 有關這種問題樣式的其他參考,請參閱Martin Fowler的書《 重構和對象層次糾纏》。

現在,對於事件args,使用通用EventArgs並將其操作和狀態賦予對象。 不要創造比您需要更多的東西,它可以最大程度地減少您制造頭痛的次數。

這取決於您如何設計結構...對我來說,事件應該有所不同,但應該盡量不要使用更多的EventArgs,例如,像對失敗的事件使用一個那樣的ActionArgs等。事件參數是其唯一的數據傳遞機制...

現在關於枚舉部分,我還無法完全掌握您的情況...。為什么要這么多的枚舉?

如果您打算用它代替多個事件...如果我是您,那么我將去參加事件...但是如果您的結構需要大量事件,則說10個或更多事件來代替混合事件用枚舉作為最小事件參數...說在10個事件的情況下將事件減少為3個,具有4個或5個枚舉

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM