Mostrando las entradas con la etiqueta foros. Mostrar todas las entradas
Mostrando las entradas con la etiqueta foros. Mostrar todas las entradas

Ejemplo de composición: Factura y detalle de factura

Este es un ejemplo publicado a partir de la duda de un usuario, y como son preguntas que se hacen reiteradamente, les dejo el ejemplo aquí (cualquier duda la discutimos en los comentarios de este post):

La relación debería ser "composición" (no tiene sentido la existencia de "detalle" sin la relación con factura, por lo tanto es una "relación de vida" entre ambas clases) y el diagrama UML sería el siguiente:



y la traducción a código sería:

Factura.php

Código PHP:
require_once 'FacturaDetalle.php';

class 
Factura 

{
   private 
$_colDetalle = array();

   public function 
addDetalle(FacturaDetalle $detalle)
   {
      
$this->_colDetalle[] = $detalle;
   }
FacturaDetalle.php
Código PHP:
class FacturaDetalle 
{
   
/** código de la clase **/ 

Forma de uso: index.php

Código PHP:
require_once 'Factura.php';
require_once 
'FacturaDetalle.php';

abstract 
Index
{
   public static function 
main()
   {
      
$factura = new Factura();

      
// Agrego 4 detalles a la factura

      
$factura->addDetalle(new FacturaDetalle());
      
$factura->addDetalle(new FacturaDetalle());
      
$factura->addDetalle(new FacturaDetalle());
      
$factura->addDetalle(new FacturaDetalle());
   }
}
Index::main(); 
Más información sobre el tema de diagramas y traducción de relaciones

Saludos!

"La decadencia de forosdelweb.com", parte II

Si luego de leer varios comentarios "políticamente correctos" (aunque por dentro estén insultándote), este último comentario terminó de dejar claro cómo son verdaderamente las cosas (que error ni error):



Veo que la filosofía es "estás conmigo o contra mi", no hay puntos medios ni sincero reconocimiento de errores, pura y llana "cortina de humo".

Al final de cuentas:

¿Todo esto fue una forma indirecta de intentar sacarme del foro de POO de PHP?

... el tiempo dirá.

La decadencia de forosdelweb.com

Algunos lectores han seguido mi twitter ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], más comentarios de usuarios, etc) y se han sorprendido tanto como yo de mi "degradación" en forosdelweb.com, donde los "moderadores" del área de POO para PHP votaron para sacarme el rol de "colaborador" y pasarme a "usuario común".

Haciendo un resumen de los hechos, mi sorpresa fue mayor cuando me doy cuenta que hacía por lo menos 20 días que no participaba "colaborando" en la respuesta de dudas de los usuarios (los cursos me tienen un poco ocupado), que a la fecha y luego de 4 años, suman más de 900.

Aún recuerdo el primer mensaje que me envió cvander (el propietario del sitio, maestrosdelweb.com) anunciando que pasaba a grado de "colaborador":

30-ene-2007, 17:18
Moderador
cvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassie

Avatar de cvander

Fecha de Ingreso: noviembre-2002
Ubicación: Ciudadano del mundo
Mensajes: 10.082
Enviar un mensaje por MSN a cvander
cvander está desconectado
Colaborador del foro

Un saludo.

Debido a tu trayectoria a forosdelweb.com y la recomendación de algunos moderadores, te hemos otorgado el rango de "colaborador".

Este rango te otorga algunas ventajas en el foro (más capacidad de mensajes privados, envío de adjuntos y otros), así como un foro privado donde los colaboradores hablan de todo tipo de temas personales, así como envían sugerencias sobre el foro.

No hay ninguna responsabilidad con la leyenda, sino es simplemente un agradecimiento por tu apoyo.

Un saludo.
__________________
- Christian Van Der Henst S. [twitter: @cvander]
Maestros del Web



El tiempo pasó y me entero a través de un sintético mensaje con el título de "colaborador" lo siguiente:

