Skip to content

Overview

Đặng Ngọc Đức edited this page Dec 31, 2021 · 8 revisions

Overview

UI Layer

Là layer chịu trách nhiệm cho việc định nghĩa các page, route, widget và logic quản lý state của các page(BLoC).

Domain Layer

Là layer chịu trách nhiệm định nghĩa các nghiệp vụ của ứng dụng trong đó:
Usecase(optional) : sử dụng 2 hoặc nhiều repository để thực hiện 1 việc bất kỳ.

Repository: định nghĩa các function truy cập đến datasource, đây phải là 1 asbtract class.

Ví dụ: chúng ta làm tính năng quản lý giỏ hàng (Cart). Vậy ở CartPage user có thể thao tác những gì liên quan đến Cart?
Hãy định nghĩa hết tất cả trong 1 abstract class là CartRepository. CartRepository sẽ chỉ quan tâm là Bloc/UI cần gì? thời điểm này chúng ta chưa quan tâm đến việc làm như nào? làm như nào sẽ được thực hiện ở tầng Data Layer thông qua 1 class là CartRepositoryImpl sẽ bàn sau.

abstract class CartRepository {
  
  Future<CartItemModel> addItem(ProductModel product);
  
  Future removeItem(ProductModel product);
  
  Future<List<CartItemModel>> getCart();
  
}

entity: địng nghĩa các getter/setter của thuộc tính của đối tượng được mô tả theo design hoặc nghiệp vụ cần làm. đây phải là 1 abstract class

Ví dụ: Đối với Product, theo design chúng chỉ cần quan tâm về productName, productImage, price, salePrice

Như vậy hãy tạo 1 product_model như sau :

abstract class ProductModel {
  String get productName;

  double get price;

  double get salePrice;
  
  String get productImage;
}

Data Layer

Đây là layer sẽ trực tiếp làm việc thao tác với API - Database. ở layer này sẽ có có 3 thành phần:

  1. dto
    chứa các implement của model trong domain layer và các dto khác như request, response.
  2. datasource
    chứa các datasource của repository sẽ dùng như remote_data_source (api_service), local_data_source.
  3. repository
    Chứa các implement của repository trong domain layer.

Example:

Demo Cart

Clone this wiki locally