viernes, 18 de septiembre de 2015

CRUD con PHP5 OOP y Patron de Diseño MVC

Modelo-Vista-Controlador

MVC: es un patrón arquitectónico usado en ingeniería de software. Su uso exitoso aísla la lógica de negocio de las consideraciones de interfaz de usuario y la persistencia de la base de datos, lo que resulta en una aplicación donde es más fácil de modificar la apariencia visual de la aplicación o las reglas de negocio subyacentes sin afectar uno al otro. En MVC, el modelo representa la información (los datos por lo general pero no únicamente en RDBMS) de la solicitud; la vista se corresponde con los elementos de la interfaz de usuario (Preferiblemente independiente del dispositivo), tales como artículos de texto, casillas de verificación, y así sucesivamente; y el controlador gestiona la comunicación de los datos (o flujo del programa) y las reglas de negocio que se utilizan para manipular los datos hacia y desde el modelo. 



Modelo - representa el comportamiento de las aplicaciones y datos. También se conoce comúnmente como el dominio. El dominio representa el problema que está tratando de resolver. 

Vista - representa la presentación. Puede consultar el modelo de su estado y generar la presentación de los objetos del modelo. 

Controlador - representa aplicaciones de flujo de trabajo, que procesa los parámetros de la petición y decide qué hacer con base en ellos. Esto, por lo general, implica la manipulación del modelo y se presentan los datos en la vista seleccionada.


Ejemplo de una Aplicación CRUD


Para este taller de PHP en POO se ha creado un gestor de contactos simples que soporta las operaciones básicas CRUD. El usuario puede añadir un nuevo contacto, borrar, visualizar un detalle de contacto y visualización de la lista de todos los contactos. Me referiré a estas operaciones como las acciones. Por lo tanto, esta aplicación tiene cuatro acciones diferentes: Añadir un contacto, Eliminar un contacto, modificar un contacto y mostrar la lista de contactos. Adicionalmente y no forma parte explícitamente del CRUD, se puede ordenar los contactos. 


CRUD

Se conoce comúnmente por sus siglas en Ingles Create, Read, Update and Delete. Tiene varios acrónimos en Español.

Al pensar en el patrón MVC se puede ver un aspecto negativo y varios aspectos positivos. Lo negativo es que el patrón MVC introduce una complejidad en el proyecto que puede ser una carga para aplicaciones sencillas, pero a medida que crece su aplicación este aspecto negativo es más ponderado por los aspectos positivos. Voy a describir algunos aspectos positivos que se me ocurren.

MVC separa el modelo de la vista, es decir, los datos de su representación. La separación del modelo de la parte de presentación es una de las reglas básicas de un buen diseño de software. Cuando se separa un modelo de su presentación puede agregar fácilmente muchas presentaciones diferentes del mismo modelo. Por ejemplo, una aplicación web puede tener normalmente tiene presentación HTML, utilizado por los navegadores web, y la presentación JSON usado por los clientes JavaScript AJAX.

Un papel distintivo MVC nos permite distribuir mejor
los recursos humanos en un proyecto grande. Por ejemplo, los expertos de dominio y los expertos de base de datos pueden trabajar en un modelo mientras que los diseñadores web trabajan en una vista. Debido a que cada parte es desarrollado por los desarrolladores especializados, una aplicación puede ser de mejor calidad. Esto también afecta el tiempo de desarrollo, los proyectos se pueden construir más rápida ya que los desarrolladores especializados pueden trabajar simultáneamente, cada uno en su área de especialización, sin afectar (mucho) a otros desarrolladores que estén trabajando también.

Mantenimiento y las actualizaciones de una aplicación compleja son más fáciles debido a que un desarrollador puede mirar a la aplicación como una serie de "módulos" que consiste cada uno de Modelo, Vista y Controlador de la parte. Un desarrollador puede modificar uno "módulo" y no tiene que preocuparse de que los cambios que introdujo afectará a otras partes del sistema (creo que esto se llama separación de intereses). Además, al añadir nuevas funcionalidades a la aplicación, un desarrollador puede simplemente crear un nuevo "módulo".




La implementación


La aplicación consiste en el archivo index.php y varios archivos colocados en el modelo, vista y controlador de directorios:Estructura de programación orientada a objetos PHP MVC CRUD CarpetaEl script index.php es el punto de acceso central, todas las solicitudes pasan a través de él.El controlador se define en el directorio controlador:

     
ContactsController.phpLa vista de aplicación se definen en el directorio de vista:

    
contacto-form.php se encarga de mostrar "Añadir nuevo contacto" formulario para el usuario
    
