功能命名:ActionIfCondition()
问题描述:
我经常需要使用一个函数来执行和操作X是条件Y被设置。命名这种功能的最佳方式是什么?功能命名:ActionIfCondition()
我不想重复如果声明,因为它们可能很复杂。
举例来说,如果我想如果一个属性被设置为修剪一个字符串,函数可以被命名为:
- 无效TrimIfOptionSet(串) - 太笨重,尤其是如果条件复杂
- bool TryTrim(string) - 没有提到外部条件,我希望它只考虑参数。
- 无效ConditionalTrim(串) - 有点冗长
是否有这种情况用C#/。NET,或任何类似语言的任何约定。?
答
给定的约束,我会选择TrimIfOptionSet
或TrimIfNeeded
。
-
TryTrim
感觉就像它会总是运行TRIM操作(在try
块),这是不一样的,因为只有在需要时 -
ConditionalTrim
运行太长 - 读者的眼睛留在“有条件的”,永远不要“修剪”
答
试着这么做:
if(IsComplexCondition(complexData))
{
DoThing(otherData);
}
你一般不想夫妇与操作的条件,因为你正在做一个单一的功能捕捉在这一点上太多的语义信息。这是“做更多的事情。”相反,如果您有复杂的条件,请在函数中捕获该条件以封装它。
如果你指的是更为常见的情况,如在功能上的参数验证,可以考虑像fluent parameter validation。如果你没有做类似参数验证的事情,那么我可能会质疑为什么它在每个函数的顶部,而不是在一个共同的位置捕获或在系统边界执行一次。
我不认为有命名一般ActionIfSomething()
情况下,仅仅是因为它不是一般很好地解决一个问题一个很好的答案。我可能只是说让函数调用Action()
并将其记录在文件中,或许在<remarks>
中,只有当Something
为真时才执行动作。如果Action
属于函数中的条件,那么它只在该条件的上下文中有意义,因此在函数名称中重新指定它是多余的。
答
这可以通过使用访问器解决?
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内容的特殊情况。良好的文档应涵盖这些情况。
好的论点,我原则上同意,但不实际如果4行重复*非常*经常(例如在每个公共职能之上)。条件+动作耦合味道不好,但如果我必须封装它,那么最好的名字是什么? – dbkk 2009-06-30 20:56:14
嗯,如果你在每个函数的顶部都做了,请查看.Net 4中的代码合同。我假设你在谈论parm验证。另一种选择是使用“流畅接口”来使参数检查更具可读性。 – 2009-06-30 21:02:01