lunes, enero 28, 2008

EJB 3.1: No necesitas interfaces si total no vas a hacer tests

lunes, enero 28, 2008 por Martín

El viernes pasado TheServerSide publicaba un artículo sobre EJB 3.1 que habla de dos de las novedades de EJB 3.1: las interfaces opcionales y los singleton.

Atención a lo que su autor escribe en un momento dado respecto a las interfaces opcionales:

Interface-based programming is clearly a useful technique in writing loosely-coupled, unit-testable applications. That is precisely why both EJB 2.1 and Spring promote the idea of component interfaces. In fact, at least one interface is required even for EJB 3.0 Session Beans (this is not a requirement for EJB 3.0 Message Driven Beans).

Bien, hasta ahora todo bien. Ojo al siguiente párrafo que no tiene desperdicio:

The trouble is that component interfaces are just a needless abstraction in a lot of circumstances. I can't remember the times I silently cursed under my breath as I carried out the mechanical task of writing interfaces just because the framework needed it or the architect sitting in some ivory tower mandated it. A lot of times, just a regular Java object is really all you need for your foreseeable needs, especially if you don't really do much unit testing and loose-coupling is just not enough of a concern for the application.

Me pierdo un poco en este párrafo. Corregidme si me equivoco, pero me parece entender que ahora ya no necesitamos las interfaces porque hay ocasiones en que, total, no vamos a hacer tests unitarios, y que no nos preocupa el acoplamiento entre los componentes.

Yo creo que a veces todo esto de los hands-on architects, pragmatic architects, etc. se le va a la gente tan de las manos, que hasta se utiliza para justificar lo injustificable. Señores autores de la especificación de EJBs (sé que no me leen, no sé para que me dirijo a ellos), el desarrollo basado en interfaces es fundamental dentro de la programación de componentes ya que la testabilidad y el desacoplamiento son características fundamentales en estos sistemas. Y les pese o no, un EJB es exactamente eso, un componente. Es lo que ha sido siempre, y tampoco hay ido tan mal (al menos desde EJB 2.x).

Una cosa está clara, y ha sido así toda la vida. El que mucho abarca, poco aprieta. Y está claro que estos señores quieren abarcar mucho. Demasiado. Incluso a expensas de sugerir cosas como no hacer tests unitarios. En fin, cuando lees estas perlas de un miembro de la spec. de EJB 3 y JEE 6, y autor de EJB3 in Action, te das cuenta del despropósito total y el sin sentido que ha sido esta tecnología durante todo este tiempo.

Más les valdría haber estandarizado Spring y mantener EJB 2.x que tampoco era tan malo.

comments

4 Respuestas a "EJB 3.1: No necesitas interfaces si total no vas a hacer tests"
chuidiang dijo...
16:00

Hola:

Desde luego, en proyectos serios y de cierta embergadura es impensable no usar interfaces y test unitarios.

Sin embargo, no hay que olvidar el motivo de las cosas. Las interfaces y test unitarios son buenas prácticas siempre que el código se pretenda que sea reutilizable, susceptible de sufrir modificaciones más adelante, etc, etc -en el 99% de los casos-.

Para hacer un programa rápido de usar y tirar, las interfaces y test son perder el tiempo. Y todos sabemos que eso de los EJBs es para perder el tiempo ;-)

Se bueno.


Martín dijo...
12:24

Efectivamente. En los programas de usar y tirar probablemente no nos molestemos en hacer tests, ni diseño de componentes, ni nada de nada.

Y es más, el 99% de las ocasiones ni siquiera usaremos EJBs. Y es que estos señores de la especificación de EJB están empeñados en que usemos su martillo para matar toda mosca viviente. Y si para ello tienen que darnos un martillo más pequeño y de goma, nos lo dan.


LucioX dijo...
21:20

El EJB 2.1 comparado con EJB3 o Spring es una autentica basura. Si dices que no es tan malo es porque no lo tuviste que sufrir. Es peor que las hemorroides


Unknown dijo...
11:34

El ejb 2.x no es tan malo!!!!

No sé en qué estarías pensando cuando escribiste esto. Es malo a nivel de concepto, de rendimiento, de utilidad, dependencia brutal del IDE... EJB 3 hace mucho más por menos, aunque igualmente no se puede justificar utilizar ejb's para todo.

El problema de fondo de todo esto es que el arquitecto flipado de turno tiene la maravillosa idea de enchufar EJB's para hacer _cualquier_ cosa y está claro que no se hicieron para eso los ejb's.

Y lo que dicen los señores estos de la especificación me parece que está totalmente justificado. Para qué crear interfaces si total en muchas veces no las necesitas y sólo hacen que molestar. Pues se hace opcional.

A ver si aprendemos que esto de imponer una arquitectura es nefasto. Es mucho mejor que cada uno se saque las castañas del fuego como pueda y que considere si necesita o no esas interfaces. Ponerlas como obligatorias cuando en realidad no son necesarias (como ya se ha comprobado) no va a hacer un programa más robusto ni va a mejorar los patrones de diseño de la gente (se aplican los patrones muchas veces por aplicar y porque queda "guay") ni va a hacer nada de nada más que molestar.

Cada uno debería ser responsable de su formación y de hacer las cosas bien (y por bien me refiero , a hacer lo justo y necesario con la calidad que corresponda al proyecto, nada de Overengineering por capricho).

Desgraciadamente esto sería en un mundo ideal y muchas veces te encuentras auténticas basuras que te toca mantener/ampliar por ahí...

Todo esto es cosa de la informática que no está muy madura.

En fin, estoy muy quemado del curro... ¿se nota, no? XD