En esta página se pondrán algunas noticias importantes relacionadas con Java.
miércoles, 25 de abril de 2012
martes, 24 de abril de 2012
Struts
Realmente son dos frameworks que por el nombre parecen bastante similares, sin embargo hay que decir que existen actualmente muchas diferencias entre ellos. La comparativa oficial está en la página web de apache http://struts.apache.org/2.1.
Clases Action
Struts1
Se Requiere extender de la una clase Action abstracta, el problema común en Struts1 reside en que se programan clases abstractas en lugar de interfaces.
- Recordamos que los interfaces no se extienden si no que se implementan y las clases abstractas por el contrario sí.
- Las clases abstractas pueden tener métodos concretos y otros abstractos, sin embargo los interfaces solo pueden contener métodos abstractos.
Struts2
Un Action puede implementar una interfaz Action, además de otras interfaces que le permitan integrar mas servicios. Struts2 provee de una clase base ActionSupport que implementa las interfaces comúnmente usadas. Además esta interfaz no es requerida. Cualquier POJO con un método de ejecución puede ser usado como Action en Struts2.
Modelo de hilos
Struts1
Las Actions implementan el patrón singleton y deben ser thread-safe por lo que puede haber solo una instancia de una clase para manejar todas las peticiones para ese Action. La estrategia singleton pone restricciones sobre lo que podemos hacer con los Actions de Struts1 y se requiere un cuidado extra para desarrollar, a demás, Los recursos usados para los Actions deben ser thread-safe o sincronized.
- Recordamos que Singleton es un patrón de diseño muy utilizado cuyo objetivo es mantener la instancia de un objeto a lo largo de la ejecución de la aplicación, es decir que asegura una única instancia de un objeto. No es muy bueno abusar de Singleton, es mejor la gestión de Hilos de ejecución o Threads para el tema de la seguridad.
Struts2
Los objetos Action son instanciados por cada petición, por lo que no hay problemas de tipo con la seguridad de hilos. En la práctica, los contenedores de servlets generan muchas instancias, así que un objeto mas no representa problemas de rendimiento y de impacto en el garbage collection.
Dependencia de los Servlets
Struts1
Las Actions tiene dependencias de la API de Servlets dado que HttpServletRequest y HttpServletResponse son pasados al método excecute cuando la Action es invocada.
Struts2
Las Actions no están acopladas al contenedor. A menudo el contexto de los servlets esta representado por simples Maps, permitiendo a las Actions ser probadas de forma aislada. Las Actions de Struts2 puede mantener el uso del request y el response si se requiere. De cualquier forma, otros elementos de la arquitectura reducen o eliminan la necesidad de acceder a HttpServetRequest o a HttpServletResponse directamente.
Manejo de pruebas
Struts1
El principal obstáculo para las Actions de Struts1 es que la ejecución de métodos requiere de la API de Servlets. Una extensión de terceras partes, como Struts TestCase, que ofrece un conjunto de simuladores para objetos de Struts1.
Struts2
Las Actions pueden ser probadas instanciado la Action, estableciendo propiedades e invocando métodos. El soporte a la Inyección de Dependecias permite hacer las pruebas de forma simple.
Recolección de datos de entrada
Struts1
Es necesario el uso de un objeto ActionForm para capturar las entradas. Como las Actions, todos los ActionForm deben extender de una clase. Como algunos JavaBeans no implementan de ActionForm los desarrolladores a menudo crean clases redundantes para capturar a las entradas. Los DynaBeans pueden ser usados de forma alternativa para crear clases ActionForm convencionales, pero, los desarrolladores deben JavaBeans existentes.
Struts2
Usa las propiedades de las Actions para manejar las entradas, elimina la necesidad de un segundo objeto de entrada. las propiedades de entrada pueden ser objetos de una amplia variedad que incluso pueden tener sus propias variables. Las propiedades de las Action pueden usadas por la pagina Web por medio de los TagLibs. Struts2 soporta incluso el patrón de ActionForm, asi como objetos y acciones POJO. Tipos de objetos, incluyendo negocios o objetos de dominio, pueden ser usados como objetos en entrada y salida. La característica ModelDriven simplifica las referencias por taglib a objetos POJO.
Lenguaje de Expresiones
Struts1
Esta integrado con JSTL, así que usa el JSTL EL. El EL tiene una traza grafica de objetos básica y una relativamente pobre colección e indexación de soporte a propiedades.
Struts2
Puede usarse JSTL, pero el marco de trabajo soporta ademas un lenguaje de expresiones mas poderoso y flexible llamado "Object Graph Notation Language" (OGNL)
Vinculación de objetos de la vista
Struts1
Usa el mecanismo estándar de JSPS para el vincular objetos en el contexto de las páginas.
Struts2
Usa una tecnología llamada "ValueStack" donde los taglibs pueden acceder a valores sin estar acoplados a la vista donde el tipo de objeto se renderea. La estrategia del "ValueStack" permite reutilizar vistas gracias al rango de variables que pueden tener el mismo nombre pero tipo diferente tipos de propiedades.
Conversion de tipo
Struts1
Las propiedades de los ActionForm son usualmente Strings. Struts1 usa comúnmente Commons-Beanutils para la conversión de tipos. Las conversiones son configurables por clase y no por instancia.
Struts2
Usa OGNL para la conversión de tipos. El marco de trabajo incluye convertidores para objetos básicos y tipos primitivos.
Validación
Struts1
Soporta validación manual por medio de métodos en el ActionForm, o a través de una extensión de los Commons Validator. Las clases pueden tener diferentes contextos de validación para la misma clase, pero no pueden encadenar validaciones en sub objetos.
Struts2
Soporta validación manual por medio de métodos y por el marco de trabajo XWork Validation. El XWork soporta encadenamiento de validaciones en las subpropiedades usando las validaciones definidas para las propiedades de la clase y el contexto de validación.
Control de la ejecución del Action
Struts1
Soporta Request Porcessors (Ciclos de vida) separados por cada módulo, pero todas las Actions en el módulo deben compartir el mismo ciclo de vida.
Struts2
Soporta ciclos de vida diferentes, uno por Action por medio de la pila de interceptores. Pilas configurables pueden ser creadas y usadas con diferentes Actions si es necesario.
Fichero de configuración
Struts1
El fichero de configuración de struts se llama struts-config.xml.
Struts2
En este caso se llama struts.xml.
Maven
Pintando la Mona Lisa
Realmente me peleo todos los días con Maven en el trabajo, y siempre he querido meterme de lleno en el mundo de la programación Java. sin embargo hasta que no te lanzas a crear un proyecto por tu cuenta, no te surgen cosas como ... ¿Qué se supone que pinta Maven en todo esto?
Yo pensaba que era como una especie de herramienta para desplegar .wars (y para crearlos claro está), sin embargo, mi sorpresa ha llegado esta tarde, cuando me he decidido a intentar montar un proyecto web con java. Mi pasión siempre ha sido desarrollar con PHP y avanzar sobre este lenguaje de programación ... pero ya que utilizo Java en el trabajo, ¿por qué no empezarlo a utilizar para mis proyectos personales?, tiene la ventaja de complementar lo que aprenda en un sitio y en otro.
Me ha llevado varias semanas decidirme si desarrollar en una tecnología o en otra ... y no me ha costado poco ... Utilizar PHP cuando lo dominas es fácil, sencillo y para toda la familia. El ser humano es reacio al cambio, no nos gusta cambiar viejos hábitos, tenemos miedo a lo desconocido. Java es ese cabrón que te obligar a aprender mil cosas y a cambiar el "chip", por lo tanto y como bien ha dicho un reciente amigo mío ...
¿Tú te crees que la Mona Lisa se pintó en 3 minutos ... ?
Me imagino que hacer un proyecto personal, cuesta mucho esfuerzo y muchas veces lo que estás haciendo no te reporta un beneficio a corto plazo (por ejemplo estudiar una tecnología nueva en el caso de programación, investigación, etc.)
Para conocer por encima que es Maven y para que sirve, tenemos nuestra amada Wikipedia
http://es.wikipedia.org/wiki/Maven
Montarlo sin embargo, es otra cosa ... vamos a configur maven 3 en la distribución Ubuntu 10.04:
1. Nos descargamos maven de: http://maven.apache.org/download.html
2. Desempaquetamos la descarga en nuestro escritorio, en mi caso:
$ tar -xvcf apache-maven-3.0.4.tar.gz
3. Nos creamos una carpeta en esta dirección.
$ sudo mkdir /usr/local/apache-maven
4. Copiamos de nuestro el archivo que hemos descomprimido en nuestro escritorio (/home/Mist/Escritorio/maven...) a esta ruta /usr/local/apache-maven
5. Añadimos al PATH del sistema a Maven:
$ gedit ~/.bash_profile
JAVA_HOME=”/usr/lib/jvm/java-6-openjdk”
M2_HOME=”/usr/local/apache-maven/apache-maven-3.0.2″
MAVEN_HOME=”/usr/local/apache-maven/apache-maven-3.0.2″
M2=”/usr/local/apache-maven/apache-maven-3.0.2/bin”
Y luego nuestro PATH debería quedar tal que así:
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games”
Montarlo sin embargo, es otra cosa ... vamos a configur maven 3 en la distribución Ubuntu 10.04:
1. Nos descargamos maven de: http://maven.apache.org/download.html
2. Desempaquetamos la descarga en nuestro escritorio, en mi caso:
$ tar -xvcf apache-maven-3.0.4.tar.gz
3. Nos creamos una carpeta en esta dirección.
$ sudo mkdir /usr/local/apache-maven
4. Copiamos de nuestro el archivo que hemos descomprimido en nuestro escritorio (/home/Mist/Escritorio/maven...) a esta ruta /usr/local/apache-maven
5. Añadimos al PATH del sistema a Maven:
$ gedit ~/.bash_profile
JAVA_HOME=”/usr/lib/jvm/java-6-openjdk”
M2_HOME=”/usr/local/apache-maven/apache-maven-3.0.2″
MAVEN_HOME=”/usr/local/apache-maven/apache-maven-3.0.2″
M2=”/usr/local/apache-maven/apache-maven-3.0.2/bin”
Y luego nuestro PATH debería quedar tal que así:
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games”
A la ruta ->
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/apache-maven/apache-maven-3.0.2/bin”
Ya tenemos instalado el condenado MAVEN, por supuesto, tenemos que reiniciar el equipo para que las variables de entorno tomen posesión y para probar si hemos hecho bien los deberemos ejecutamos el siguiente código:
$ mvn --version
Si nos aparece la versión de Maven es un logro ... si no nos aparece repasamos los pasos anteriores. De todos modos, si existe alguna pregunta, dejadla por aquí y me ocuparé de solucionarla.
Mistmoore.
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/apache-maven/apache-maven-3.0.2/bin”
Ya tenemos instalado el condenado MAVEN, por supuesto, tenemos que reiniciar el equipo para que las variables de entorno tomen posesión y para probar si hemos hecho bien los deberemos ejecutamos el siguiente código:
$ mvn --version
Si nos aparece la versión de Maven es un logro ... si no nos aparece repasamos los pasos anteriores. De todos modos, si existe alguna pregunta, dejadla por aquí y me ocuparé de solucionarla.
Mistmoore.
lunes, 16 de abril de 2012
MVC, ingenio y figura.
MVC, ¿No es una unidad del Starcraft?
Para todos aquellos que no sepan lo que es un *MVC (Modelo Vista Controlador ò Model View Controller en Shekespeare), se trata de un patrón de diseño muy utilizado en los lenguajes de programación para diferenciar las diferentes áreas que componen una arquitectura de Software. Sin embargo no es simplemente un patrón, yo lo definiría también como un método de trabajo y una forma elegante de particionar el trabajo entre las diferentes capas que componen la forma de una aplicación.
Cuando estamos construyendo nuestra aplicación, en nuestro equipo a demás de existir programadores (dependiendo de la magnitud del mismo) podrán existir Analistas, Diseñadores, Administradores de Bases de datos, maquetadores, especialistas en pruebas, jefes de proyecto, etc. Todos estos encajan de alguna manera u otra en este famoso MVC.
Estupendo Sigo pensando que era el cacharro que recoge recursos en el Starcraft ...
Cuando realizamos el diseño de una aplicación, en nuestro flujo de datos, siempre existen tres componentes mínimos:
1. El interfaz del usuario (Esa pantalla que muestra los datos)
2. El controlador (Hablaríamos de todas esas funciones, métodos, propiedas, flujos de datos, if-elses, Fors, etc ...)
3. El modelo (Acceso a datos persistentes)
Para todos aquellos que no sepan lo que es un *MVC (Modelo Vista Controlador ò Model View Controller en Shekespeare), se trata de un patrón de diseño muy utilizado en los lenguajes de programación para diferenciar las diferentes áreas que componen una arquitectura de Software. Sin embargo no es simplemente un patrón, yo lo definiría también como un método de trabajo y una forma elegante de particionar el trabajo entre las diferentes capas que componen la forma de una aplicación.
Cuando estamos construyendo nuestra aplicación, en nuestro equipo a demás de existir programadores (dependiendo de la magnitud del mismo) podrán existir Analistas, Diseñadores, Administradores de Bases de datos, maquetadores, especialistas en pruebas, jefes de proyecto, etc. Todos estos encajan de alguna manera u otra en este famoso MVC.
Estupendo Sigo pensando que era el cacharro que recoge recursos en el Starcraft ...
Cuando realizamos el diseño de una aplicación, en nuestro flujo de datos, siempre existen tres componentes mínimos:
1. El interfaz del usuario (Esa pantalla que muestra los datos)
2. El controlador (Hablaríamos de todas esas funciones, métodos, propiedas, flujos de datos, if-elses, Fors, etc ...)
3. El modelo (Acceso a datos persistentes)
¿Lo sigues sin ver claro?
Vamos a ver un ejemplo de cada una de las capas (existen proyectos que tienen más de estas tres capas, pero estas son las tres básicas):
Vista, ¡Anda, como el Güido!
Cuando hablamos de vista, ni hablamos de la nueva PSP ni del truño de Windows Vista ... Hablamos del interfaz que vamos a mostrar al usuario. Como bien sabemos, las personas que deberían tocar la vista no deben por que saber programar, por lo tanto en esta capa deberíamos de incluir lo mínimo de flujos o podemos tener algunos problemas bastante serios (cuando un maquetador ve un "foreach" o un "if" lo que realmente está leyendo es: "wachu chuwa aipe")
Ponemos el ejemplo de una página web, donde el maquetador tocaría su hoja de estilos (CSS) y cambiaría a su voluntad para hacer la aplicación más agradable al usuario. En el caso de diseñadores, indicarían la distribción óptima de elementos para accesibilidad e usuarios (en el caso de usuarios discapacitados). De lenguajes en este caso sería Html.
Modelo, ¿Qué coño tiene que ver aquí la Schiffer?
Todos nos imaginamos a una mujer 90 - 60 - 90, sin embargo nos referimos al acceso a la BASE de DATOS. Normalmente en un proyecto el acceso a este tipo de capas se reserva para los programadores más experimentados o Administradores de la base de datos. El diseño de una base de datos es bastante comlicado y que funcione todo correctamente es experiencia de muchos años metiendo la pata. Las consultas, agregado, actualizado, etc. suele ser muy delicado, por ejemplo traerse datos críticos de usuarios es complejo, o por ejemplo el borrado de la tabla de usuarios mediante inyecciones. El lenguaje por excelencia es SQL (Simple Query Languaje)
En nuestra aplicación normalmente traemos los datos de una base de datos (Oracle, Mysql, Sql Server) y los mostramos por pantalla a través de un interfaz (Vista). Sin embargo algunas veces queremos hacer una validación de esos datos, por ejemplo:
TABLA:
Tendríamos en nuestro modelo:
CONSULTAR.
SELECT Nombre, Apellidos, Direccion, Telefono FROM Usuarios; // Cada vez que alguien hace un SELECT *, Dios mata un gato.
AGREGAR.
INSERT INTO Usuarios VALUES ('Antonio', 'Dorador Plateado', 'C\ Falsa', '23423423');
ACTUALIZAR.
UPDATE Usuarios VALUES (SET Nombre = 'x') WHERE Nombre = 'Pedro';
BORRAR
DELETE FROM Usuarios WHERE Nombre = 'Pedro';
Imaginemos que queremos paginar los datos, necesitamos cláusulas IF, ELSE, FOR, DO WHILE, etc. ¿El encargado de realizar el acceso a datos se ocupa de esto? Desde luego que no, como hemos dicho, la administración de una BBDD es algo muy costoso y delicado, para eso tendremos la siguiente capa, para filtrar los datos y mostrarlos como nosotros queremos y enviárselos a la capa Vista. Por lo tanto el Controlador es como un "pegamento" entre la Vista y el Modelo.
Contolador (No, no voy a hablar de la novia)
Con esta capa nos referimos a la capa que se dedica al tratamiento de datos, recoge los datos de la Base de datos los gestiona y los envía directamente a la Vista. Según el MVC la Vista y el Modelo no se hablan directamente, sólamente a través del controlador. Es como cuando os peleáis los amigos y uno en común os pone deacuerdo. Si tú Modelo se comunica con tú Vista ... entonces te mereces el premio a Anti-patrón de diseño sysdate('yyyy');. Los programadores son los individuos que pululan en esta capa.
Existen miles de lenguajes de programación como C++, C, Java, C#, PHP, Python, Ruby, etc.
Un ejemplo básico de MVC sería:
Para ponernos en situación ...
Nos imaginamos que hemos desarrollado un buscador de personas, animales, cosas o banqueros. Explicaremos que ocurre por debajo en un patrón MVC. Vamos a explicar el patrón a través de una aplicación Web, bajo mi punto de vista es como más claro se ve.
Vista
El usuario está en nuestro buscador de personas y escribe sobre una caja de texto "Pedro" y pulsa el botón "buscar".
Vista -> Controlador
Entraría en nuestro controlador, filtraría el nombre introducido en la caja te texto con funciones como por ejemplo "trim" (quita espacios en blanco a la izquierda ya la derecha del texto), "sanitize" (Evita inyecciones maliciosas), etc.
Controlador -> Modelo.
Una vez el texto es seguro realizamos la consulta correspondiente a la base de datos:
SELECT Nombre, Apellidos, Direccion, Telefono FROM Usuarios WHERE Nombre = parametro_de_entrada; // En este caso Pedro.
Modelo -> Controlador.
La base de datos encontraría un resultado y lo enviaría al controlador, flitramos los datos devueltos:
- Si hay algún resultado pasárselo a la vista.
- Si no existe ningún resultado, mostrar mensaje "No existen resultados para esta búsqueda".
- En el caso de encontrar un banquero, mostramos mensaje: "Error, esto es un buscador de personas".
Controlador -> Vista.