31-mar-2009, 11:54
GatorV
$this->role('moderador');
GatorV es mas bueno que la perra LassieGatorV es mas bueno que la perra LassieGatorV es mas bueno que la perra LassieGatorV es mas bueno que la perra LassieGatorV es mas bueno que la perra LassieGatorV es mas bueno que la perra LassieGatorV es mas bueno que la perra LassieGatorV es mas bueno que la perra Lassie

Avatar de GatorV

Fecha de Ingreso: mayo-2006
Ubicación: /home/ags/
Mensajes: 20.286
GatorV está desconectado
Colaborador

Que tal Enrique,

Hubo varios reportes de "quejas" ya sabes, y la administración del foro decidio que lo mejor para las dos partes (FDW y tu) lo mejor era pasarte nuevamente al grupo de usuarios normal.

Espero entiendas el porque de esta decisión y creo yo en lo personal es lo mejor para las dos partes.

Saludos.
__________________
Blog Web


Nota: el resaltado es mío.

Mi sorpresa a sido mayúscula, amén de que no veo tan "dramático" perder una seudo-calificación que puedan darte de uno de los tantos foros que pululan en la web, me indigna en la forma que se procedió, sin transparencia y dar la cara (lo peor es que conozco a algunos personalmente), ya que luego de intercambiar varios mensajes con GatorV (actual moderador del área de POO en forosdelweb.com) me deja claro que el solo es el "mensajero" y "otros moderadores" (que aparentemente no puedo saber los nombres) decidieron mi "degradación".

También he preguntado las razones concretas pero solo recibo un genérico "quejas de usuarios", no sé cuales, tampoco la cantidad de usuarios ni la cantidad de quejas, ni cuantos moderadores votaron en mi contra, ni cuantos fueron los votos, ni tampoco hay forma de réplica o defensa alguna.

Aclaraciones varias


Creo que todo el mundo sabe que al participar en un foro se dan discusiones acaloradas y es casi imposible que no existan quejas, a menos que seas un provocador nato que solo busca el conflicto y no aporta absolutamente nada.

En mi contra puedo decir que tengo un humor bastante irónico y que no puedo caerle bien a todo el mundo (creo que los demás me toman más en serio de lo que me tomo yo mismo), y más de una vez rezongué a usuarios por su necedad de leer un manual o por repetir conceptos errados sin razonarlos (principalmente de los que se venden como "expertos"). Además, es casi imposible que luego de unos años de volverse "conocido en el ambiente de PHP" no encuentre tanto seguidores como detractores, en igual proporción, lo que genera que por cada palabra que diga tenga 2 personas que están de acuerdo y 2 que simplemente buscarán atacarme a título personal (algo que se ha visto muy seguido en forosdelweb.com).

A mi favor puedo decir que son más las contribuciones que he brindado al foro que las discusiones etéreas en las que he participado, y así lo tienen claro los administradores (GatorV) que en múltiples situaciones le he avisado para que tome cartas en el asunto.

Lamentablemente mi colega (quién estimo mucho desde hace años) se ha tomado la moderación tan al extremo que no se puede comentar ningún asunto que exista un mínima discusión "sana y normal", que esta es borrada, por lo tanto el último año sentía "reserva" de decir algo, ya que seguro iba a ser "censurado", igual que con los demás usuarios.

Respuesta Oficial de Forosdelweb.com


Luego de varios intercambios con mi amigo GatorV, ya que la verdad sigo "indignado" de cómo procedieron, nuevamente, por la forma y no en sí por el resultado (un cambio de "tipo de usuario").

Recibo esta "diplomática" respuesta del responsable de forosdelweb.com, Cvander, que en resumen dice:

"las formas en las que a veces contestas han causado conflictos con otros usuarios que simplemente no comprenden tu sarcasmo, ni lo políticamente incorrecto que sueles ser a veces, generando reportes en varios de tus mensajes. Por esto mismo, algunos moderadores mencionaron cuál sería la forma de proceder, cómo podian darte una infracción pues normalmente los colaboradores no causan estos conflictos..."

