Hexagonal Architecture - Message-oriented Software Design