功能命名:ActionIfCondition()

功能命名:ActionIfCondition()

问题描述:

我经常需要使用一个函数来执行和操作X是条件Y被设置。命名这种功能的最佳方式是什么?功能命名:ActionIfCondition()

我不想重复如果声明,因为它们可能很复杂。

举例来说,如果我想如果一个属性被设置为修剪一个字符串,函数可以被命名为:

  • 无效TrimIfOptionSet(串) - 太笨重,尤其是如果条件复杂
  • bool TryTrim(string) - 没有提到外部条件,我希望它只考虑参数。
  • 无效ConditionalTrim(串) - 有点冗长

是否有这种情况用C#/。NET,或任何类似语言的任何约定。?

给定的约束,我会选择TrimIfOptionSetTrimIfNeeded

  • TryTrim感觉就像它会总是运行TRIM操作(在try块),这是不一样的,因为只有在需要时
  • ConditionalTrim运行太长 - 读者的眼睛留在“有条件的”,永远不要“修剪”

试着这么做:

if(IsComplexCondition(complexData)) 
{ 
    DoThing(otherData); 
} 

你一般不想夫妇与操作的条件,因为你正在做一个单一的功能捕捉在这一点上太多的语义信息。这是“做更多的事情。”相反,如果您有复杂的条件,请在函数中捕获该条件以封装它。

如果你指的是更为常见的情况,如在功能上的参数验证,可以考虑像fluent parameter validation。如果你没有做类似参数验证的事情,那么我可能会质疑为什么它在每个函数的顶部,而不是在一个共同的位置捕获或在系统边界执行一次。

我不认为有命名一般ActionIfSomething()情况下,仅仅是因为它不是一般很好地解决一个问题一个很好的答案。我可能只是说让函数调用Action()并将其记录在文件中,或许在<remarks>中,只有当Something为真时才执行动作。如果Action属于函数中的条件,那么它只在该条件的上下文中有意义,因此在函数名称中重新指定它是多余的。

+0

好的论点,我原则上同意,但不实际如果4行重复*非常*经常(例如在每个公共职能之上)。条件+动作耦合味道不好,但如果我必须封装它,那么最好的名字是什么? – dbkk 2009-06-30 20:56:14

+1

嗯,如果你在每个函数的顶部都做了,请查看.Net 4中的代码合同。我假设你在谈论parm验证。另一种选择是使用“流畅接口”来使参数检查更具可读性。 – 2009-06-30 21:02:01

这可以通过使用访问器解决?

public class MyObject 
{ 
    private string _content = string.Empty; 

    public bool Trim { get; set; } 

    public string Content 
    { 
      get 
      { 
       return this.Trim ? _content.Trim() : _content; 
      } 
      internal set 
      { 
       if (string.IsNullOrEmpty(value)) 
        _content = string.Empty; 
       else 
        _content = value; 
      } 
    } 
} 

无论何时访问内容,这将采取由修剪布尔值确定的操作。我已经受保护的set访问,因为它可能有点ambigious而微调是真实的,当内容的值设置发生了什么,并检查试图设置为null内容的特殊情况。良好的文档应涵盖这些情况。