Desarrollo de aplicaciones conducidas por datos

Desarrollo de aplicaciones conducida por bases de datos

 

Desarrollo de aplicaciones y El código rígido

Nos adentramos en el desarrollo de aplicaciones y cuando escribimos código, independientemente del lenguaje de programación que se utilice, la primera opción, la mas “plana”, aunque la que genera mas texto, es la del “código rígido”.

desarrollo de aplicaciones

El código rígido no hace uso de variables o arreglos, por lo tanto pierde lo dinámico que esos componentes le agregan a la aplicación que se esté trabajando.

Por ejemplo, si se quiere escribir en pantalla la palabra “Hola”, 5 veces, podriamos escribir rigidamente (php):

  • echo “Hola”;
  • echo “Hola”;
  • echo “Hola”;
  • echo “Hola”;
  • echo “Hola”;

Agregando dinámica: Las variables y arreglos y los ciclos

Claro está que la programación rígida, extiende la cantidad de texto, aumenta las posibilidades de errores, hace la aplicación “pesada” en terminos de almacenamiento, uso de memoria, procesador, etc.

Las variables y arreglos, vienen a agregar dinámica y flexibilidad al código que generemos y por tanto, al desarrollo de aplicaciones.

Los ciclos nos permiten repetir comandos un numero determinado de veces o hasta que alguna condición se cumpla.  Siguiendo el ejemplo anterior, podriamos producir el mismo resultado en dos formas (usando el ciclo “FOR”)

Genera una variable de control del ciclo, pero los valores minimo y maximo son fijos. Genera una variable de control del ciclo “$i”, y define variables para el valor inicial “$ini” y para el valor final “$fin”
 for ( $i = 1; $i<6; $i++ ) { echo “Hola”; }  $ini=1;

$fin=5;

for ( $i = $ini; $i<=$fin; $i++ ) { echo “Hola”; }

La segunda opción es un poco mas extensa, pero permite controlar los valores de inicio y fin, que podrían variar de acuerdo a lineas previas de código, o ser el resultado de algun cálculo especifico.

Almacena los valores de variables en bases de datos

Ahora bien, ¿que tal el valor que se le va a asignar a una variable, proviene de un campo de una tabla almacenada en una base de datos? ¿qué ventajas tendría esto?

motores de bases de datos

Una de las principales ventajas para el desarrollo de aplicaciones, es que al almacenar los posibles valores de las variables en bases de datos, es que reduce al mínimo el mantenimiento posterior del código y en muchas ocaciones lo elimina del todo.  Cuando se quiere variar el valor de la variable, ya no es necesario editar el código y volver a compilar la aplicación, basta con actualizar el dato en la base de datos.

En el caso del ejemplo anterior podriamos tener el siguiente escenario:

  • Tabla: “Valores”
  • Campos: id (int, pk), inicial (int), final (int), texto (varchar)
  • Records:

tabla para generar ciclos for

Esta tabla contiene los valores para 5 casos, valores que pueden ser cambiados en cualquier momento, incluso se podrán agregar o eliminar registros.  Estos cambios pueden ser realizados directamente por el usuario final, si se le provee de una pantalla de mantenimiento de información adecuada.

 

Una rutina de código conducido por datos para el ejemplo anterior, utilizando la tabla descrita, sería como sigue.  Asumimos que utilizamos una base de datos MS SQL Server y que ya establecimos la conexión requerida (Nota: pueden haber errores en la sintaxis, el objetivo es ilustrar el uso de tablas y datos para controlar variables y ciclos):

$sql = "SELECT * FROM valores;";
$result = mssql_query($sql);

while ($row = sqlsrv_fetch_array($result)) {
    $ini=$row["inicial"];
    $fin=$row["final"];
    $texto=$row["texto"];
    for ( $i = $ini; $i<=$fin; $i++ ) { echo $texto; }
}

Este simple codigo va a producir 5 “Hola”, 17 “Adios”, 18 “Saludos”, 2396 “Risa” y 28 “Almuerzo”

Lo interesante es que si el usuario final quisiera, cambiar el texto “Saludos” por “Naranjas”, ya no tendrá que pedirle al programador que cambie la rutina, lo único que tendrá que hacer es cambiar el dato y listo, los 18 “Saludos”, se cambiarán por 18 “Naranjas” la próxima vez que ejecute el mismo código.

