Taller PHP5: "Semana 3 - correcciones en el diseño de 3 capas" (actualizado 7/3/2007)

El Gerente de Proyectos luego de haber leído cada uno de los informes de sus postulantes se percató que el sistema no está correctamente implementado y que existen varios errores, por consiguiente (luego de despedir a dos líderes y un especialista en testing) decide volver a asignar un desafío:

Pre-requisitos

El equipo de desarrolladores siguió trabajando en el sistema durante el correr de la Semana 2, por lo tanto en el repositorio SVN existen cambios que deberán ser actualizados con respecto a la versión local de cada postulante.

Nota: no se puede cumplir con la Semana 3 si el sistema no corresponde con la última versión disponible.

Diseño en 3 capas

Luego de ver la gran variedad de diseños propuestos por los postulantes nos percatamos que nuestro diseño tiene fallas, las cuales queremos ahora que solucionen y que nos entreguen un informe explicando detalladamente todos los cambios que deberían hacerse.

Diseño actual, con errores

Diseño corregido, lo que se solicita implementar

Consultas de Usuarios incompleta

De la misma forma, se ha verificado que el sistema presenta faltantes en la programación de las funcionalidades. El formulario de búsqueda no permite encontrar usuarios por nombre, por consiguiente, se solicita que documenten toda la implementación y que esta esté acompañada de un "Diagrama de Secuencia" (UML) para verificar que la lógica del diseño sea la correcta. A su vez, se agrega un nuevo campo "descripción" que se solicita agregar al sistema de consultas.


Cuestionario

Según el diagrama correcto la clase Index depende del paquete Presentación, el paquete Presentación depende del paquete de Dominio, y el paquete de Dominio del paquete de Persistencia.
  • ¿Cómo se representa en código PHP la existencia de una dependencia entre estos elementos?
  • ¿Analizando estas dependencias en sentido inverso, cómo se representa en código PHP?
  • ¿Cómo se verifica que existan cambios (y cuales fueron) en el repositorio SVN?
Forma y límite de la entrega

  • Seguiremos manejando un período de 1 semana, como este lunes fue un día muy complejo para procesar todos los trabajos, lo haremos de miércoles a miércoles: vence el 14 de marzo
  • Documento "compartido" (que permita modificarlo) con el siguiente nombre "semana3-[idDeUsuario]".
  • Quién no cumpla con los requerimientos es automáticamente pasado al estado "deshabilitado" dentro del taller, lo cual queda fuera de las evaluaciones de los trabajos y de una futura asignación a un equipo de desarrollo en SurForce.
  • Se penalizarán todos los errores: cualquier detalle mencionado en esta entrada, más las faltas de ortografía, no uso de las herramientas oficiales, faltantes en las entregas, etc.
PD: dudas sobre los requerimientos, en los comentarios de esta entrada.

Actualizaciones

7/3/2007
  • #2 - bueno, sigo con los errores pero involuntarios, el diagrama que representa el diseño incorrecto tenía de más la flecha que va de Presentación a Dominio. Si vuelven a observar el "sistema base" verán llamadas a ambas capas únicamente desde los módulos (index.php, listado_usuario.php, etc).
  • #1 - cometí un error en describir el contexto de las preguntas del cuestionario. Describí con palabras index->presentación->persistencia y debería ser index->presentación->dominio->persistencia (exactamente lo que dice el diagrama)

31 comentarios:

Unknown dijo...

Hola enrique,

Bueno, me parece justo completar el proyecto para la semana 3, pero podrias darnos alguna otra referencia (letra) para tener una idea mas amplia de lo que necesitas que entreguemos ???, mas que nada sobre lo que se pide representar en codigo php sobre la dependencia entre elementos ??
No tengo mucha idea sobre eso, y me gustaria leer para realizar lo que pides :)

Gracias
Berenice

Anónimo dijo...

Hola Enrique.

Esta vez he leído dos veces ;) ¿Para cuándo y dónde las correcciones? Más que nada para... no repetir los mismos errores.

Saludos y gracias.

PD: Yo, por ejemplo, me había percatado del 'fallo' del campo Nombre en el formulario (que no servía de nada) pero no pensé (aún cuando parecía 'intencionado') que eso había que incluirlo en la documentación solicitada. Interpreté que se trataba de documentar lo que se nos daba hecho, estuviera bien o estuviera mal.

jelarrosa dijo...

Hola Enrique:
en las preguntas sobre dependencia planteadas me quedan dudas:

