## Hexagonal Architecture Conceptualized by Alistair Cockburn initially under the name "Ports and Adapters". In a nutshell: Application Driver -> Primary Adapter -> Primary Port -> Use Case -> Secondary Port -> Secondary Adapter -> External System/Side Effect ![image](https://user-images.githubusercontent.com/18663098/134550249-61ae172a-d1be-45cb-8f2d-c188b68f5e30.png) ### Use Cases They define the business rules and they should not depend on code related on how the system communicates with the outside world. Throught the use of Ports and Adapters the Use Cases can be reliably tested and change mainly if the business rules change ### Ports They expose the ways in which the use cases can be reached (primary) or reach to (secundary) to the outside world. They are technology agnostic. ![image](https://user-images.githubusercontent.com/18663098/134550342-54419945-97cc-47c3-89b9-60404bce3e05.png) ### Adapters They deal with the code that communicates outside of the system. ![image](https://user-images.githubusercontent.com/18663098/134550456-abeb42bf-ad2d-4ee8-b4b4-f084ea5af0e2.png) ### Modules Based on talks by Jakub Nabrdalik such as https://www.youtube.com/watch?v=2vEoL3Irgiw ![image](https://user-images.githubusercontent.com/18663098/134550566-27227504-0cfd-46d2-8912-aca050056171.png) #### Modules Project Structure Based on Jakub Nabrdalik's talks About Hexagonal Architecture and TDD. ![image](https://user-images.githubusercontent.com/18663098/134517033-36c01f32-07f4-4baf-925d-60f0db069211.png) #### Module configuration and it's relationship with mock testing: https://gist.github.com/corlaez/aa2c1a657438f5c998af9340a3339051