domingo, 25 de mayo de 2008

Tercer liberacion de Yupp Framework PHP !!!

Y como lo prometido es deuda...

Esta liberacion corresponde a Yupp Framework PHP en su version 0.1, que se compone de la version 0.3 de YORM (Yupp Object-Relational Mapping) y la version 0.1 de YMVC (Yupp Model View Controller), los cuales son los componentes principales del Yupp Framework PHP.

Esta version viene con un ejemplo de implementacion de un Blog sencillo que permite crear entradas y comentarios. Cave destacar que es la primer implementacion 100% mvc usando Yupp Framework PHP y muestra distintos aspectos de funcionalidades provistas por el framework, entre ellas:
  • Manejo de modelo.
  • Ruteo y ejecucion de acciones de controladores.
  • Manejo de vistas.
  • Utilizacion de helpers.
  • Validacion automatica de informacion.
Por mas informacion y descargarlo puedes hacerlo desde > aqui <

La descarga incluye informacion de la version, informacion de como instalarlo y ponerlo a funcionar y requisitos de instalacion.

Cualquier comentario lo puedes hacer aqui en el blog o mediante la pagina de contacto de www.SimpleWebPortal.net

miércoles, 21 de mayo de 2008

Proxima liberacion

Estamos trabajando para poder este fin de semana hacer una nueva liberacion de Yupp Framework PHP.

Esta liberacion contendra la version 0.3 del YORM (el componente de modelo persistente) y la version 0.1 del componente MVC que esta bastante avanzado pero como es la primer liberacion sale con version 0.1, luego veremos como ajustar el versionado a medida que se agregan caracteristicas.

En cuanto al YORM se hicieron cambios importantes en la parte de consultas para poder hacerlas mas sencillas y potentes. Tambien se mejoro y se integro la parte de validacion de informacion, esta caracteristica aunque existia en las liberaciones anteriores, no fue expuesta para probar, ahora esta 100% accesible y la liberacion va a incluir algunos ejemplos de uso.

En el YUPP MVC (o YMVC) implementa lo que seria el ruteo de requests a ejecucion de acciones de controladores, generacion de modelo, manejo de vistas y contiene algunos helpers basicos para mostrar informacion del modelo y errores que puedan haber ocurrido. Tambien fue implementado un controlador por defecto que permite hacer CRUD (Create Retrieve Update Delete) para cualquier clase de dominio (clase persistente definida con YORM). Y viene con 4 vistas genericas para listado, creacion, edicion y vista de detalles que funcionan con informacion provista por las clases de dominio (definidas con YORM).

Bueno, esperamos llegar al fin de semana con esta nueva liberacion, si no, sera para el proximo.

martes, 15 de abril de 2008

Primer versión del logo de Yupp Framework PHP

Es un placer presentarles en nuevo logo de Yupp Framework PHP.
Los comentarios son bienvenidos.

lunes, 7 de abril de 2008

Segunda liberación del Yupp Framework PHP

El componente de modelo persitente YORM en su versión 0.2 está listo para ser descargado y probado.

En el post anterior donde avisábamos de la liberación se comentan las características más importantes en esta liberación, entre lo más notable está el soporte para carga perezosa, que se une a la previa carga en cascada, y la operación *Contains sobre objetos del modelo.

Puedes encontrar toda la información de la liberación en la documentación dentro del .zip en la página de descargas.

Cualquier duda o comentario será bien recibido y lo tomaremos en consideración.

La versión 0.3 del YORM estará lista mas o menos en un mes, con nuevas características, pero sobre todas las cosas será una liberación de estabilización, donde se harán pruebas exhaustivas, se revisará la API y se documentará lo mejor posible. Intentaremos con esta versión del YORM liberar tambén la primer versión (v0.1) del componente MVC del Yupp Framework PHP, el YMVC.

sábado, 5 de abril de 2008

Anuncio de liberación de la versión 0.2 del YORM

En el día de mañana estaremos liberando la versión 0.2 del YORM, el componente de modelo persistente del Yupp Framework PHP.