se podría aclarar un poco mas para evitar confusiones, se refiere a la dependencia de index con presentación y/o de presentación con persistencia, para ambas preguntas?
muchas gracias
jose enrique

Enrique Place dijo...

Estimada Bernice:

> sobre lo que se pide representar en
> codigo php sobre la dependencia
> entre elementos ??

Todas las semanas se plantean "desafíos" (literalmente, no les estoy dando nada digerido)... con la finalidad de obligarlos a investigar y a razonar, para que finalmente ustedes lleguen a una conclusión.

Las preguntas están pensadas para "romper" esquemas, para "bloquearlos"; les estoy colocando de repente una pared delante. Aunque parece que no tiene salida, sí existe, y justamente los estoy obligando a que pasen por ese camino alternativo.

> No tengo mucha idea sobre eso, y
> me gustaria leer para realizar lo
> que pides :)

Justamente, van a tener que leer y principalmente razonar... la respuesta no está concretamente en ningún manual.

Se obtiene razonando, lo cual significa que deben integrar lo que han leído hasta el momento y aplicar todos esos conocimientos.

Enrique Place dijo...

Estimado jelarrosa:


> en las preguntas sobre
> dependencia planteadas me quedan
> dudas:

Como le contestaba a Berenice, esa es la idea de las preguntas, hacerlos dudar ;-)

> se podría aclarar un poco mas
> para evitar confusiones, se
> refiere a la dependencia de index
> con presentación y/o de
> presentación con persistencia,
> para ambas preguntas?

Bien, corregí la letra porque había un error, solo estaba tratando de describir con palabras el diagrama UML (me había olvidado de agregar el paquete Dominio):

"Según el diagrama correcto la clase Index depende del paquete Presentación, el paquete Presentación depende del paquete de Dominio, y el paquete de Dominio del paquete de Persistencia."

La preguntas se aplican "exactamente" a este contexto.

PD: no están en la orilla de la playa... ya nos estamos metiendo en "aguas turbias".

Federico dijo...

Manos a la obra!

Por cierto, los trabajos de la semana 2 serán corregidos o habrá algun tipo de resumen de errores? o simplemente juntarás esos trabajos con los de esta semana?

Saludos.

Enrique Place dijo...

Estimado Federico:

> Manos a la obra!

¡Esa es la actitud! ;-)

> Por cierto, los trabajos de la
> semana 2 serán corregidos o habrá
> algun tipo de resumen de errores? o
> simplemente juntarás esos trabajos
> con los de esta semana?

Ya están todos corregidos pero quiero ver de revisarlos y armarles un complemento para que sea fácil detectar cuales fueron los problemas, y en segunda instancia, de afirmar donde hubieron más dudas (explicaciones en el blog o screencasts).

El tema es que además, tengo que coordinar el grupo de prueba de líderes y desarrolladores, por lo que estoy buscando un sponsor para que me pague un sueldo ;-)

PD: suerte que estoy en mi última semana de licencia ;-)

lisandro dijo...

Adsense es un buen sponsor !, o un "Donate" de paypal ¿no? o_-. Ya que estamos integrando herramientas...

Anónimo dijo...

Este taller es un fiasco. Mi usuario es AIRAOLA, borradme por favor

Federico dijo...

Este taller no sirve, mi usuario es enriqueplace, borradme por favor XD

Que listos que son algunos ^^!




Gracias por la respuesta Enrique, tu familia nos debe querer matar por aprovecharnos en tu semana de vacaciones jeje

Anónimo dijo...

Enrique: ¿No deberiamos aplicar en esto el patron de diseño Transfer Object?

Dolors Reig (@dreig) dijo...

Gracias por tu esfuerzo, Enrique. Lo de tu semana de vacaciones "me ha llegado" ;)

Me considero también amante de las causas perdidas porque aunque se pierda (que sé que no será el caso), cada error es aprendizaje y un paso más hacia algo mejor.
Saludos a ti y al resto de compañeros.
¡Ánimo!

Enrique Place dijo...

Estimado Talibán Anónimo:

> Este taller es un fiasco. Mi
> usuario es AIRAOLA, borradme por
> favor

Me vas a tener que dar más datos, pues no hay ningún usuario con ese nombre.

PD: te hubiera salido mejor la jugada si hubieras sacado el nombre de alguno de los usuarios existentes, generando tal vez alguna duda, pero no, mejor suerte en la próxima. ;-)

edrop14 dijo...

Bueno acabo de ver los resultados y analizando los otros trabajos con mayor puntuacion espero la explicacion de enrique para todos aclarando cada punto q se toco en la primera entrega.