Si esto fuera un trabajo diría que esto es un "despido indirecto" ;-)

Al que resumo (los intercambios con Cvander continuaron) que la razón fundamental se debe a que les doy mucho trabajo de moderación, mis respuestas generan un conflicto que no pueden manejar, en contraoposición a los aportes que di y puedo dar en el foro de "POO PHP".

Interesante. Lo primero que me preocupa es, habiendo tantos problemas para resolver, tengan que hacer este tipo de "penalizaciones" con un usuario que aporta constantemente al foro, y posteriormente no se cuestionen si "ese trabajo que les doy" no se debe al exceso de moderación y censura que existe en el foro.

Aunque verdaderamente dudo ser "el colaborador conflictivo del foro".

Para resumir, copio mi respuesta a Cvander:

31-mar-2009, 20:36
enriqueplace
enriqueplace merece que le prestes tu consolaenriqueplace merece que le prestes tu consola

Avatar de enriqueplace

Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 960
Enviar un mensaje por Skype™ a enriqueplace
enriqueplace esta en línea ahora
Respuesta: Tema de colaborador

Tal y como se lo comenté a GatorV

1 - Me entero por la espalda, sin mediar ningún tipo de comunicación previa que "un grupo de notables" a votado mi "degradación" como usuario dentro de FOROS

2 - Se argumenta "quejas" pero no hay "pruebas" en base a cuantos usuarios ni a qué tipo de quejas ni si estas son justificadas o no, lo decidieron unos pocos en donde no tuve ninguna ingerencia.

3 - No hay forma de "defensa" ni de respuesta, nadie advierte ninguna situación (mayor es mi sorpresa de estar casi ausente por 20 días de los foros).

4 - Lo único que dan como mensaje es que prefieren el "silencio" en los foros a una discusión al respecto. Se ha distorsionado gravemente el foro de POO ya que no hay aportes de nivel y mediante una moderación "excesiva" ya casi nadie puede discrepar con nadie por miedo a ser eliminado (en lo personal ya fueron varios mensajes mios borrados y no los justifico).

5 - Posteriormente me notifican de este cambio de "grado", nadie sabe responder nada, dicen que es "por mi bien" y que hable con "cvander". Argumentos y transparencia "cero".

Vergüenza ajena, no por el hecho en sí de una seudo-categorización en un foro, es por la forma en que se ha hecho.

La verdad que no entiendo como GatorV apoya esto, me molesta el hecho de cómo procedieron, como cobardes y completamente abusando de una autoridad que no tienen sobre mi proceder ("he sido juzgado").

Todo esto me parece sumamente arbitrario, subjetivo y poco serio.




Para empeorarla, nunca tuve respuesta.

En resumen

Luego de cuatro años de participar en el foro de PHP de forosdelweb.com, donde muchos de mis respuestas se transformaron en post de este mismo blog, si bien ahora no he tenido tiempo de seguir participando, actualmente no tengo motivos para seguir haciendo el mismo trabajo de forma desinteresada, ya que los mismos responsables del foro desalientan a los propios colaboradores.

Con estas actitudes, muy difícil que alguien quiera colaborar.

Enlaces relacionados: no te pierdas la segunda parte, la respuesta "oficial y final" de Cvander

Reglas básicas para trabajar con clases bajo PHP (actualizado)

