Функция "нормализация" - PullRequest
5 голосов
/ 28 февраля 2011

Вот концепция из теории нормализации БД:

Третья нормальная форма нарушается, когда неключевое поле является фактом о другом неключевом поле.

Разве не имеет смысла применять аналогичное понятие для функций / параметров функции?


Рассмотрим следующую функцию:

function validate(field, rule_name, rule_value);

// Usage

validate("password", "min_length", 6);
validate("password", "matches_regex", "/^\S+$/");

В этом примере функции третий параметр описывает второй и, похоже, не имеет «отношения» к первому. В каком-то смысле это похоже на денормализованную функцию.

Я не знаю, правильно ли я формулирую это, но могу заметить аналогию между именами таблиц и полями таблиц в БД, а также именами функций и параметрами функций.

Если такая аналогия имеет смысл, разве не имеет смысла для разработчиков функций заимствовать понятия из теории нормализации БД?

Ответы [ 3 ]

3 голосов
/ 28 февраля 2011

Для меня эта функция предлагает какую-то концепцию «правила», параметризованную значением.Это можно было бы сделать более общим, если бы вы могли иметь список таких пар правило / значение и проверять их путем циклического перебора всех правил.

Если взглянуть на это иначе, ничего не будет потеряно, если вы интерпретируете функции какследует:

function validate(field, rule);

// Usage

validate("password", MinLengthRule(6));
validate("password", RegExRule("/^\S+$/"));
1 голос
/ 28 февраля 2011

Рассмотрим вариант ООП вашего примера при использовании шаблона проектирования Стратегия . В этом случае было бы естественно (по крайней мере для меня), чтобы имя правила было атрибутом класса Rule, который поддержал бы вашу идею.

0 голосов
/ 28 февраля 2011

Не согласен. 6 не описывает min_length. Только оба создают что-то значимое.

Символы мусора ничего не значат, пока вы не заметите, что это регулярное выражение.

...