en cuanto a lo de sponsor que Enrique lo dijo como broma si se toma enserio cuenten conmigo nada mas haciendo los requerimientos hasta ahora e aprendido muchisimo asi que cuente conmigo para lo que salga.

Enrique Place dijo...

Estimado Lisandro:

> Adsense es un buen sponsor !, o un
> "Donate" de paypal ¿no? o_-. Ya que
> estamos integrando herramientas...

Ojo, lo del sponsor lo digo ahora en broma, no se me ocurrió en ningún momento solicitar ahora apoyo monetario para este taller "piloto". En primera instancia lo quiero hacer con la mayor libertad posible pues estoy investigando muchos temas juntos en este proyecto y no deseo repetir los mismos caminos de otras experiencias similares (si las hubiera). Quiero ver hacia donde puedo ir, que cambios debo hacer sobre la marcha y como van respondiendo los usuarios.

Para una segunda etapa estudiaré las opciones que tengo y si puedo seguir haciendo un modelo "diruptivo" de curso (tengo unas ideas germinando, pero todavía no es el momento para comentarlo ;-)).

Enrique Place dijo...

Estimado Federico:

> Gracias por la respuesta Enrique,
> tu familia nos debe querer matar
> por aprovecharnos en tu semana de
> vacaciones jeje

El tema ya había empezado mucho antes de mis vacaciones (el taller es un compilado de experiencia e ideas de hace muchos años)... pero bueno, mi esposa y mis hijas ya me están colocando horarios para estar delante del pc, así que cuando todas duermen las madrugadas son mías ;-)

PD: ni te digo cuando tengo que pelear por estar delante del teclado con mi hija mayor de 3 años. Ya hace un rato usa Internet con bastante soltura y esta semana la pesqué jugando con ArgoUML, que lo ejecutó ella sola y luego se puso a jugar con los diagramas UML.

En cualquier momento le pido una mano ;-)

Enrique Place dijo...

Estimado Marcio99:

> Enrique: ¿No deberiamos aplicar
> en esto el patron de diseño
> Transfer Object?

Esa es la discusión habitual que tengo en este momento con un pequeño grupo de líderes que estoy usando como conejillos de indias para tener pronta la metodología de trabajo e integrarlos a ustedes en los desarrollos de la "empresa virtual".

Nuestro objetivo debe ser claro: este taller es para tratar de afirmar conceptos base de OO, no es sobre patrones de diseño.

Con gusto haría ese taller pero en otro momento, primero quememos etapas y veamos hasta donde llegamos y cómo, luego con más experiencia veré como seguimos.

Enrique Place dijo...

Estimado Dreig:

> Gracias por tu esfuerzo,
> Enrique. Lo de tu semana de
> vacaciones "me ha llegado" ;)

Bueno, tampoco es para tanto, me sacrifico detrás de una idea pero disfruto del desafío ;-)

> Me considero también amante
> de las causas perdidas porque
> aunque se pierda (que sé que no
> será el caso), cada error es
> aprendizaje y un paso más hacia
> algo mejor.

Esa es la idea... sugiero leer sobre Constructivismo y se darán cuenta que muchas decisiones están basadas en esta corriente pedagógica.

Enrique Place dijo...

Estimado Mario:

> Lo del adsense o el paypal no

Lo veremos más adelante, luego de terminar con esta experiencia.

> para seguir el taller, yo gustoso
> haria un donativo para que el
> taller siga adelante y se

Gracias por el apoyo ;-)

> convierta en una institucion en
> la internet, una especie de curso
> permanente de programacion
> senior :) no seria mala idea
> verdad?

No, no es mala, pero ya tengo germinando otras, pero primero quiero aprender de esta experiencia.

> Gracias a enrique y sus
> amigos por su tiempo, aunque ya
> se empieza a parecer a algunos
> profesores terribles de mi epoca
> de universidad recuerdos de hace
> dos años ;) jeje pero asi se
> aprende con mucha disciplina !

En parte, como decía, el Constructivismo lo plantea así:

"Aprender es, por lo tanto, un esfuerzo muy personal por el que los conceptos interiorizados, las reglas y los principios generales puedan consecuentemente ser aplicados en un contexto de mundo real y práctico. De acuerdo con Jerome Bruner y otros constructivistas, el profesor actúa como facilitador que anima a los estudiantes a descubrir principios por sí mismo y a construir el conocimiento trabajando en la resolución de problemas reales o simulaciones, normalmente en colaboración con otros alumnos. Esta colaboración también se conoce como proceso social de construcción del conocimiento".

