更好的编程 - 方法中的通用或多个代码

时间:2013-07-20 19:43:32

标签: c# function parameter-passing adapter generic-programming

我很奇怪,你需要做一些代码,比如每个方法。 我知道每个人都有另一种“编程风格”,每个人都喜欢另一种方式来做某事 但是例如我现在在某些类(网络摄像头的设置)上写一些适配器,我可以在其中设置颜色模式,曝光,增益等。在每​​种方法(设置更改)我需要:
1)停止摄像头
2)设置参数 !!这只是另一个代码的一步!!
3)再次创建相机实例
4)启动摄像头

我在这里看到了两种方法如何做到这一点:
1)可能是“丑陋”的书面复制和粘贴代码

StopCam();
_wCamDev.Gain=20; // COMMANDS TO SET DEFINED PARAMETER, FOR EXAMPLE GAIN
CreateCam();
StartCam();

您可以在每个方法中使用此代码,只更改第二行(_wCamDev.Gain=20;)。 它非常肯定这段代码对另一个程序员的作用是什么,在2年之后更容易理解这些序列正在做什么。但另一方面,由于多个复制和粘贴代码,此代码不能正确编写(至少对我而言)。
2)你可以使用“参数中的泛型函数”之类的东西,你可以使用类似的东西:

public void refreshCam(Func<T,out>){
   StopCam();
   CHANGE_PARAMS_BY_GEN_FUNCTION;
   CreateCam();
   StartCam();
}

泛型调用函数将设置参数,您可以使用更难的代码来理解,但没有多个序列(复制和粘贴代码),并且您可以轻松地在每个方法中使用params调用这个refreshCam()你可以用其他方法指定它们。

您更喜欢什么“代码”?为什么?是否有其他(更好)的方法如何做到这一点? 甚至可以通过参数发送泛型函数吗? 我认为适配器设计最重要的是patern如何正确编写它。

1 个答案:

答案 0 :(得分:0)

您可以考虑实施Template Method Pattern。您创建一个基类来完成所有常规工作(在某些DoIt方法中),并将增益设置委托给需要由所有子类实现的抽象方法(SetGain)。

这看起来有点像矫枉过正,但是如果你选择好子类的名称,可能会更清楚代码应该做什么。
在像C#这样的现代语言中,这种模式可以很好地使用lambda或委托或Func&lt;&gt;来实现。正如@ X.L.Ant建议的那样。