2011-02-28 20 views
5

Aquí hay un concepto de la teoría de la normalización DB:Función "normalización"

tercera forma normal, se viola cuando un campo no es un hecho clave sobre otro campo que no son clave.

¿No tiene sentido que se aplique un concepto similar para los parámetros de función/función?


considera la siguiente función:

function validate(field, rule_name, rule_value); 

// Usage 

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

En esta función ejemplo, el tercer parámetro describe el segundo y parece no tener "actitud" hacia la primera. Se siente como una función desnormalizada en cierto modo.

No sé si estoy formulando este derecho, pero puedo observar una analogía entre los nombres de tabla y los campos de tabla, en la base de datos, y los nombres de función y parámetros de función.

Si tal analogía tiene sentido, ¿no tendría sentido para los diseñadores de funciones tomar prestados conceptos de la teoría de normalización de DB?

Respuesta

3

Para mí que la función sugiere algún tipo de concepto "regla" que está parametrizada por un valor. Podría hacerse más genérico si pudiera tener una lista de dichos pares de reglas/valores y validar haciendo un bucle sobre todas las reglas.

Visto de otro modo, nada parece estar perdido si se interpretan las funciones de la siguiente manera:

function validate(field, rule); 

// Usage 

validate("password", MinLengthRule(6)); 
validate("password", RegExRule("/^\S+$/")); 
+0

Estoy tan contento de que hayas publicado esto porque ahora sé que no soy solo yo el que siente que hay algo mal con la función. Pero, ¿qué es lo que hace que se sienta mal? ¿Qué "regla" viola? –

+2

@Emanuil Si tuviera que apuñalarlo, la función original viola la separación de preocupaciones: el método @ MadKeithV permite que la función 'validate' tenga su comportamiento de validación real inyectado, lo que lo hace altamente reutilizable. El original, incluso con los ejemplos simples dados, requiere múltiples firmas para acomodar reglas en diferentes tipos de datos. –

+0

@djacobson - sí, gracias, eso es lo que estaba en mi mente. La validación se convierte en una función única con una firma, y ​​una "regla" se convierte en una abstracción que se puede extender fácilmente para procesar cualquier cadena de "campo" y devolver un valor booleano para indicar si la cadena pasa la validación o no. –

0

No estoy de acuerdo. El 6 no describe min_length. Solo ambos crean algo significativo.

Los caracteres basura no significan nada hasta que se da cuenta de que es una expresión regular.

+2

La cosa es 'rule_name' y' rule_value' tienen una relación especial. La forma en que se interpreta 'rule_value' está determinada por el valor de' rule_name'. Como puede ver, el valor es un int en el primer ejemplo de uso y un regex en el segundo. –

1

considerar la variante de programación orientada a objetos de su ejemplo, al utilizar el patrón de diseño Estrategia. En ese caso, sería natural (para mí, al menos) que el nombre de la regla sea un atributo de la clase Rule, que respaldaría su idea.

+0

Ese es un ángulo muy interesante sobre el tema. –

+0

Veo que @MadKeithV también considera el uso de un objeto de regla. – Raedwald

Cuestiones relacionadas