Mostramos que hay correspondencia de datos, escribimos: "Pedro".
De lo que se trata es de ir pasando por las diferentes capas que tienen un único cometido y un tipo específico de persona especialista para cada una de ellas. Para administrar todo esta arquitectura, encontraríamos al jefe de proyecto que controlaría los tiempos de desarrollo, toma de decisiones, etc.
Para dentro de poco, intentaré montar un MVC funcionando integrando las tecnologías de Struts 2 - Spring - Hibernate (como los osos), Maven, etc. Empezaré con Struts2, en Gnu/Linux ubuntu 10,04 (que es en lo que trabajo).
Prometo que lo tendré para pronto.
Mistmoore.
* ¡La unidad del Starcraft es VCE!

Vamos a ver un ejemplo de cada una de las capas (existen proyectos que tienen más de estas tres capas, pero estas son las tres básicas):
Vista, ¡Anda, como el Güido!
Cuando hablamos de vista, ni hablamos de la nueva PSP ni del truño de Windows Vista ... Hablamos del interfaz que vamos a mostrar al usuario. Como bien sabemos, las personas que deberían tocar la vista no deben por que saber programar, por lo tanto en esta capa deberíamos de incluir lo mínimo de flujos o podemos tener algunos problemas bastante serios (cuando un maquetador ve un "foreach" o un "if" lo que realmente está leyendo es: "wachu chuwa aipe")
Ponemos el ejemplo de una página web, donde el maquetador tocaría su hoja de estilos (CSS) y cambiaría a su voluntad para hacer la aplicación más agradable al usuario. En el caso de diseñadores, indicarían la distribción óptima de elementos para accesibilidad e usuarios (en el caso de usuarios discapacitados). De lenguajes en este caso sería Html.
Modelo, ¿Qué coño tiene que ver aquí la Schiffer?
Todos nos imaginamos a una mujer 90 - 60 - 90, sin embargo nos referimos al acceso a la BASE de DATOS. Normalmente en un proyecto el acceso a este tipo de capas se reserva para los programadores más experimentados o Administradores de la base de datos. El diseño de una base de datos es bastante comlicado y que funcione todo correctamente es experiencia de muchos años metiendo la pata. Las consultas, agregado, actualizado, etc. suele ser muy delicado, por ejemplo traerse datos críticos de usuarios es complejo, o por ejemplo el borrado de la tabla de usuarios mediante inyecciones. El lenguaje por excelencia es SQL (Simple Query Languaje)
En nuestra aplicación normalmente traemos los datos de una base de datos (Oracle, Mysql, Sql Server) y los mostramos por pantalla a través de un interfaz (Vista). Sin embargo algunas veces queremos hacer una validación de esos datos, por ejemplo:
TABLA:
Tendríamos en nuestro modelo:
CONSULTAR.
SELECT Nombre, Apellidos, Direccion, Telefono FROM Usuarios; // Cada vez que alguien hace un SELECT *, Dios mata un gato.
AGREGAR.
INSERT INTO Usuarios VALUES ('Antonio', 'Dorador Plateado', 'C\ Falsa', '23423423');
ACTUALIZAR.
UPDATE Usuarios VALUES (SET Nombre = 'x') WHERE Nombre = 'Pedro';
BORRAR
DELETE FROM Usuarios WHERE Nombre = 'Pedro';
Imaginemos que queremos paginar los datos, necesitamos cláusulas IF, ELSE, FOR, DO WHILE, etc. ¿El encargado de realizar el acceso a datos se ocupa de esto? Desde luego que no, como hemos dicho, la administración de una BBDD es algo muy costoso y delicado, para eso tendremos la siguiente capa, para filtrar los datos y mostrarlos como nosotros queremos y enviárselos a la capa Vista. Por lo tanto el Controlador es como un "pegamento" entre la Vista y el Modelo.
Contolador (No, no voy a hablar de la novia)
Con esta capa nos referimos a la capa que se dedica al tratamiento de datos, recoge los datos de la Base de datos los gestiona y los envía directamente a la Vista. Según el MVC la Vista y el Modelo no se hablan directamente, sólamente a través del controlador. Es como cuando os peleáis los amigos y uno en común os pone deacuerdo. Si tú Modelo se comunica con tú Vista ... entonces te mereces el premio a Anti-patrón de diseño sysdate('yyyy');. Los programadores son los individuos que pululan en esta capa.
Existen miles de lenguajes de programación como C++, C, Java, C#, PHP, Python, Ruby, etc.
Un ejemplo básico de MVC sería:
Para ponernos en situación ...
Nos imaginamos que hemos desarrollado un buscador de personas, animales, cosas o banqueros. Explicaremos que ocurre por debajo en un patrón MVC. Vamos a explicar el patrón a través de una aplicación Web, bajo mi punto de vista es como más claro se ve.
Vista
El usuario está en nuestro buscador de personas y escribe sobre una caja de texto "Pedro" y pulsa el botón "buscar".
Vista -> Controlador
Entraría en nuestro controlador, filtraría el nombre introducido en la caja te texto con funciones como por ejemplo "trim" (quita espacios en blanco a la izquierda ya la derecha del texto), "sanitize" (Evita inyecciones maliciosas), etc.
Controlador -> Modelo.
Una vez el texto es seguro realizamos la consulta correspondiente a la base de datos:
SELECT Nombre, Apellidos, Direccion, Telefono FROM Usuarios WHERE Nombre = parametro_de_entrada; // En este caso Pedro.
Modelo -> Controlador.
La base de datos encontraría un resultado y lo enviaría al controlador, flitramos los datos devueltos:
- Si hay algún resultado pasárselo a la vista.
- Si no existe ningún resultado, mostrar mensaje "No existen resultados para esta búsqueda".
- En el caso de encontrar un banquero, mostramos mensaje: "Error, esto es un buscador de personas".
Controlador -> Vista.

Mostramos que hay correspondencia de datos, escribimos: "Pedro".
De lo que se trata es de ir pasando por las diferentes capas que tienen un único cometido y un tipo específico de persona especialista para cada una de ellas. Para administrar todo esta arquitectura, encontraríamos al jefe de proyecto que controlaría los tiempos de desarrollo, toma de decisiones, etc.
Para dentro de poco, intentaré montar un MVC funcionando integrando las tecnologías de Struts 2 - Spring - Hibernate (como los osos), Maven, etc. Empezaré con Struts2, en Gnu/Linux ubuntu 10,04 (que es en lo que trabajo).
Prometo que lo tendré para pronto.
Mistmoore.
* ¡La unidad del Starcraft es VCE!

Suscribirse a:
Entradas (Atom)