La idea es plantearles simulaciones de la realidad: la empresa SurForce, los requerimientos, los grupos de trabajo, etc.

Lo mismo hago en mis cursos presenciales y me ha resultado muy efectivo ;-)

Gracias por el apoyo.

Enrique Place dijo...

Estimado edrop14:

> Bueno acabo de ver los
> resultados y analizando los otros
> trabajos con mayor puntuacion
> espero la explicacion de enrique
> para todos aclarando cada punto q
> se toco en la primera entrega.

No te olvides lo que voy comentando, más que una evaluación fría de ustedes es una guía para definir los próximos pasos, por consiguiente los puntajes marcan detalles que veo basados en mi opinión personal, la cual muchos pueden discrepar.

De todas formas, tengo que volver a revisar cada nota para no cometer errores.

> en cuanto a lo de sponsor que
> Enrique lo dijo como broma si se
> toma enserio cuenten conmigo
> nada mas haciendo los
> requerimientos hasta ahora e
> aprendido muchisimo asi que
> cuente conmigo para lo que salga.

Bueno, primero terminemos la experiencia y luego vemos de conseguir sponsor, ok? ;-)

Unknown dijo...

Buenos dias, ya he leido sobre las dudas, el problema es que no tengo dudas con respecto a los conocimientos a aplicar, sino al planteo de la pregunta en si, estoy claro en:

- ¿Cómo se representa en código PHP la existencia de una dependencia entre estos elementos?

Sin embargo, no entiendo bien:

- ¿Analizando estas dependencias en sentido inverso, cómo se representa en código PHP?

Enrique (ó alguien que haya entendido mejor el planteamiento) podria orientarme un poquito más para entender mejor?

saludos a todos y a seguir con ganas :).

Enrique Place dijo...

Estimado Oscar:

> Sin embargo, no entiendo bien:
> - ¿Analizando estas
> dependencias en sentido inverso,
> cómo se representa en código PHP?

Bueno, pero esa es la idea de la pregunta... confundirlos. Si has entendido los conceptos y respondido la primer pregunta con seguridad, esta es inmediata. El tema es que tienes que razonarla.

> Enrique (ó alguien que haya
> entendido mejor el planteamiento)
> podria orientarme un poquito más
> para entender mejor?

Lo importante de esta pregunta no es concretamente la respuesta, es todo el camino que tienen que hacer para responderla.

Lo mejor es que intentes solo hasta que saques la respuesta. Es mucho más simple de lo que parece.


> saludos a todos y a seguir con
> ganas :).

Adelante! ;-)

Anónimo dijo...

> Este taller es un fiasco

Yo no diria un fiasco, pero no me a llenado el ojo, y lo digo con pena. Si a todas las preguntas respondes que la intencion es mostrar el camino y demas sandecez, es que no conoces las respuestas!

Enrique Place dijo...

El mismo Anónimo de siempre:

> Yo no diria un fiasco, pero no
> me a llenado el ojo, y lo digo con
> pena. Si a todas las preguntas
> respondes que la intencion es
> mostrar el camino y demas sandecez,
> es que no conoces las respuestas!

¿Tus padres te dejan estar mucho tiempo solo delante del pc? ;-)

Es cómico porque apuesto todo el dinero del mundo que ni siquiera te registraste en el taller, segundo, ni siquiera debes haber mandado el trabajo de la semana, o sea, estás hablando de "boca floja" y por que Internet es gratis ;-)

Burzak dijo...
Este comentario ha sido eliminado por el autor.
Burzak dijo...

Buenas enrique, estoy trabajando sobre el taller y me surgio una duda sobre "Consultas de Usuarios incompleta"... entiendo que debo documentar los pasos de esta parte del sistema y realizar un "Diagrama de Secuencia" pero debo también presentar una solución para el error en la busqueda? Osea realizar un "parche", documentarlo e enviartelo también?

Otra duda es que dices que se agrego el campo descripción que se solicita agregar al sistema de consultas... las preguntas son las mismas que para la anterior.

Saludos.

PD: Como no lo pides explicitamente me entra la duda sobre si estoy en lo correcto o no, pero si no pides que desarrollemos y solo documentemos se puede lograr una tarea, y si pides que desarrollemos también se puede lograr la tarea... en ambos casos te puedo entregar algo, en uno bien y en le otro mal :-S

Enrique Place dijo...

Estimado Darío:

