在函数参数中挂钩以适应未来的数据?

时间:2011-04-14 20:15:37

标签: c# .net oop frameworks

我必须用一些我还不知道的东西来验证数据。我想在函数参数中提供一些占位符,以便支持这些对象。

当前

Execute(start_time, end_time, DataSet, some_other_data_hook)

目前,我已将此挂钩实现为字典,以便人们可以将数据的名称放在列表中

Dictionary<name_of_the_data,List<value>> some_other_data_hook;

这看起来很丑陋,我想不出更好的方法来解决这个问题。

2 个答案:

答案 0 :(得分:3)

我认为更好的方法是只设计你现在需要的东西。即使你“知道”并且领域专家和企业主承诺会有更多的规则,如果他们现在不在这里,也不要试图设置占位符。

部分原因是维护方面,您的程序集中不应包含任何未引用/未使用的代码。它会导致可维护性问题,因为您不确定某人是否正在使用它。

另一个方面是你现在要消耗的能量来定义未定义的东西。也许一个未来的钩子是持续时间,所以你计划它,只为产品所有者决定持续时间不是一个好主意。最后,您将构建一些您可能不需要的东西。

确保方法易于修改,不会导致重大更改,然后只为今天需要完成的操作设置挂钩。

将其视为构建计算机的人,您不希望他们在主板上丢弃一大堆额外的焊料,因为未来可能需要新设备。代码也是如此,如果你没有定义的需求,现在就不要编码。

答案 1 :(得分:1)

“有些东西”很模糊。是否适合传递接口?例如:Execute(start_time, end_time, DataSet, IValidationRule)其中IValidationRule是:

public interface IValidationRule
{
    bool IsValid(DataSet data);
}

这将为您提供最大的灵活性,以便在需求发生变化时插入不同结构的不同“验证挂钩”。我可能会创建自己的返回值类型,如ValidationResult或类似的东西。如果您可以就所需行为强制执行合同,则可以围绕结构歧义进行编码。

如果你没有丝毫的线索,那么“钩子”的结构或行为会是什么样子,那么我同意taylonr。你不能在左侧场中模拟远处的东西。