/// typealias만 flow기준으로
/// protocol은 최대한잘게 추상메서드 기능기준으로
/// ex
protocol ReissueProtocol: AnyObject {
func reissueToken(token: Token) async throws -> Token?
}
protocol LogoutProtocol: AnyObject {
func logout(token: UserDefaultToken) async throws
}
protocol LoginProtocol: AnyObject {
func login(type: LoginType) async throws
}
protocol SignUpProtocol: AnyObject {
func signUp(type: LoginType, onboardingModel: UserOnboardingModel) async throws
}
typealias SplashServiceProtocol = ReissueProtocol & LogoutProtocol
typealias OnboardingServiceProtocol = SignUpProtocol
typealias LoginServiceProtocol = LoginProtocol
final class AuthService: Serviceable, SplashServiceProtocol, OnboardingServiceProtocol, LoginServiceProtocol {}
-----------------------------------------------------------
protocol AuthService {
func logout() {}
}
protocol SettingService {
}
class SettingService {
init(AuthService)
}
R <- setting
<- auth
의존성을 가져간다.
----------
cell.imageView.kf.setImage()
kf객체에서 의존성을 가져감
(service느낌과 유사)
----------
Repository (무언가 Service를 감싼 Wrapper클래스) {
authService
settingService
init() {}
logout() { ... } // 기본 구현을 여기서 제공해줄 수 있다.
}
Repository -> MyPageVC
VC이 레포지토리를 바라봄.
Repository -> AuthViewController
ViewController -> UI 그리기
View Model (view를 위한 모델) -> View에 binding위한 model. "\\()님 어서어세요"
(core) useCase -> 비즈니스 로직들 (String) service부르는거밖에 안함ㅋㅋ
service ->
repository ->
추후 리팩토링 예정인 방법입니다.
지금 현재까지는 네트워크 연결을 담당하는 Service객체가 모두 싱글톤 객체로 되어있습니다. 저희 목표는 추후에 테스트 코드까지 가져가는 것인데 이런 테스트 코드를 위해서는 우선 의존성이 모두 분리가 된 환경에서 진행해야한다고 조언을 들었던 적이 있어서 그 때의 상황을 우선 가정하고 프로토콜 분리 방향을 위와 같이 정했습니다.
우선 프로토콜은 기능별로 최대한 잘게 나누어서 각 기능별로 묶을 생각이였습니다. 이렇게 하는 이유로 잘게 프로토콜을 나누게 되면 한 화면에서 필요한 Protocol을 하나씩 가져와서 조합하는 것만으로 해당 화면에 필요한 프로토콜들의 조합을 typealias
로 만들 수 있습니다.
typealias SplashServiceProtocol = ReissueProtocol & LogoutProtocol
Service에 프로토콜의 묶음을 채택해 해당 Service가 쓰이는 화면을 채택한 프로토콜을 통해서 알 수 있습니다.
final class AuthService: Serviceable, SplashServiceProtocol, OnboardingServiceProtocol, LoginServiceProtocol {}
위와 같은 방법으로 Service객체를 싱글톤에서 의존성 주입으로 넣어줄 생각인데 이런 방법에 대해서 어떻게 생각하시는지 여쭤보고 싶고, 테스트 코드에 있어서 의존성 분리가 어디까지 진행되어야 하는지도 궁금합니다.