// ApiClientͱUserDaoʹґଘͨ͠ϦϙδτϦΫϥε class UserRepository( private val apiClient: ApiClient, private val userDao: UserDao ) { fun find(id:Long): Single = return if (userDao.cached) { userDao.find(id) } else { apiClient.getUser(id) } } // UserRepositoryΛ͏ଆ val apiClient = ApiClientImpl() val userDao = UserDaoImpl() val repo = UserRepository(apiClient, userDao) repo.find(123)...
class ApiClientImpl private constructor(): ApiClient { class Builder { fun build(): ApiClient {...} } override fun getUser(id: Long): Single {...} } class UserDaoImpl(): UserDao { override fun find(id: Long): Single {...} } class UserRepository( private val apiClient: ApiClient, private val userDao: UserDao ) { fun find(id: Long): Single {...} }
class ApiClientImpl private constructor(): ApiClient { class Builder { fun build(): ApiClient {...} } override fun getUser(id: Long): Single {...} } class UserDaoImpl(): UserDao { override fun find(id: Long): Single {...} } class UserRepository( private val apiClient: ApiClient, private val userDao: UserDao ) { fun find(id: Long): Single {...} } ࣗಈੜͰ͖Δ" =>Moduleʹॻ͘ඞཁͳ͠ ࣗಈੜͰ͖ͳ͍# => Moduleʹॻ͘ඞཁ͋Γ
class ApiClientImpl private constructor(): ApiClient { class Builder { fun build(): ApiClient {...} } override fun getUser(id: Long): Single {...} } class UserDaoImpl(): UserDao { override fun find(id: Long): Single {...} } class UserRepository( private val apiClient: ApiClient, private val userDao: UserDao ) { fun find(id: Long): Single {...} } ࣗಈੜͰ͖Δ" =>Moduleʹॻ͘ඞཁͳ͠ ࣗಈੜͰ͖ͳ͍# => Moduleʹॻ͘ඞཁ͋Γ
@Singleton class UserRepository @Inject constructor( private val apiClient: ApiClient, private val userDao: UserDao ) { fun find(id: Long): Single {...} } ͜ͷίϯετϥΫλΛͬͯΠϯελϯεԽ͞ΕΔ
// ςετରͷΫϥεʢDIಋೖલʣ class UserRepository { private val apiClient: ApiClient = ApiClientImpl() fun find(id: Long): Single = apiClient.getUser(id) } ApiClientʹີ݁߹͍ͯ͠Δ
// ςετରͷΫϥεʢDIಋೖޙʣ class UserRepository( private val apiClient: ApiClient ) { fun find(id: Long): Single = apiClient.getUser(id) } ApiClientΛ ֎෦͔ΒೖՄೳ