Hola

Solo disponible en BuenasTareas
  • Páginas : 9 (2181 palabras )
  • Descarga(s) : 4
  • Publicado : 18 de mayo de 2010
Leer documento completo
Vista previa del texto
El Reino Mágico

Elegir la mejor manera de manejar valores literales.

¿Cuál es la mejor manera de evitar la codificación dura literal "los valores de magia" en mis aplicaciones PL / SQL basado en?

Cada aplicación tiene su propio conjunto de "valores mágicos"-literales que expresan algunas características de dicha solicitud. Estos valores son en general que se hace referencia en muchoslugares en el código. A veces los valores se fijan para el curso de la vida de una solicitud, a veces se cambian periódicamente (con cada nuevo año, por ejemplo).

Veamos un ejemplo. Supongamos que una regla en mi solicitud es que el salario máximo permitido en la tabla de empleados es de $ 1.000.000. Entonces podría hacer referencia a este valor en un subprograma:

IF l_new_salary > 1000000THEN
RAISE_APPLICATION_ERROR (-20001,
'Maximum salary of 1000000 exceeded!');
END IF;

La mayoría de los programadores saben que hacer referencia a un valor mágico de esta manera es una mala idea, aquí tengo "no modificable" el literal (1000000) directamente en mi subprograma y más de una vez. Eso es problemático, porque es inevitable que el valor va a cambiar. Cuando lo hace, yo (o, másexactamente, el equipo de desarrollo) tendrá que buscar en el código, cambiando el valor antiguo al nuevo valor.

Es por eso que todos debemos evitar esa dura de codificación de literales. Entonces, ¿cómo podemos hacer eso? Aquí hay tres posibilidades:

• Crear una constante envasados, asignar el valor a esa constante.

• Cree una función que oculta y devuelve el valor de la magia.• Almacenar y administrar el valor mágico de una tabla de base de datos.

Voy a demostrar cada uno de estos enfoques y luego terminar mi respuesta con una comparación de las opciones, así como las cuestiones que debe considerar antes de elegir su propio enfoque.

Crear una constante envasados. La técnica fundamental para evitar la codificación es difícil hacer referencia a su valor mágico porsu nombre. La forma más sencilla de hacer esto es crear un paquete y definir una constante en él para mantener el valor (o añadir la constante a un paquete existente). Aquí está un ejemplo:

PACKAGE magic_values
IS
c_maximum_salary
CONSTANT NUMBER := 1000000;
END magic_values;

Tenga en cuenta que si no incluyen la palabra clave constante en la declaración del valor de la magia,su valor será variable, lo que ciertamente no es constante.

Con este paquete se definen, ahora puedo hacer referencia a:

IF
l_new_salary >
magic_values.c_maximum_salary

THEN
RAISE_APPLICATION_ERROR (-20001,
'Maximum salary of ' ||
magic_values.c_maximum_salary ||
' exceeded!');
END IF;

Cree una función que oculta y devuelve el valor de la magia. Tambiénpuede crear una función que devuelve el valor de la magia, y yo recomendaría siempre colocando esta función dentro de un paquete. Aquí está un ejemplo:

PACKAGE magic_values
IS
/*
You cannot earn more than this
in a single year.
*/
FUNCTION maximum_salary
RETURN NUMBER;
END magic_values;

PACKAGE BODY magic_values
IS
FUNCTION maximum_salary
RETURN NUMBERIS
BEGIN
RETURN 1000000;
END;
END magic_values;

y ahora mi código de la aplicación se verá así:

IF
l_new_salary >
magic_values.maximum_salary ()
THEN
RAISE_APPLICATION_ERROR (-20001,
'Maximum salary of ' ||
magic_values.maximum_salary () ||
' exceeded!');
END IF;

Tenga en cuenta que he puesto el abrir y cerrar paréntesis "()" después dela llamada a la función. Esto es opcional, pero es una manera de auto-documento que está llamando a una función y no hace referencia a una variable o una constante.

Almacenar y administrar el valor mágico de una tabla de base de datos. Suponga que tiene muchos valores magicos en su aplicación y se preocupan por asegurar que se manejan constantemente sin ningún tipo de hard-codificación. Usted...
tracking img