From http://alistair.cockburn.us/Hexagonal+architecture and
https://github.com/jschairb/sandbox/wiki/HexagonalArchitecture
Hexagonal Architecture is an architecture defined by establishing a
perimeter around the domain of your application and establishing
adapters for input/output interactions. By establishing this isolation
layer, the application becomes unaware of the nature of the things
it’s interacting with.Create your application to work without either a UI or a database so
you can run automated regression-tests against the application, work
when the database becomes unavailable, and link applications together
without any user involvement. – Alistair Cockburn