Discutiendo sobre el tema en un foro hice el siguiente resumen básico de cómo deberíamos trabajar con clases bajo PHP:
  1. Una clase debe estar en un solo archivo/fichero, y el nombre del archivo/fichero debe ser el mismo que el nombre de la clase. Por ej, "Cliente.php" y la clase internamente debe llamarse "Cliente", en "ningún caso" [1] los nombres deben diferir (simil Java).
  2. Cada clase debe manejar su relación con otras clases de forma independiente de las clases con las cuales interactúa: para que una clase sea consistente esta debe saber a qué clases llamar para poder trabajar, sin importar que otra clase con la que debe relacionarse comparta una misma relación. A pesar que PHP permita colocar todos los include/require a las clases en un archivo centralizado (como muchas veces se hace en "index.php") , debemos evitarlo. Lo único que logramos es que la clase sea inconsistente en otro contexto al fallar porque ella no sabe resolver sus relaciones (imaginemos que una de esas clases no se usará en index.php, por lo tanto no estará la lista de include/require de clases que necesita para poder funcionar).
  3. En la relación entre las clases debes usar require_once, lo que resuelve si dos clases que se relacionan entre sí dependen a su vez de la misma clase, por consiguiente solo se invoca una vez, y seguimos manteniendo la independencia de la clase, ya que si nos llevamos una de esas clases a otro contexto, esta seguirá funcionando correctamente y permitirá el reuso normal de la misma sin dar ningún tipo de error de "clase ya requerida" (si usas solo include o require, no puedes llamar dos veces a la misma clase, por eso existen include_once y require_once).
  4. En un mismo contexto, nunca redefinir la misma clase, ya que pierde consistencia el diseño del sistema. Por ej, en un sistema contable tener una clase Cliente que según la clase que la llame puedan "reescribir" internamente la clase para que su diseño sea distinto a la clase original. Una clase debe ser única en un mismo sistema, no puede ser que existan dos versiones de la implementación de una misma clase.
  5. Anexo: debemos usar todos el mismo estándar de codificación (Zend)
Originado a partir de una consulta en un foro: "¿Redeclarar un clase?"

Notas complementarias

  • [1] - Estamos hablando de lo básico de POO para PHP, particularmente este punto puede variar como lo hace trabajar con una herramienta como Zend Framework, ya que PHP no encuentra por sí solo la ubicación física de una clase usan la "artimaña" de colocar en su nombre la ruta para llegar a ella. Esta práctica no es un "estándar" y debería en algún momento caer en desuso si se implementa correctamente el manejo de "namespace" en alguna versión futura de PHP. Pero volvemos al principio, con esta práctica el nombre de la clase queda distorsionado, ya que ahora, además del nombre está la ruta para llegar a la clase y esto es solo por un tema de la incapacidad de PHP y no tiene nada que ver con la POO (gracias GeL/T0 por tus valiosos comentarios ;-))

"Rendimiento: ¿conviene utilizar POO?"

Ayer enviaron la siguiente consulta a un foro, lo cual generó que escribiera esta respuesta que casi se me convirtió en un post y para no perderla, lo dejo documentado aquí con links de referencia y un poco más actualizado su contenido:

Consulta:
"Buenas a todos. Hace unos meses me comencé a meter de lleno con php. Después tuve que dejar otro tiempo más porque me surgieron proyectos en otras plataformas, y ahora estoy retomando para hacer un proyecto personal en php.

Me surgieron algunas dudas con respecto a la verdadera utilidad, en relación al rendimiento, de la programación orientada a objetos en php. Si bien no conozco como trabaja internamente php, es un lenguaje interpretado, es decir, que en cada carga o recarga de la página las clases en cuestión deben ser interpretadas una y otra vez.

¿Es más ineficiente interpretar una clase, que interpretar una secuencia de comandos? ¿Alguien conoce de esta interna?. En .Net las clases son compiladas una vez que fueron solicitadas, por lo tanto, con cargas o recargas posteriores solo resta usarlas tranquilamente, ya que sabemos que ya ha pasado por esa etapa previamente.

Solo me estoy enfocando en el rendimiento de la aplicación. Si lo analizamos desde otro punto de vista, de seguro que encontramos muchas más ventajas a la programación orientada a objetos que a la programación procedimental.
Espero que alguien me oriente un poco en esto."


El moderador y amigo GatorV le responde:

"Es mínimo el impacto, si a caso lo que es más es la memoria ram que llegue a consumir, aunque no es nada que impacte, ya que el compilador de PHP esta muy optimizado para evitar desperdiciar memoria.

