https://medium.com/@001vrn/a-quick-and-practical-example-of-hexagonal-architecture-in-java-ff8984ab7756