Services

Son clases que implementan lógica común y/o de interacción entre los distintos modelos del dominio. Estos servicios pueden ser usados en las capas general y de operación de nuestra aplicación. También, múltiples servicios pueden ser integrados en uno más grande para consolidar la ejecución de un proceso particular del dominio de negocios.

Repositories

Todo herramienta informática necesita un mecanismo para realizar operaciones de tipo CRUD sobre sus datos. Por ejemplo, en las aplicaciones web del lado del servidor, esta es una función que por lo general es asumida por librerías ORM (Object Relationship Mapper) que facilitan el acceso a motores de persistencia SQL, y que son implementadas en frameworks monolíticos de desarrollo (e.g. Django, Laravel) o incluidas como dependencias para cumplir ese propósito específico (e.g. SQLAlchemy).

Sin embargo, a pesar de que ese tipo de herramientas simplifican el acceso a fuentes externas de persistencia y consulta de información, al final siguen haciendo que nuestras aplicaciones mantengan una dependencia muy fuerte en los medios de infraestructura necesarios para ponerlas en producción, limitando su portabilidad y capacidad de adaptación. Para no prescindir de esas dos importantes cualidades en nuestras aplicaciones Knowarkitected, algunos de los servicios más importantes por ser definidos en la capa de aplicación son los repositorios.

Los Repositorios definen una interfaz estandarizada para realizar operaciones de búsqueda, almacenamiento, contabilización y eliminación sobre los modelos definidos en el dominio de nuestra aplicación. Haciendo uso de técnicas de inyección de dependencias y de inversión de control, los repositorios simplifican la manipulación de dichos elementos, sin limitarnos a elegir de antemano un mencanismo de infraestructura para desarrollar nuestra lógica de negocio. Podemos por ejemplo comenzar a desarrollar contra una implementación en memoria de nuestra fuente de datos (i.e. repositorio) y elegir una implementación persistente cuando estemos listos para poner el sistema en producción.