Puertos de entrada y salida
Separar puertos de entrada y salida ayuda a entender que ofrece la aplicacion y que necesita del exterior.
Puertos de entrada
Representan capacidades:
txt
ConfirmOrder
CreateInvoice
EnrollStudent
PublishCourseEn algunos lenguajes pueden ser interfaces. En otros basta con clases de caso de uso bien definidas.
Puertos de salida
Representan dependencias:
txt
OrderRepository
PaymentGateway
EmailSender
EventPublisherLa aplicacion depende del contrato, no de la implementacion.
Donde definirlos
Los puertos deben vivir cerca de quien los necesita.
txt
orders/application/OrderRepository
orders/application/ConfirmOrderUseCaseEvita una carpeta global de interfaces sin contexto.
Granularidad
No crees puertos enormes:
txt
DatabaseService
findUser
saveOrder
updateInvoice
deleteCoursePrefiere contratos por contexto y necesidad.
Checklist
- Los puertos tienen lenguaje del caso de uso.
- Los puertos de salida son pequenos.
- No hay interfaces genericas innecesarias.
- Las implementaciones viven fuera del nucleo.
- Los adaptadores se pueden sustituir en tests.
