더 큰 프로덕션 지원 SwiftUI 앱을 위해 아키텍처를 시도합니다. SwiftUI의 주요 디자인 결함을 가리키는 동일한 문제가 발생했습니다.
여전히 아무도 나에게 완전한 작업 준비, 생산 준비 답변을 줄 수 없습니다.
SwiftUI
탐색이 포함 된 재사용 가능한 뷰를 수행하는 방법은 무엇입니까?
는 다음과 같이 SwiftUI
NavigationLink
강력하게 뷰에 바인딩이는 큰 앱도 확장 단순히 같은 방식으로 수 없습니다. NavigationLink
작은 샘플 앱에서 작동하지만 예, 하나의 앱에서 많은 뷰를 재사용하려는 즉시 아닙니다. 또한 모듈 경계를 넘어 재사용 할 수도 있습니다. (예 : iOS, WatchOS 등에서 View 재사용 등)
디자인 문제 : NavigationLinks가 뷰에 하드 코딩됩니다.
NavigationLink(destination: MyCustomView(item: item))
그러나 이것을 포함하는보기를 NavigationLink
재사용 할 수 있다면 목적지를 하드 코딩 할 수 없습니다 . 대상을 제공하는 메커니즘이 있어야합니다. 나는 이것을 여기에 물었고 꽤 좋은 대답을 얻었지만 여전히 완전한 대답은 아닙니다.
SwiftUI MVVM 코디네이터 / 라우터 / 네비게이션 링크
아이디어는 대상 링크를 재사용 가능한보기에 삽입하는 것이 었습니다. 일반적으로 아이디어가 작동하지만 불행히도 실제 프로덕션 앱으로 확장되지는 않습니다. 재사용 가능한 화면이 여러 개있는 즉시 하나의 재사용 가능한보기 ( ViewA
)에 미리 구성된보기 대상 ( ViewB
)이 필요 하다는 논리적 문제가 발생합니다 . 그러나 ViewB
사전 구성된 뷰 목적지가 필요한 경우 어떻게 해야 ViewC
합니까? 내가 만들어야 ViewB
하는 방식으로 이미 ViewC
이미 주입 ViewB
내가 주입하기 전에 ViewB
로 ViewA
. 그리고 ..... 그 당시에 전달 된 데이터를 사용할 수 없으므로 전체 구문이 실패합니다.
내가 가진 또 다른 아이디어는의 Environment
대상을 주입하기 위해 의존성 주입 메커니즘으로 사용하는 것이 었 습니다 NavigationLink
. 그러나 이것이 큰 앱을위한 확장 가능한 솔루션이 아니라 해킹으로 간주되어야한다고 생각합니다. 우리는 기본적으로 모든 것을 위해 환경을 사용하게됩니다. 그러나 환경은 View의 내부 에서만 사용할 수 있기 때문에 (별도의 코디네이터 또는 ViewModel이 아닌) 내 의견으로는 이상한 구성을 다시 만듭니다.
비즈니스 로직 (예를 들어보기 모델 코드) 볼처럼 또한 탐색을 분리 할 필요가와에서 (예를 들어, 코디네이터 패턴)을 분리 할 필요가 볼 UIKit
우리가에 액세스 할 수 있기 때문에 가능 UIViewController
하고 UINavigationController
뷰 뒤에. UIKit's
MVC는 이미 "Model-View-Controller"대신 "Massive-View-Controller"라는 재미있는 개념이 될 정도로 많은 개념을 깨뜨리는 문제가있었습니다. 이제 비슷한 문제가 계속 SwiftUI
되지만 내 의견으로는 더 나쁩니다. 탐색과보기는 강력하게 연결되어 있으며 분리 할 수 없습니다. 따라서 탐색이 포함 된 경우 재사용 가능한보기를 수행 할 수 없습니다. 이 문제를 해결할 UIKit
수 있었지만 이제는 제정신의 해결책을 볼 수 없습니다.SwiftUI
. 불행히도 Apple은 그러한 아키텍처 문제를 해결하는 방법에 대한 설명을 제공하지 않았습니다. 작은 샘플 앱이 있습니다.
나는 틀린 것으로 증명되고 싶습니다. 대량 생산 준비가 된 Apps를 위해 이것을 해결하는 깨끗한 App 디자인 패턴을 보여주세요.
미리 감사드립니다.
업데이트 :이 현상금은 몇 분 안에 끝나고 불행히도 아무도 여전히 모범을 보여줄 수 없었습니다. 그러나 다른 솔루션을 찾을 수 없으면 여기에 연결하면이 문제를 해결하기 위해 새로운 현상금을 시작할 것입니다. 그들의 큰 공헌에 감사드립니다!