最佳实践:事件的动作枚举用法

时间:2009-05-18 12:01:26

标签: c# .net 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 {<...>}

您认为哪种方法最好?

3 个答案:

答案 0 :(得分:2)

你想做什么?你打算用什么枚举?你的第一个例子对于很少的组合可能没问题,而第二个例子会更复杂但更清晰,更容易扩展。

我的猜测是你希望能够显示计算状态,并且可能在例如国家中采取行动。错误处理。您可以考虑使用StateState Machine模式而不是枚举,以避免在枚举上显示大量的switch语句。

答案 1 :(得分:2)

在您提供的枚举的两个选项中,我将使用第二组枚举。

为什么,当你跨越(文字繁殖)状态时,你会想出一个大的增长模式。如果您希望将来添加状态或功能,则不再添加一个项目,而是添加1xM或Nx1项目。对于此类问题的其他参考,请参阅 Martin Fowler的预订重构和对象层次纠缠。

现在对于事件args,使用通用EventArgs并在对象中为其提供操作和状态。不要创造比你更多的东西,它会减少你创造的头痛的数量。

答案 2 :(得分:0)

这取决于你如何设计你的结构......对我来说,事件应该是不同的,但是应该尽量不要使用更多的EventArgs,例如就像你正在使用一个失败的一个行动等.... 而是尝试将最少量的事件参数作为其唯一的数据传递机制......

现在关于枚举部分我不能完全接受你的场景....为什么你想要这么多不同的枚举?

如果你打算用它作为多个事件的替代品而不是...如果我是你,那么我会参加活动......但是如果你的结构需要大量的事件,那就说10个或者更多的去混合事件与enum的混合作为最小事件args ...如果10个事件减少事件为3个4或5个枚举