Put everything behind abstractions