Una buena capa de servicios:
- Centraliza el acceso externo a los datos y funciones
- Oculta (abstrae) la implementación interna y los cambios
- Permite el versionado de los servicios
Los tres son críticos, porque los servicios son para siempre. Una vez que se publican, no se puede controlar quién los usa, y los cambios romperán algo en alguna parte.
He aquí un ejemplo real: un ingeniero codificó originalmente los eventos sin almacenar una zona horaria. Más tarde, nos dimos cuenta de que queríamos mostrar esos eventos en la zona horaria del usuario, lo que significaba que teníamos que exponer eso a los usuarios.
Debido a que teníamos una buena capa de servicio, pudimos cambiar el objeto de evento y el esquema subyacente pero hacer que las APIs siguieran mostrándose de la forma antigua porque el punto final de la API estaba abstraído del objeto por una capa de servicio. También pudimos sacar una nueva versión del punto final de la API para que los usuarios de la misma pudieran decidir si querían aprovechar esos nuevos datos y cuándo. Sin una capa de servicio (por ejemplo, si otros pudieran haber consultado los datos directamente), habría habido una probabilidad muy alta de que otros sistemas se rompieran.
Por último, muchos sistemas empresariales tienen más de una capa. Normalmente tienen:
- Una capa de persistencia que abstrae los almacenes de datos y también puede hacer cumplir las reglas de visibilidad;
- Una capa de objetos que abstrae el esquema, define la funcionalidad específica de los objetos y se encarga del mantenimiento de la casa, como los registros de auditoría; y
- Una capa de API que garantiza una funcionalidad consistente independientemente de cómo se acceda a la aplicación (UI, móvil, integración, etc.).)
Muchas startups no cuentan con estas capas desde el primer día, ya que su construcción lleva un tiempo precioso, tiempo que se podría emplear mejor en asegurar la adecuación al mercado y el éxito de los clientes. Pero en algún momento alrededor de cincuenta clientes, no tener capas de servicio comienza a ser más y más costoso en términos de esfuerzo de desarrollo y regresiones.