Ya veo que el sentido común es el menos común de los sentidos ;-)


> duda sobre "Consultas de Usuarios
> incompleta"... entiendo que debo
> documentar los pasos de esta
> parte del sistema y realizar un
> "Diagrama de Secuencia" pero debo
> también presentar una solución
> para el error en la busqueda?
> Osea realizar un "parche",
> documentarlo e enviartelo
> también?

Bueno, "error" no fue, fue un olvido calculado ;-)

Cuando se dice "documentar" es eso, ustedes me deben entregar un documento que explique qué hicieron, pero para poder hacer el documento van a tener que implementarlo a partir de los fuentes que tienen.

Es solo una formalidad... no me manden los fuentes de lo que hicieron, compartan un documento que explique qué se hizo. Nada más.


> Otra duda es que dices que se
> agrego el campo descripción que
> se solicita agregar al sistema de
> consultas... las preguntas son
> las mismas que para la anterior.

Es lo mismo. Implementalo en tu versión del sistema pero al gerente debes hacerle un documento que explique que fue que se hizo.

Traten de ser sintéticos.

> lo correcto o no, pero si no
> pides que desarrollemos y solo
> documentemos se puede lograr una
> tarea, y si pides que
> desarrollemos también se puede
> lograr la tarea...

Te estás mareando con las palabras, aquí nadie te dijo que no lo desarrolles, solo te estoy diciendo qué es lo que debes entregarme... un documento.

;-)

Burzak dijo...

>Ya veo que el sentido común es el
>menos común de los sentidos ;-)

ajajajaj... cuando no yo dando la nota xD

Muchas gracias por la respuesta... me pongo a trabajar y veo que sale :-P ... tengo mucho para hacer :-D

Saludos.

Anónimo dijo...

Hola una vez más.

Creo que mi sentido común anda también algo despistado :S ¿podrías orientarme?

Sobre el formulario de búsqueda ¿he de suponer que sólo se buscara por un único campo cada vez? Me explico (o lo intentaré): Yo he implementado la búsqueda por nombre siguiendo 'la lógica' del sistema. Pero de este modo, si por casualidad introduces el id 2 y el nombre Enrique... mostrará el usuario Marcelo, que es el que se corresponde con el susodicho ID.

Además... el campo descripción, controlado, pero de forma tal que sólo muestra un úncio usuario (cuando la idea, supongo, es poder buscar y mostrar de, por ejemplo todos los desarrolladores)

Lo primero lo hice así por aquello de que no se pueden sobrecargar los métodos en PHP5 (estuve buscando, hay una forma, algo engorrosa, con __call), pero aún así no sé si cumpliría CORRECTAMENTE con los requirimentos. Mucho me temo que no, pero mientras sigo pensando otra cosa, espero, pro favor, alguna respuesta... que tendré que esperar paciente, por eso de las diferencias de horarios.

Saludos y gracias.

Enrique Place dijo...

Estimado David:

> Creo que mi sentido común
> anda también algo despistado :S
> ¿podrías orientarme?

Parte de los grandes problemas de un proyecto es la comunicación, y en este caso, entender cabalmente los requerimientos, que podrían ser de tu propio jefe o del cliente.

> Sobre el formulario de
> búsqueda ¿he de suponer que sólo
> se buscara por un único campo
> cada vez? Me explico (o lo

Sean pragmáticos, la idea no es hacer grandes sistemas ni evitar equivocarse, la idea es integrar muchos conceptos con ejercicios sencillos.

En este caso, no contemplen todas las posibles opciones, asuman que se usa un campo a la vez.

> Lo primero lo hice así por
> aquello de que no se pueden
> sobrecargar los métodos en PHP5
> (estuve buscando, hay una forma,
> algo engorrosa, con __call), pero
> aún así no sé si cumpliría

¡Tranquilo! ¿Vimos algo de eso? Lo fundamental son los conceptos, no se vayan al infinito y más allá ;-)

Anónimo dijo...

Gracias Enrique.

Sé que haces especial énfasis en el aspecto de la comunicación, y le doy muchas vueltas antes de usar la opción de preguntar, de comentar (y no dejarme llevar por el impulso y quedar como un 'impaciente'). Sé que si hubiera una prueba de esta índole (evaluación de la comprensión) me quedaría fuera del taller... y es precisamente lo que no quiero.

Me lo tomo muy en serio, es importante para mi, y no quiero quedarme fuera (de ahí que evite el equivocarme).

Saludos y gracias otra vez.

Entradas populares