ports-and-adapters-pattern