Với mô hình VIPER, chúng ta tham khảo kiến trúc như sau
viper
Một số lưu ý trong cây thư mục của module mà chúng ta đang phát triển:
+ View ( ViewController , extension Protocol ) : chứa X_ViewController và X_ViewControllerProtocol
X_ViewController
Biến:
var presenter : X_PresenterProtocol
func showView ( ví dụ viewDidLoad() )
Trong func viewDidLoad(), chúng ta phải làm 1 số việc cơ bản sau
Gọi tới X_WireFrame :: Tiến hành khởi tạo dữ liệu -> chỗ này sai rồi nhé, View không tương tác với WireFrame
Khởi tạo dữ liệu
Khởi taọ presenter và thực hiện presenter.viewDidLoad()
presenter được khởi tạo thế nào vậy???

X_ViewControllerProtocol
var presenter : PresenterProtocol? {get set}
func : showView

+ Presenter ( NSObject + Protocol ) : đây là phần code nặng nhất và là phần lõi chính trong module , và là khu vực điều hướng chính , gồm Presenter và PresenterProtocol
Presenter
Biến:
var view : ViewProtocol
var wireFrame : WireFrameProtocol
var interactor : InteractorProtocol
func viewDidLoad
func loadItems
func showSelectedItem

PresenterProtocol : có đầy đủ các hàm
var view : ViewProtocol? {get set}
var wireFrame : WireFrameProtocol? {get set}
var interactor : InteractorProtocol? {get set}
func viewDidLoad
func loadItems
func showSelectedItem

+ Interactor ( X_InputProtocol ) : đây là phần kết nối giữa Presenter và Entity (model) , gồm Interactor và InteractorInputProtocol và InteractorOutputProtocol
File Interactor
Biến:
var presenter : PresenterProtocol
func loadItems
func

File InteractorProtocol ( chú ý là sẽ gồm InteractorInputProtocol và InteractorOutputProtocol )
X_InteractorInputProtocol
var presenter : DishListInteractorOutputProtocol? {get set}

X_InteractorOutputProtocol

+ Entity : model
File Model: NSObject v.v tuỳ tình hình

+ Router : phần điều hướng, được viết WireFrame
File WireFrame
let presenter = Presenter()
let interactor = Interactor()
let wireFrame = WireFrame()
let localDataManager = LocalDataManager()
let remoteDataManager = RemoteDataMangager()
và chúng ta tiến hành set rất nhiều thứ trong này gần như đẻ khởi tạo biến
func showDetail1 , showDetail2 , static func createPromotionDetailViewController, hoặc class func createPostListModule() -> UIViewController , hoặc class func createListFoodModule(foodListref: ListFoodView)

File WireFrameProtocol
var presenter : PresenterProtocol? {get set}

Chúng ta sử dụng nguồn bài viết ở đây làm hướng dẫn chính nhé
https://medium.com/swift-india/viper-architecture-example-in-ios-in-swift-4-6f656a441f7c
https://github.com/GABHISEKBUNTY/Viper-Architecture
và áp dụng vào dự án đang triển khai để nắm tình hình thực tế

About the Author

Trần Huy

View all author's posts

Bài viết khác

Flutter Navigation and Routing

Trong Flutter, việc chuyển đổi giữa các màn hình (screen/page) được thực hiện thông qua Navigator và Route. Flutter cung cấp hai loại điều hướng chính: Named Route: Sử dụng chuỗi định danh (string) để gọi màn hình. Direct Route: Sử dụng đối tượng Route để gọi màn hình. Navigator là một widget quản lý […]

Flutter State Management

SetState là cách cập nhật trạng thái cơ bản: Provider – Một nhà cung cấp thì dùng ChangeNotifierProvider Dùng navigator. Màn hình như ngăn sếp push vô pop ra. Provider có thể quản lý trạng thái ở nhiều màn hình khác nhau. Dùng với comsumer có thể dùng tham số trực tiếp truy xuất thay vì dùng […]

Flutter Layout

Cơ chế cốt lõi để xây dựng nên layout trong Flutter là Widget. Hầu như tất cả mọi thứ đều là Widget Ảnh, icon, text, rows, columns, grid, arrange, constrain, align,… Material apps – Sử dụng Scaffold widget. Chúng ta có thể sử dụng widget trong phần body. Non-Material apps Aligning widget mainAxisAlignment và crossAxisAlignment cung […]

Flutter Widget

Flutter Widget là thành phần cơ bản nhất trong Flutter, được sử dụng để tạo ra giao diện người dùng (UI). Mọi thứ trong Flutter, từ văn bản, hình ảnh, nút bấm cho đến toàn bộ giao diện ứng dụng, đều là widget. Widgets trong Flutter là bất biến (immutable), tức là khi trạng thái […]

Flutter Package

Flutter Package là một bộ mã nguồn chứa các chức năng được viết sẵn giúp lập trình viên có thể tái sử dụng trong ứng dụng của mình. Các package này thường được chia sẻ công khai và được sử dụng để tăng tốc quá trình phát triển, bổ sung các tính năng hoặc tích […]

Cài đặt Flutter – MacOS

Để cài đặt Flutter trên hệ điều hành của bạn, bạn có thể làm theo hướng dẫn sau tùy theo hệ điều hành của mình. Flutter hỗ trợ Windows, macOS, và Linux. Dưới đây là các bước cài đặt Flutter cho từng hệ điều hành MacOS Bước 1: Tải Flutter SDK Truy cập: https://docs.flutter.dev/get-started/install/macos/mobile-ios Tải xuống […]