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 Form

FLUTTER FORM LÀ GÌ? Form trong Flutter là widget dùng để thu thập và kiểm tra dữ liệu người dùng nhập vào. Thường dùng khi cần nhập nhiều trường và muốn kiểm tra tính hợp lệ của dữ liệu. Sự khác nhau giữa Form + TextFormField và TextField thông thường TextField là widget đơn lẻ, […]

Flutter State Management

State Management trong Flutter là quá trình quản lý và thay đổi trạng thái của widget. Khi state thay đổi, widget sẽ được cập nhật lại để phản ánh thay đổi đó. Có nhiều phương pháp quản lý state trong Flutter, mỗi phương pháp phù hợp với các loại ứng dụng khác nhau.   Các […]

Flutter Layout

Flutter Layout là gì ? Trong Flutter, layout là quá trình sắp xếp các widget con trong không gian giao diện người dùng. Flutter cung cấp nhiều widget layout giúp xây dựng giao diện ứng dụng linh hoạt và dễ dàng. Việc sử dụng đúng các widget layout sẽ giúp bạn tạo ra giao diện […]

Flutter Widget

FLUTTER WIDGET LÀ GÌ? Widget là “viên gạch” để xây nên giao diện Flutter. Mọi thứ nhìn thấy trên app đều là widget: chữ, nút bấm, ô nhập liệu, hình ảnh… Phân loại cơ bản Widget 1. StatelessWidget – Giao diện tĩnh Không thay đổi sau khi được tạo. Dùng khi widget chỉ hiển thị thông tin, […]

Flutter Package

Trong quá trình phát triển ứng dụng Flutter, để tiết kiệm thời gian và tái sử dụng các tính năng có sẵn, lập trình viên thường sử dụng Flutter package – là các thư viện (thư viện mã nguồn mở hoặc do cá nhân viết) giúp thêm các chức năng mới vào ứng dụng mà […]

Agile – Phương pháp phát triển phần mềm linh hoạt

Agile là gì? Agile là một phương pháp phát triển phần mềm linh hoạt, nhấn mạnh vào khả năng thích nghi với thay đổi, làm việc theo nhóm, và phát triển sản phẩm theo từng phần nhỏ (iterative & incremental). Agile không phải là một quy trình cụ thể, mà là một tư duy (mindset) […]