[Design Python] Chapter 01

Để làm được việc thiết kế model không phụ thuộc vào công nghệ thì có vài từ khóa sau:

    1. Repository pattern: Cho phép làm việc với dữ liệu mà không quan tâm đến CSDL.

    2. Service Layer pattern: Định nghĩa use cases.

    3. Unit of Work pattern: Đảm bảo rằng một thao tác chỉ thành công nếu các thao tác con thành công.

    4. Aggregate pattern: Đảm bảo toàn vẹn dữ liệu (A chứa B, thì chỉ thông qua A mới được thay đổi B).

Một vài từ khóa cho modeling domains: Entity, Value ObjectDomain Service.

Ví dụ sẽ sử dụng xuyên suốt bài học: 

Cách thông thường: Nếu nhà kho hết một mặt hàng nào đó, thì sẽ hiển thị mặt hàng đó là "out of stocks" cho người dùng.

Cách mới: Khi mà hết hàng thì phải nhập hàng. Khi đó ta coi chỗ hàng nhập sẽ là hàng trong kho nếu mà biết ngày chúng được giao đến nhà kho và có thể coi là thời gian ship đơn hàng lâu hơn. Khi đó doanh nghiệp sẽ kiếm được nhiều tiền hơn cách thông thường.

Mô hình hóa:

1. Sản phẩm (Product) sẽ có những thông tin: 

  • sku (stock-keeping unit đọc là sờ ciu) hiểu nôm na như là ID. Ví dụ: RED-CHAIR
2. Đơn đặt hàng (Order) sẽ có những thông tin:

  • Reference của đơn đặt hàng hiểu nôm na là ID.
  • order lines hiểu nôm na là những sản phẩm cần đặt. 
    • Mỗi line bao gồm thông tin: sku và quantity. Ví dụ 10 units of RED-CHAIR.
3. Lô hàng (Batch) sẽ có những thông tin:

  • Reference của lô hàng.
  • SKU.
  • Số lượng.
Việc của chúng ta là điều phối các dòng đặt hàng dựa trên thông tin từ những lô hàng ta có. Dưới đây là một vài luật cần phải tuân thủ: Một line được gán cho một batch nếu mà trùng SKU và số lượng của batch không ít hơn số lượng cần đặt trong line. Và một line không được phân phối lại nếu nó đã được phân phối trước đó.

Ví dụ:

Order:

ID: 1

Order lines: [{"1", "RED_CHAIR", "10"}, {"1", "BLUE_CHAIR", "18"}]

Batch:

ID: 101

SKU: RED_CHAIR

quantity: 100

Thì có thể gán Batch 101 cho line {"1", "RED_CHAIR", "10"}.

Value Object: Là đối tượng không có ID. Cụ thể ở đây là order lines. Hai value object được coi là giống nhau nếu tất cả các giá trị của chúng là như nhau.

    - Có thể có những toán tử với value object. VD cộng trừ phần thực, phần ảo số phức, ...

Nếu sử dụng đến __eq__ thì cần phải sửa đổi __hash__. Có thể đọc tìm hiểu thêm.

Trong python có hàm next() thực hiện việc lấy ra phần tử đầu tiên thỏa mãn một điều kiện phù hợp, ưu điểm là nhanh và tiết kiệm bộ nhớ.
Ví dụ next(i for i in range(0, 10) if i%2 == 1) sẽ trả ra 1



Nhận xét

Bài đăng phổ biến từ blog này

TÚM CÁI VÁY

Kì 2023.2 ở HUST

Học quân sự ở HUST có gì vui ?