Por otro lado si te importa un poco el tema de estar re-interpretando las clases, una vez que termines puedes usar Zend Optimizer para guardar solamente las clases en estado compilado, y asi eliminar el overhead de estar interpretando y ejecutando".


Mi respuesta (actualizada):

"Tus comentarios (completamente justificados) me hacen acordar a los mitos de la "optimización extrema" en PHP, algo que veo sí completamente injustificado.

La forma en que se hace las pruebas es generalmente muy fuera de la realidad, como hacer un loop de millones de registros para luego contar las milésimas de segundo entre usar un echo o un print.

El peor mal que podemos tener en la ingeniería de software es ir hacia la "optimización temprana" (varios [1], [2], [3], etc, sin descontar que el lenguaje PHP sigue evolucionando y siendo optimizado), es decir, preocuparnos tempranamente del rendimiento y no de la funcionalidad o el diseño de un sistema.

La parte que no se llega a entender es que ya pasamos la época de hacer páginas PHP embebidas con HTML y conexiones SQL, actualmente los proyectos requieren SISTEMAS, y estos poder escalar y desarrollar rápidamente de acuerdo a las necesidades del mercado.

¿Cuanto cuesta modificar un producto web que no es un sistema? ¿cuanto nos cuesta desarrollar funcionalidades nuevas?

Si no tienes diseño, si no aplicamos metodologías que incluyan POO, dudo seriamente que podamos estar aptos de desarrollar un sistema "medio" para arriba.

Pero eso de "no uses require_once porque es caro", "echo es más rápido que print" ó "print es más rápido que echo" (he visto artículos sobre "optimización extrema" que dicen lo contrario entre ellos), "usa ++$i en vez de $i++", etcétera, las considero completamente tontas e inútiles.

Podemos discutir que si tienes POO + Persistencia (BD), es seguro tendrás más consultas a la base de datos que si hicieras un JOIN y luego recuperaras los datos y procesaras, pero hay muchas técnicas para evitar esto, como el "lazy loading", evitando tener que consultar todas las veces por un mismo valor a la base de datos si ya lo tienes la primera vez, o evitar consultas SQL innecesarias por valores que perfectamente pueden estar en un array ya que no cambian (o en un archivo plano, luego lo puedes actualizar, etc), etc.

Siempre hay que tener en cuenta la escala del sistema, si es para 10 usuarios concurrentes, no me molestes con estas tonterías. ;-)

Pero puedes estar tranquilo, el problema no pasa por usar puramente POO, el problema para por otros lados, la latencia se estudia desde que el usuario ejecuta una acción y recorre todos los servicios y servidores hasta que el sistema responde, no es solo PHP.

PD: ahora me acuerdo que hace rato que quiero escribir un artículo sobre "lazy loading" ;-)


¿Tú qué opinas de la "optimización extrema"? ¿Crees en ella? ¿y de la "optimización temprana"? ¿te tomas el tiempo de verificar si realmente generan algún tipo de beneficios? ¿cómo optimizas tus sistemas? ¿cómo los diseñas?

Foro en español sobre Zend Framework


Les comento la existencia de un foro en español para concentrar consultas, novedades y proyectos en nuestro propio idioma sobre Zend Framework. Este foro es parte de un movimiento de la empresa Zend para crear un foro por idioma y así ayudar a difundir esta herramienta entre los desarrolladores PHP.

Espero que lo aprovechemos, no solo consultando, sino también respondiendo dudas.

Frase: "los nuevos frameworks MVC"

"Dicen que la nuevas tecnologías, como en este caso los nuevos frameworks MVC, nos permiten seguir haciendo sistemas espantosos pero más rápido."

Respuesta dada en Foros del Web a colación sobre el actual fanatismo imperante sobre el uso y abuso de los frameworks para PHP (todos los días nace uno nuevo), donde aparentemente solo se necesita saber implementar el patrón MVC para poder desarrollar un sistema decentemente.

Entradas populares