introduced interfaces, inject dependencies to remoing coupling with implementation