TL; DR: Tôi khuyên bạn nên sử dụng khung DI như Typhoon và để điều đó xử lý việc khởi tạo.
Lý do bạn có thể không muốn wireframes của bạn instantiating tất cả mọi thứ trong một mô-đun VIPER (Xem, Presenter, Interactor, DataManager) là bạn sẽ tạo phụ thuộc trực tiếp cho mỗi thành phần.
Các phụ thuộc làm cho phần mềm có khả năng chống thay đổi: nếu chúng ta nghĩ đến nó bằng mũ onion architecture/hexagonal architecture của chúng tôi, khung dây sẽ vượt qua ranh giới của ít nhất hai lớp hành của bạn bằng cách biết không chỉ khung nhìn mà còn dữ liệu giám đốc.
Điều này buộc chúng tôi xử lý wireframes là một lớp cơ sở hạ tầng chung: tức là một thứ gì đó ở lớp ngoài cùng của ứng dụng của bạn.
Tuy nhiên, điều này mâu thuẫn với trách nhiệm khác của khung máy (và thực tế hơn): thực hiện điều hướng. Mặc dù đây vẫn là lớp cơ sở hạ tầng, nhưng nó thuộc về một cách chắc chắn và cụ thể trong UIKit
(-presentViewController:
, v.v.).
Vì vậy, IMHO, khung dây của VIPER đang hoạt động quá nhiều.
Điều hợp lý duy nhất là để chia hai trách nhiệm:
- khởi của các tầng lớp VIPER: bạn có thể giới thiệu một factory, hoặc sử dụng các công cụ DI được thiết kế để giải quyết vấn đề này
- làm navigation: đây nằm trong phạm vi của
Wireframe
.
Ghi chú thêm
Nếu bạn đang tự hỏi "người instantiates module tiếp theo?", Sau đó một lần nữa, IMHO, tôi nghĩ rằng đó là không đúng mà 'wireframe cuộc đàm phán s để Module B
' một số Module A
s wireframe mặc dù những gì các VIPER post nói.
Lý do là Module A
bây giờ sẽ được thực hiện phụ thuộc vào Module B
, gây ra sự ghép nối chặt chẽ: điều này đánh bại mục đích của mô-đun. Thảo luận nhiều hơn về chủ đề này tại số VIPER-TODO project at GitHub =]
Hy vọng điều này sẽ hữu ích.
Nói chung tôi thích Wireframe để tạo mô-đun, Nếu chúng ta tạo tất cả các mô-đun lúc bắt đầu thì nếu có nhiều mô-đun thì nó không có ý nghĩa, Vì vậy, tôi đồng ý rằng cách tiếp cận thứ hai tốt hơn. – Abhishek