contact.php se encarga de mostrar los datos de contacto a ser modificado.

    contacts.php se encarga de mostrar la lista de contactos.
   
error.php es responsable de mostrar errores.


El modelo

Antes de explicar el código fuente, debe saber algo sobre el modelo. El modelo tiene una sola entidad - Contacto que se persistió en la tabla de contactos. El contacto no tiene un comportamiento por lo que utiliza la estructura de tablas SQL para definirlo:

CREATE TABLE `contacts` (

    `id` int(11) NOT NULL AUTO_INCREMENT,

    `name` varchar(128) NOT NULL,

    `phone` varchar(64) DEFAULT NULL,

    `email` varchar(255) DEFAULT NULL,

    `address` varchar(255) DEFAULT NULL,

    PRIMARY KEY (`id`)

)

No hay ninguna clase en el modelo que representa la entidad de contacto, en vez utilicé objetos PHP estándar creadas automáticamente de la base de datos de registro. no es totalmente OO pero da una idea inicial para dar ejemplo a aquellos que se inician en la programación orientada a objetos y vienen de un pensamiento estructurado.

¿Qué podemos hacer con ese increíble modelo? Esta es la interfaz pública de la clase ContactsService donde se pueden ver todas las características del modelo:



ContactsService.php
  
ContactsService objeto no funciona con la base de datos directamente; En su lugar, utiliza el objeto ContactsGateway que a su vez emite consultas a la base de datos. Esta técnica se denomina tabla de datos de puerta de enlace existen otras técnicas.

La fuente


index.php
 
Este script tiene papel simple, se crea una instancia del objeto de controlador y se lo da el control de la aplicación mediante el método handleRequest.

Todas las solicitudes deben pasar por el script index.php porque MVC requiere que todas las peticiones son manejadas por el controlador que se llama desde el script index.php. Las aplicaciones web
MVC por lo general vuelven a redirigir todas las peticiones que pasan por el index.php que se puede hacer en la configuración del servidor.


ContactsController.php

El método handleRequest actúa como un Dispatcher de las acciones. El método decide qué acción debe tener que invocar basado en un valor del parámetro HTTP GET "op" e invoca el método que implementa la acción. Si alguna excepción desde los métodos de acción del método handleRequest los atrapa e imprime el mensaje de error. Por esto se le llama controlador base, por lo general eso lo hacen algunos frameworks y no tenemos que implementar esta función adicional al Controller, sino solo implementar en él la lógica de negocio.

En primer lugar, tenemos el método listContacts que tiene un flujo de trabajo sencillo, se lee un parámetro necesario para clasificar los contactos, los contactos se obtiene a partir del modelo ordenado, los almacena en la variable de contactos y, por último, incluye la vista.En segundo lugar, tenemos el método DeleteContact que se lee un identificador del contacto y le dice al modelo para eliminarlo. Por último, se redirige al usuario de vuelta al script index.php que a su vez invoca la acción de la lista de contactos. La acción de contactos de eliminación no puede funcionar sin el parámetro id, así, el método lanzará una excepción si el id de un contacto no está establecido.En tercer método es el método showContact que es similar al método DeleteContact usa un id para actualizar, así que no voy a perder el espacio explicarlo.Por último, el método saveContact muestra el formulario "Añadir nuevo contacto", o, procesa los datos que se transmiten de forma que si se presentó. Si cualquier ValidationException se produce en el modelo, los errores se recogen de la excepción y se pasan a la vista. Lo ideal sería que la vista debe mostrar (y de hecho lo hace).

contacts.php

La vista contacts.php, que es utilizado por la acción de la lista de contactos, requiere la variable de contactos para ser llenado con objetos de contacto. La variable se rellena con el método listContacts y se pasa a la vista con las normas de alcance PHP y entonces la vista utiliza los datos de él para mostrar los contactos como una tabla HTML.Scripts como el Scripts contacts.php se llaman plantillas o templates. Con un plantilla el desarrollador define una estructura fija que se llena con los valores de las variables de la aplicación (en tiempo de ejecución) y luego se presenta al usuario. Las plantillas contienen únicamente la lógica de presentación, debido a esto, estos Scripts son comprensibles por los no programadores (diseñadores, ...) lo que los hace muy útiles y se utiliza con frecuencia en aplicaciones web aplicando así una de las best practice, la segregación de tareas.
 

