0
0
Lập trình
NM

📚 Mô Hình Bảng trong Thiết Kế Doanh Nghiệp với Python

Đăng vào 4 tháng trước

• 4 phút đọc

📑 Mục Lục

  1. Tại sao Mô Hình Bảng lại quan trọng
  2. Mô Hình Bảng là gì?
  3. Phân Tích: Văn Phòng Trường Học
  4. Ví Dụ Python: Bảng Đơn Hàng
  5. Khi nào nên sử dụng & Khi nào nên tránh
  6. Những điều thú vị & Khuyến nghị
  7. GitHub Repo + Tự Động Hóa
  8. Kết luận

🔥 Tại sao Mô Hình Bảng lại quan trọng

Trong các ứng dụng doanh nghiệp, logic kinh doanh có thể nằm ở nhiều nơi khác nhau:

  • Trong cơ sở dữ liệu (các thủ tục lưu trữ).
  • Trong mô hình miền (một lớp cho mỗi hàng).
  • Hoặc trong một mô hình bảng: một lớp cho mỗi bảng.

👉 Mô Hình Bảng giữ tất cả các quy tắc cho một bảng ở một nơi duy nhất, giúp mã dễ đọc và bảo trì khi logic đơn giản.


📖 Mô Hình Bảng là gì?

Định nghĩa:

Một lớp duy nhất xử lý logic kinh doanh cho tất cả các hàng trong một bảng hoặc chế độ xem cơ sở dữ liệu.

⚖️ Sự khác biệt với Mô Hình Miền:

  • Mô Hình Miền → 1 lớp cho mỗi hàng.
  • Mô Hình Bảng → 1 lớp cho mỗi bảng.

🧩 Phân Tích: Văn Phòng Trường Học

Hãy tưởng tượng một văn phòng thư ký trường học:

  • Thay vì mỗi giáo viên quản lý điểm danh (Mô Hình Miền),
  • Văn phòng quản lý hồ sơ điểm danh cho toàn bộ trường (Mô Hình Bảng).

📌 Trung tâm, nhất quán và đơn giản.


💻 Ví Dụ Python: Bảng Đơn Hàng

❌ Không có Mô Hình Bảng (logic lộn xộn)

python Copy
import sqlite3

conn = sqlite3.connect(":memory:")
cursor = conn.cursor()
cursor.execute("CREATE TABLE orders (id INTEGER, customer TEXT, total REAL)")
cursor.executemany("INSERT INTO orders VALUES (?, ?, ?)", [
    (1, "Alice", 120.0),
    (2, "Bob", 80.5),
    (3, "Alice", 45.0)
])

# Logic bị phân tán khắp nơi 😓
cursor.execute("SELECT SUM(total) FROM orders WHERE customer='Alice'")
print("Tổng của Alice:", cursor.fetchone()[0])

❌ Vấn đề: Logic bị rải rác trong các truy vấn SQL khắp ứng dụng.


✅ Với Mô Hình Bảng

python Copy
import sqlite3

class OrdersTable:
    def __init__(self, connection):
        self.conn = connection

    def total_sales(self):
        cursor = self.conn.cursor()
        cursor.execute("SELECT SUM(total) FROM orders")
        return cursor.fetchone()[0]

    def sales_by_customer(self, customer):
        cursor = self.conn.cursor()
        cursor.execute("SELECT SUM(total) FROM orders WHERE customer=?", (customer,))
        return cursor.fetchone()[0]

# Thiết lập cơ sở dữ liệu
conn = sqlite3.connect(":memory:")
cursor = conn.cursor()
cursor.execute("CREATE TABLE orders (id INTEGER, customer TEXT, total REAL)")
cursor.executemany("INSERT INTO orders VALUES (?, ?, ?)", [
    (1, "Alice", 120.0),
    (2, "Bob", 80.5),
    (3, "Alice", 45.0)
])

# Sử dụng
orders = OrdersTable(conn)
print("Tổng doanh thu:", orders.total_sales())
print("Doanh thu của Alice:", orders.sales_by_customer("Alice"))

SRP: Tất cả logic kinh doanh nằm trong OrdersTable.
Tái sử dụng: Phương thức tập trung.
KISS: Đơn giản và sạch sẽ.


🤔 Khi nào nên sử dụng & Khi nào nên tránh

✅ Sử dụng Mô Hình Bảng khi:

  • Quy tắc kinh doanh đơn giản.
  • Bạn cần báo cáo hoặc tổng hợp.
  • Bảng là đơn vị công việc chính.

❌ Tránh khi:

  • Mỗi hàng có hành vi phức tạp.
  • Bạn cần đa hình → ưu tiên Mô Hình Miền.

🧠 Những điều thú vị & Khuyến nghị

💡 Bạn có biết?

  • Mô Hình Bảng là một bước tiến trước khi có các ORM hiện đại như SQLAlchemy hay Django ORM.
  • Nhiều ứng dụng kế thừa vẫn ẩn Mô Hình Bảng bên trong các thủ tục lưu trữ.
  • Fowler khuyến nghị nó cho các hệ thống báo cáo.

👉 Mẹo chuyên nghiệp: Sử dụng Mô Hình Bảng cho các ứng dụng tập trung vào dữ liệu, Mô Hình Miền cho các ứng dụng giàu hành vi.


📦 GitHub Repo + Tự Động Hóa

Cấu trúc Repo:

plaintext Copy
enterprise-table-module/
├─ table_module.py
├─ tests/
│   └─ test_table_module.py
├─ requirements.txt
└─ .github/
   └─ workflows/
      └─ ci.yml

requirements.txt

plaintext Copy
pytest==8.3.3

.github/workflows/ci.yml

yaml Copy
name: Python CI

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - run: pip install -r requirements.txt
      - run: pytest

🔗 Ví dụ GitHub Repository


🎯 Kết luận

Mô Hình Bảng là một cách mạnh mẽ nhưng ít được chú ý để cấu trúc các ứng dụng doanh nghiệp khi logic đơn giản và tập trung vào bảng.

✨ Hãy nhớ:

  • Sử dụng nó cho báo cáo và tổng hợp.
  • Chuyển sang Mô Hình Miền khi quy tắc trở nên phức tạp.

✍️ Đến lượt bạn! Bạn sẽ sử dụng Mô Hình Bảng trong dự án tiếp theo của mình chứ?
Hãy cho tôi biết trong phần bình luận 👇

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào