Depend on interface instead of concrete implementations