Wrappers de wrappers

Como sabéis, denominamos wrappers, no sólo a las clases que envuelven los valores de los tipos básicos (Boolean, Integer,…), sino también a aquella capa de software que se programa para acceder a cierta funcionalidad de un API. En teoría, se pretende facilitar dicho acceso, a través de varias técnicas:

  • Se oculta la funcionalidad del API que no se usa.
  • Cada método de nuestra capa wrapper suele invocar más de uno del API subyacente.
  • Se programa el wrapper en nuestro idioma natal.

Todos los programadores han sentido alguna vez esa necesidad visceral de hacer un wrapper sobre algo. Además de la simplificación de tareas rutinarias, subsconcientemente pretendemos obtener reconocimiento público por dicho trabajo: “Ese API es muy complicado para hacer tal cosa, pero mira, si usas esta clase que yo tengo por aquí…”

Disponemos de un ejemplo ubicuo: el API de JavaMail. La primera vez que mandamos un correo electrónico con él, nos da la impresión de que es demasiado complejo para un sólo correo de texto plano, sin adjuntos. Entonces creamos nuestro wrapper, y pensamos que es de más alto nivel que el API original.

Pero hay varios problemas con los wrappers. El primero es que están hechos por programadores generalmente inexpertos, por lo menos en la construcción de APIs (más dedicados a desarrollo de aplicaciones). No se sabe dónde tiene que ir una propiedad estática o método estático, dónde una propiedad, o una variable local. Al final, nuestro wrapper, cuando no da errores, por lo menos es una capa más que empeora el rendimiento.

El segundo problema habitual es la expansión en la funcionalidad que muestra. En un primer momento sólo enviabas un email, de texto plano, sin adjuntos y a un servidor SMTP que no requería autenticación. Cuando vas necesitando más, en lugar de usar JavaMail directamente, te dedicas a modificar tu wrapper, hasta que acaba siendo una versión mala y traducida del API.

Bueno, pues no os deprimáis, todos lo hemos hecho. Y cuando digo todos, quiero decir absolutamente todos:

Commons-Email aims to provide a API for sending email. It is built on top of the Java Mail API, which it aims to simplify.”


No Comments to “Wrappers de wrappers”  

  1. No Comments

Leave a Reply