功能"规范化"

Ema*_*sev 5 language-agnostic theory function function-declaration

这是DB规范化理论的一个概念:

当非关键字段是关于另一个非关键字段的事实时,违反了第三范式.

将类似的概念应用于函数/函数参数是否有意义?


考虑以下功能:

function validate(field, rule_name, rule_value);

// Usage

validate("password", "min_length", 6);
validate("password", "matches_regex", "/^\S+$/");
Run Code Online (Sandbox Code Playgroud)

在这个示例函数中,第三个参数描述了第二个参数并且似乎对第一个参数没有"态度".在某种程度上感觉就像一个非规范化的功能.

我不知道我是否正在制定这个,但我可以注意到表名和表字段,DB,函数名和函数参数之间的类比.

如果这样的比喻有意义,那么函数设计者从DB归一化理论中借用概念是否也有意义?

Jor*_*ans 3

对我来说,该函数确实暗示了某种由值参数化的“规则”概念。如果您可以拥有此类规则/值对的列表并通过循环所有规则进行验证,那么它可以变得更加通用。

从另一个角度来看,如果按如下方式解释这些函数,似乎不会丢失任何东西:

function validate(field, rule);

// Usage

validate("password", MinLengthRule(6));
validate("password", RegExRule("/^\S+$/"));
Run Code Online (Sandbox Code Playgroud)

  • @Emanuil 如果我要尝试一下,原始函数违反了关注点分离:@MadKeithV 的方法允许“validate”函数注入其实际验证行为,这使得它具有高度可重用性。原始版本,即使给出了简单的示例,也需要多个签名来适应不同数据类型的规则。 (2认同)