我的程序在串口上接收数据,收到数据后,可以用八种不同的方式解释。
如果我想在收到数据后触发事件,我应该使用一个事件并在我的自定义事件arg类中使用枚举,还是应该创建8个单独的事件?基本上我想知道创建事件的惯例是什么。
我的假设是,当一个新事件与当前事件有区别时,应该创建一个新事件,但我不确定哪个方法可以用我的例子。
编辑:为了澄清这种情况,该程序主要通过串口与设备通信,接收输入的方法如下:
我应该这样做吗?
void receive(byte[] somebytes)
{
// After checking to make sure all bytes expected are received
switch(somecase)
{
case 0: TriggerEvent(SomeEventArgs);break;
case 1: TriggerEvent(SomeEventArgs);break;
case 2: TriggerEvent(SomeEventArgs);break;
case 3: TriggerEvent(SomeEventArgs);break;
case 4: TriggerEvent(SomeEventArgs);break;
case 5: TriggerEvent(SomeEventArgs);break;
case 6: TriggerEvent(SomeEventArgs);break;
case 7: TriggerEvent(SomeEventArgs);break;
case 8: TriggerEvent(SomeEventArgs);break;
}
}
或者这个:
void receive(byte[] somebytes)
{
// After checking to make sure all bytes expected are received
switch(somecase)
{
case 0: Event0(LessEventArgs);break;
case 1: Event1(LessEventArgs);break;
case 2: Event2(LessEventArgs);break;
case 3: Event3(LessEventArgs);break;
case 4: Event4(LessEventArgs);break;
case 5: Event5(LessEventArgs);break;
case 6: Event6(LessEventArgs);break;
case 7: Event7(LessEventArgs);break;
case 8: Event8(LessEventArgs);break;
}
}
答案 0 :(得分:1)
这取决于你正在做什么以及你的计划的更大背景。这可能是一个风格问题,但可以这样想:如果你处理常规变量而不是事件,将它们分成八个不同的类是否更好,或者让它们全部使用它们会更好但是有八个不同的值?
答案 1 :(得分:1)
这两种解决方案都有效,但我认为举办一次举重活动要容易得多。
如果您只有一个活动,则只需在班级中定义一个唯一的EventArgs<T>
发布单个活动,并处理单个活动。
决定做什么的所有逻辑都在“客户端类”中,这些逻辑可以归结为事件。这样可以更容易地进行测试和调试。
所以你需要:
如果你这样做,很容易创建一个单元测试来测试调度程序方法,并且不同的单元测试来测试这8个方法中的每一个。
您的“服务器类”依赖于外部资源很简单。这很重要,因为在8个事件之间选择的调度员调试测试很困难。
想想另一个实现,使用8个事件:你会得到一个更混乱,更难以测试和调试代码。
作为旁注,我建议您阅读有关"C# Event Implementation Fundamentals, Best Practices and Conventions"
的详尽文章答案 2 :(得分:1)
我个人的偏好是'少即是多'的方法,我会创建一个事件,将Enum传递给你所描述的事件。
我会将此与.NET库中的KeyPressDown
进行比较以进行桌面开发。没有AKeyPressed
,BKeyPressed
,EnterKeyPressed
- 它被封装在一个方法中,以实现简洁直观的实现。
答案 3 :(得分:0)
不知道你的程序究竟是什么样的,有点难以判断。但我建议你创建8个单独的事件来保持概述,并防止使用事件处理程序方法。