Replies: 4 comments 4 replies
-
@elesahich @lsj8706 @devxsby @0inn |
Beta Was this translation helpful? Give feedback.
-
자세한 설명 정말 감사합니다!! |
Beta Was this translation helpful? Give feedback.
-
오늘 예비군이어서 틈틈히 쓰려고 했는데 슬쩍 보고는 핸드폰으로 쓸 양은 아니군 하며 살며시 닫았습니다요. 그래서... 늦었네요... ^^ public final
class MainViewController: UIViewController, MainViewRepresentable {
public var factory: AuthViewBuildable!
} 이 부분을 public final
class MainViewController: UIViewController, MainViewRepresentable {
private let factory: AuthViewBuildable
init(authBuildable builder AuthBuildable) {
self.factory = builder // 그리고 이름은 Builder가 어떨까 합니다 (Needle Example에서 builder로 쓰고 있거든요.)
}
} 이렇게 개선하면 어떨까요? 물론 이렇게 하려면, 의존성 트리를 잘 구현해야 하고요, 잘 정렬해야 해요. 그러려면 인터페이스 말고 buildable을 구현할 구현체가 하나 있으면 좋겠네요! 예를 들어, public protocol MainViewRepresentable: ViewRepresentable { }
public protocol MainViewBuildable {
func makeMainView() -> MainViewRepresentable
}
public class MainViewComponent: MainViewBuildable { // NEW
var authViewBuildable: AuthViewComponent: {
AuthViewComponent()
}
public func makeMainView() -> MainViewRepresentable {
MainViewController(
authViewBuildable: self.authViewBuildable
)
}
}
public final class MainViewController: UIViewController, MainViewRepresentable {
private let factory: AuthViewBuildable
// 이니셜라이저를 만들어잉
} 이런 형태가 되어야 겠죠? 그러면 public final class DIContainer {
var mainViewBuildable: MainViewBuildable {
return MainViewComponent()
}
} 이런식으로 선언할 수 있고, func scene(_ scene: UIScene,
willConnectTo session: UISceneSession,
options connectionOptions: UIScene.ConnectionOptions) {
guard let scene = (scene as? UIWindowScene) else { return }
window = UIWindow(frame: scene.coordinateSpace.bounds)
window?.windowScene = scene
let viewController = self.diContainer.mainViewBuildable.makeMainView().viewController
window?.rootViewController = UINavigationController(rootViewController: rootVC)
window?.makeKeyAndVisible()
} 이렇게 이용하게 됩니다. 차이는 어떤 것이냐면 :
위 예시는 어떤 점을 개선하냐면 :
어떤 불편한 점이 있냐면 :
이런 식입니다. VIewRepresentable은 Ribs의 그것인 것 같으니, Uber의 Needle이 아주 짝이 잘 맞거든요. 이것도 천천히 공부해 보세요! |
Beta Was this translation helpful? Give feedback.
-
잘 보았습니다. 좋은 의견 감사합니다... .. 알림 가나.. |
Beta Was this translation helpful? Give feedback.
-
현재 Presentation으로 단일화된 상태에서 Scene Flow 별로 Features를 분리하는 작업 중에 있습니다.
아래와 같은 시나리오를 생각해 보았습니다!
BaseFeatureDependency
ViewController를 가져올 수 있는 protocol을 작성합니다.
Main Feature
Interface
ViewRepresentable을 채택하는 MainViewRepresentable을 정의합니다.
MainView가 가져야 하는 다른 속성도 함께 정의 가능합니다. 현재는 ViewController의 추상화와 생성에만 집중했습니다.
makeMainView에 값 전달이 필요한 경우 parameter를 사용 가능합니다.
Target
MainViewRepresentable을 채택한 구현체를 만들어주고, AuthViewBuildable의 의존성으로 authView 생성하도록 합니다.
AuthFeature
Interface
Target
App
DIContainer
의존성을 관리할 Container를 만들어 줍니다.
SceneDelegate
Beta Was this translation helpful? Give feedback.
All reactions