【问题标题】:Better programming - generic or multiple code in methods更好的编程 - 方法中的通用或多个代码
【发布时间】:2013-07-19 21:58:40
【问题描述】:

我想知道,您有一些代码需要在例如每个方法中执行。 我知道每个人都有另一种编程“风格”,每个人都喜欢另一种方式来做某事。
但是例如,我现在正在某些类(网络摄像头的设置)上编写一些适配器,我可以在其中设置例如颜色模式、曝光、增益等。在每​​种方法(设置更改)中,我需要:
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();
}

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

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

【问题讨论】:

  • 第二个,出于世界上所有的原因。首先,您只有一个地方可以修改升级刷新序列所需的日期。
  • 是的,这是第二个的好理由。现在可以在参数上编写通用函数吗?因为我发现只有参数的功能。我知道泛型是如何工作的(我从来没有在 C# 中做过,在我的生活中,3 年后我正在使用它——我从来不需要它)。所以我不确定它是否可能。
  • 查看泛型编程。毫无疑问,模块化你的代码。编写像 C# 这样的高级语言是因为我们需要抽象的通用代码。 boost.org/community/generic_programming.html
  • 感谢所有 cmets,X.L.Ant 快速回答了我所有我想要的。但在答案中,我仍然对另一个有趣或可怕(威慑)的解决方案很感兴趣 :D :]

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-29
    • 2013-01-14
    • 2017-08-19
    • 1970-01-01
    • 2018-06-21
    • 2020-11-27
    • 2013-12-01
    • 1970-01-01
    相关资源
    最近更新 更多