Aquí va un resumen de algunas de las nuevas características:
  • Carga de relaciones bidireccionales instanciadas unidireccionales corregida.
    Es básicamente la consideración de que si tengo una relación bidireccional entre dos clases, puedo tener una instancia de la relación que no es bidireccional, a no ser que tenga una restricción no estructural que diga lo contrario.

  • Se agrego operacion *Contains( id ) para preguntar si un atributo hasMany contiene un objeto con ese id.
    Si una clase Empresa tiene un atributo hasMany llamado "personas" (o sea que tiene asociadas varias "personas"), puedo preguntarle a una instancia de Empresa: $emp->personasContains( 123 ), eso retornará un booleano y será true solo si la lista de personas de la empresa tiene una persona con id 123.

  • Soporte para multiples relaciones entre las mismas 2 clases.
    Esto es, por ejemplo cuando tengo artículos escritos y autores, y en cada artículo quiero tener asociado un autor principal y los autores secundarios, antes no se podía modelar algo así de forma estándar. Ahora hay una forma "Yupp" de hacerlo ;)

  • Soporte para carga perezosa (lazy loading).
    Esta es la característica más importante de esta liberación, la capacidad de poder cargar un modelo de forma lazy, esto quiere decir que se puede cargar una instancia de una clase sin cargar las instancias de las clases asociadas, cosa que antes no se podía hacer y se cargaba en cascada (cargando una instancia se cargaban todas las de los elementos asociados). De esta forma, se cargan los objetos asociados solo si son utilizados, lo que representa un gran ahorro en el número de consultas que se deben hacer a la base de datos.

Entre hoy y mañana estaremos terminando de actualizar los tests para poder correr esta nueva versión, y en la noche estará publicada la nueva versión.

miércoles, 19 de marzo de 2008

Primer liberación del Yupp Framework

Esta liberación de código del Yupp Framework está relacionada con uno de los componentes principales del mismo, el YORM. Este componente se encarga de manejar todo el acceso a datos, definición de modelos y generación de esquemas, en una forma 100% orientada a objetos, simplificando las tareas en dichas áreas.

Hoy con la versión 0.1 de este componente se inicia un largo camino para este framework que espera y apunta a ser el más simple y productivo del mercado (en frameworks PHP, claro está).

En esta primer versión encontramos una primer solución para definir clases del modelo, generar esquemas, persistir datos y obtener datos, sin necesidad de codificar una sola línea de SQL y con una configuración mínima (apenas los datos de conexión a la base). Esta versión cuenta con soporte para definición del modelo de datos, soporte de relaciones de herencia y relaciones entre clases con cardinalidades 1-1, 1-n y n-n unidireccionales o bidireccionales.

Aquí está es link para descargar esta versión.

Problemas al acceder al nombre de la clase en un esquema de herencia desde metodos estaticos en PHP

Digamos que tenemos un esquema como el siguiente, en donde hay dos clases que mantienen una relación de herencia, y hay un método estático definido en la clase padre, el cual accede al nombre de la clase y es invocado por la clase hija. El resultado esperado sería que el nombre de la clase fuera el de la clase hija, pero como veremos en el ejemplo, el resultado es la clase padre.
class A {
public static function
who() {
echo
__CLASS__;
}
public static function
test() {
self::who();
}
}

class
B extends A {
public static function
who() {
echo
__CLASS__;
}
}

B::test();

Lo descrito anteriormente sucede porque PHP resuelve el nombre de la clase por la clase a la cual pertenece el método que se está invocando, lo que tal vez se puede ver como una violación al polimorfismo, es decir, que esperamos que el código anterior devuelva el nombre de la clase sobre la cual es invocado el método, pero no es así.

Según el manual de PHP, con la versión 5.3.0 este tema será resuelto de forma nativa por PHP, la solución a este problema lleva el nombre de "Late Static Bindings". Lo que básicamente agrega esta solución es una palabra clave que ayuda a referenciar a la clase correcta en tiempo de ejecución conservando el comportamiento deseado en un ambiente Orientado a Objetos con polimorfismo. Este es el ejemplo que se ofrece en la documentación de PHP:

class A {
public static function
who() {
echo
__CLASS__;
}
public static function
test() {
static::
who(); // Here comes Late Static Bindings
}
}

class
B extends A {
public static function
who() {
echo
__CLASS__;
}
}

B::test();


En este ejemplo se agrega la palabra clave "static" para referenciar a la clase correcta en tiempo de ejecución, devolviendo el valor correcto y esperado para un ambiente que soporta polimorfismo.

Por más información sobre el tema, accede al manual de PHP - Late Static Bindings.