我发现我很难为事件设计动作枚举。
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 {<...>}
您认为哪种方法最好?
答案 0 :(得分:2)
你想做什么?你打算用什么枚举?你的第一个例子对于很少的组合可能没问题,而第二个例子会更复杂但更清晰,更容易扩展。
我的猜测是你希望能够显示计算状态,并且可能在例如国家中采取行动。错误处理。您可以考虑使用State或State Machine模式而不是枚举,以避免在枚举上显示大量的switch语句。
答案 1 :(得分:2)
在您提供的枚举的两个选项中,我将使用第二组枚举。
为什么,当你跨越(文字繁殖)状态时,你会想出一个大的增长模式。如果您希望将来添加状态或功能,则不再添加一个项目,而是添加1xM或Nx1项目。对于此类问题的其他参考,请参阅 Martin Fowler的预订重构和对象层次纠缠。
现在对于事件args,使用通用EventArgs并在对象中为其提供操作和状态。不要创造比你更多的东西,它会减少你创造的头痛的数量。
答案 2 :(得分:0)
这取决于你如何设计你的结构......对我来说,事件应该是不同的,但是应该尽量不要使用更多的EventArgs,例如就像你正在使用一个失败的一个行动等.... 而是尝试将最少量的事件参数作为其唯一的数据传递机制......
现在关于枚举部分我不能完全接受你的场景....为什么你想要这么多不同的枚举?
如果你打算用它作为多个事件的替代品而不是...如果我是你,那么我会参加活动......但是如果你的结构需要大量的事件,那就说10个或者更多的去混合事件与enum的混合作为最小事件args ...如果10个事件减少事件为3个4或5个枚举