【问题标题】:Is it good practice to wrap trivial functions in wrappers?在包装器中包装琐碎的功能是一种好习惯吗?
【发布时间】:2015-09-10 13:19:56
【问题描述】:

我正在进行代码审查,我注意到开发人员已经这样做了:

UserSession.LocationId = CheckInteger(elementValue);

使用这个包装器

    private int CheckInteger(string elementValue)
    {
        int outNumber;
        int.TryParse(elementValue, out outNumber);
        return outNumber;
    }

我看不出这会给聚会带来什么。我应该退缩,还是让熟睡的狗躺下?我认为没有任何特定的公司政策涵盖这一点。

【问题讨论】:

  • 此类问题的适当网站是codereview.stackexchange.com
  • 就个人而言,我宁愿他们这样做:int.TryParse(elementValue, UserSession.LocationId),除非检查整数的规则可能会改变。
  • 如果它重复很多,也许将它移动到扩展方法会更好。但可以坚持下去
  • @PanagiotisKanavos 不,不是。一点也不。首先,这不是 OP 的代码。它也只是一个小代码sn-p。完全偏离代码审查的主题。
  • @itsbruce 他们是代码的维护者。但是,我认为即使对于 CR,这个问题也可能过于基于意见。这里的上下文也很少。 CR 喜欢上下文。

标签: c#


【解决方案1】:

他们是睡狗还是狼?此代码有效地丢弃非整数值,并为失败的情况返回 0。

这可能合适,也可能不合适,但名称肯定会产生误导 - 根本不执行任何检查。错误被简单地丢弃。这几乎相当于隐藏异常。

当未检测到无效值并且在意想不到的地方设置了 0 时,这可能伤害您。

这样的方法应该至少重命名为GetIntegerOrDefault,这样它就会在出错时返回一个默认值。

您还应该确保 0 是 LocationId 的有效值或至少是预期的默认值。否则你可能会遇到一些很难诊断的错误。

我在一个证券交易所应用程序中遇到了错误,该错误会发送 -100% 的投资组合绩效比率,因为下面 10 个级别的某个人决定在无效汇率值上返回 0,而 5 年后没有人记得。

【讨论】:

    【解决方案2】:

    鉴于在这种情况下您可以写 int.TryParse(elementValue, out UserSession.LocationId) 我会说这不是一个好主意。

    现在,如果您需要为其添加日志记录或以一致的方式处理特殊情况/错误,那么请务必这样做。

    【讨论】:

    • LocationId 看起来像一个属性,我认为您不能将属性作为out 参数传递。
    • 好点...我刚刚测试了它,对于属性,你不能。成员变量你可以,但是A property, indexer or dynamic member access may not be passed as an out or ref parameter
    猜你喜欢
    • 2016-07-30
    • 2021-05-04
    • 2021-03-30
    • 2020-01-01
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多