Github source code MCV CRUD

Se puede descargar el código en la siguiente dirección en Github.

https://github.com/ooleon/mvc-php-poo-crud-tutorial-001/blob/master/mvc_crud.zip


Gracias.

jueves, 17 de septiembre de 2015

Pasos para migrar de SQL Server 2000 a SQL Server 2014


No todas las organizaciones son capaces de mantenerse al día con todas las nuevas versiones de SQL Server. De hecho, hay un montón de empresas que todavía están en versiones anteriores como SQL Server 2005 y versiones aún más antiguas, como SQL Server 2000. Entonces, ¿qué hacer si se tiene una versión anterior como SQL Server 2000 y desea actualizar a una nueva versión, como SQL Server 2012 o SQL Server 2014? No hay ninguna ruta de migración directa a SQL Server 2012 o SQL Server 2014 desde SQL Server 2000, pero se puede llegar mediante el uso de SQL Server 2008 como en el paso intermedio o provisional de migración. La migración de SQL Server 2000 a SQL Server 2012 o SQL Server 2014 requiere esencialmente una migración de datos debido a que el host está, probablemente, en ejecución sobre un sistema operativo antiguo, como Windows Server 2000 o Windows Server 2003 y es casi seguro que quieren pasar a una plataforma más moderna como Windows Server 2012. Estos son los pasos para migrar desde SQL Server 2000 a SQL Server 2014 (estos pasos son esencialmente los mismos que ir a SQL Server 2012)

1. Instale una copia separada de SQL Server 2014 - El primer paso es instalar una instancia independiente de SQL Server 2014. Este será típicamente en un sistema operativo más reciente como Windows Server 2012 o Windows Server 2012 R2. Esto puede ser ya sea en un sistema físico o puede ser una máquina virtual. Si en este caso se encuentra en la misma subred que el sistema original, se necesitará un nombre de sistema diferente, pero eso se puede cambiar más adelante.

2. Asegúrese de que su fuente de SQL Server 2000 está en el Service Pack 4 - Luego tenemos que estar seguros de que el sistema de origen está en el Service Pack 4 (SP4). Puede comprobar el nivel SP utilizando la siguiente consulta:
SERVERPROPERTY SELECT ('productversion'), SERVERPROPERTY ('ProductLevel'), SERVERPROPERTY ('edición')
Si el sistema es inferior a SP4, entonces necesita instalarlo antes de continuar.

3. Realice una copia de seguridad de todas las bases de datos que se migrarán - Después de haber actualizado el sistema de origen a SQL Server 2000 SP4, entonces usted puede seguir adelante y hacer una copia de seguridad completa de todas las bases de datos que se migrarán.

4. Instale una copia intermedia de SQL Server 2008 o SQL Server 2008 R2. Esta copia sólo será utilizada para convertir las copias de seguridad del formato anterior de SQL Server 2000 que no puede ser restaurado a SQL Server 2014 al formato 2008 / R2 más reciente de SQL Server que si puede ser restaurado al 2014. Puede instalar esta instancia  SQL Server 2008 / R2 en cualquier sistema operativo, pero probablemente sería más conveniente para instalar esta instancia temporal en el mismo sistema operativo donde se encuentra el SQL Server 2014 de destino.

5. Instale el Service Pack adecuado en el SQL Server 2008 provisional. Si está utilizando SQL Server 2008, entonces también tiene que colocar el SP2. Si está utilizando SQL Server 2008 R2, entonces usted necesita para este el SP1 adecuado.

6. Restaure la copia de seguridad de base de datos SQL Server 2000 en el sistema provisional SQL Server 2008 / R2 SP2 que ha sido instalado provisionalmente y siga adelante.

7. En este momento la base de datos SQL Server 2000 SP4 se habrá restaurado al 100% en el SQL Server 2008 / R2 y se habrá convertido en un formato más reciente. Ahora usted puede hacer una copia de seguridad de esta bases de datos provisional SQL Server 2008 / R2. Una vez completada esta copia de seguridad, ya no necesita el sistema provisional de SQL Server 2008 / R2 y puede eliminar esta instancia.

8. El siguiente paso es tomar la copia de seguridad de la bases de datos del SQL Server 2008 / R2 y  restaurarla al sistema de SQL Server destino 2012 o 2014 según sea su caso. Una vez que la restauración de las bases de datos ha terminado, se han migrado al nuevo formato de SQL Server 2014.