[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 Object và Domain 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
- 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.
- Reference của lô hàng.
- SKU.
- Số lượng.
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
Đăng nhận xét