Ejemplo: menu de opciones

Un ejemplo práctico, parte de cualquier desarrollo de aplicaciones es un menú de opciones por medio del cual el usuario final seleccionaría la pantalla que desea trabajar.

menu de opciones

Este menú lo podriamos construir en forma “rígida” utilizando HTML y CSS por ejemplo, de la siguiente manera (la hoja de estilos, no se ilustra acá, pues nuestro enfoque es la creación de los textos de cada opción del menú):

<html>

<header>

<link rel=”stylesheet” type=”text/css” href=”menu.css”>

</header>

<body>

<nav>

<ul class=nav>

<li><a href=#>Home</a></li>

<li><a href=#>Tutorials</a>

<ul>

<li><a href=#>Photoshop</a></li>

<li><a href=#>Illustrator</a></li>

<li><a href=#>Web Design</a></li>

</ul>

</li>

<li><a href=#>Articles</a></li>

<li><a href=#>Inspiration</a></li>

</ul>

</nav>

</body>

</html>

Ahora bien, utilizando la técnica descrita, trabajaremos con una tabla con la siguiente estructura

  • id (int)
  • detalle (varchar)
  • padre (int)

Puede agregarse una columna de “orden” para marcar el orden de aparición de las opciones.

Para el ejemplo que estamos siguiendo, quedara así:

tabla para menu de opciones

La rutina que se genere, deberá ser capaz de:

  1. Leer todas las opciones existentes en la tabla (registros), el numero es desconocido puesto que queda en poder del usuario insertar o eliminar registros, claro está, la tabla debera contar con las correspondientes reglas de validacion respectivas, de manera que sus datos no sean inconsistentes.
  2. Crear el codigo HTML con las etiquetas y marcadores necesarios para que la hoja de estilos asociada se encargue de formatear el menú.

La siguiente rutina se encargará de construir los dos primeros niveles del menu en tiempo de ejecución a partir de los datos introducidos en la tabla “menu” almacenada en la base de datos correspondiente:

<html>
   <header>
      <link rel="stylesheet" type="text/css" href="menu.css">
   </header>

   <body>
      <nav>
         <ul class="nav">
             <?php
             $sql = "SELECT * FROM menu where padre is null;"; 
             $result = mssql_query($sql);

             while ($row = sqlsrv_fetch_array($result)) {
                $mid=$row["id"];
                $mopcion=$row["detalle"];
                echo '<li><a href="#">' . $mopcion . '</a></li>';

                $sql2= "SELECT * FROM menu where padre=" . $mid ;
                $result2 = mssql_query($sql2);

                while ($row2 = sqlsrv_fetch_array($result2)) {
                    $mid2=$row2["id"];
                    $mopcion2=$row["detalle"];
                    echo "<ul>";
                       echo '<li><a href="#">' . $mopcion2. '</a></li>'
                    echo "</ul>"
                }
             }
             ?>
         </ul>
      </nav>
   </body>
</html>

Esta rutina puede ser eficientizada aún mas, de manera que la cantidad de ciclos “while” se reduzca a 1, y trabaje a base de variables de entrada.  En efecto, pueden generarse todos los niveles del menú, con un único ciclo while.

Pueden además, utilizarse funciones que se encarguen de porciones especificas del código y por otra parte, puede enriquecerse la tabla fuente, con mas columnas que provean información al código, como por ejemplo un campo “direccion” que contenga la dirección web a la cual queremos dirigir al usuario al hacer click en la opción respectiva.

Esta misma técnica tiene muchos usos, por ejemplo se puede crear todas las pantallas de mantenimiento de todas las tablas de una base de datos, sin importar el número, con un único programa que trabaja a base de argumentos de entrada, por ejemplo, el siguiente comando cargaría el archivo “mantenimiento.php” con el argumento opcion con un valor igual a 50:

http://servidor/forms/mantenimiento.php?opcion=50

La rutina iría a la base de datos, buscaria en la tabla “opciones” el registro con el id igual a 50, y leería las columnas que le permitirían construir la pantalla de mantenimiento respectiva.

Aplica para construir menus, pantallas de mantenimiento, reportes, etc.

 

Comparte esta técnica en tus redes sociales, abajo encontrarás los botones que te facilitarán la acción.  Igual puedes comentar y aportar tus observaciones!!!

 

Bendiciones!!!