de_DEen_USes_ESfa_IRfr_FRhi_INid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW

Thành thạo thiết kế hướng đối tượng với thẻ CRC: Một nghiên cứu trường hợp thân thiện với người mới bắt đầu

Table of Contents hide

“Cách tốt nhất để học thiết kế hướng đối tượng không phải là ghi nhớ các mẫu — đó là bằng cách đóng vai trò.”

Trong bài viết này, chúng tôi sẽ đi qua mộtgiới thiệu từng bước về thẻ CRC (Lớp–Trách nhiệm–Hợp tác) bằng một ví dụ thực tế, thân thiện với người mới: mộtHệ thống mượn sách thư viện. Dù bạn mới bắt đầu hành trình vào thiết kế phần mềm hay đang dẫn một buổi làm việc nhóm, thẻ CRC cung cấp một cách đơn giản, mạnh mẽ và hợp tác để mô hình hóa các hệ thống hướng đối tượng.


🎯 Thẻ CRC là gì?

Thẻ CRC là một kỹ thuật mô hình hóa nhẹ nhàng (vật lý hoặc số hóa) được sử dụng trong thiết kế hướng đối tượng. Mỗi thẻ đại diện cho mộtlớp và chứa ba yếu tố chính:

Trường Mô tả
Lớp Tên của lớp (ví dụ nhưSách)
Trách nhiệm Điều mà lớpbiếthoặclàm
Các đối tác hợp tác Các lớp khác mà lớp này cần hợp tác với

Chúng đặc biệt hiệu quả trong việcđặt ra ý tưởngthiết kế, vàxác minhcấu trúc lớp ngay từ đầu quá trình phát triển — trước khi viết một dòng mã nào.


📚 Nghiên cứu trường hợp: Hệ thống mượn sách thư viện

Hãy tưởng tượng một thư viện công cộng nhỏ nơi các thành viên có thể:

  • Tìm kiếm sách theo tiêu đề

  • Mượn các cuốn sách có sẵn (tối đa một giới hạn)

  • Trả sách khi hoàn thành

Hệ thống phải theo dõi:

  • Sách nào đang được mượn

  • Do ai

  • Khi nào chúng phải trả

Chúng ta sẽ sử dụng phương phápthẻ CRCđể phát hiện và tinh chỉnh các lớp trong hệ thống này — từng bước một.


✅ Bước 1: Tìm các lớp tiềm năng (thảo luận các danh từ)

Bắt đầu bằng cách đọc tình huống và trích racác danh từ— đây là các lớp tiềm năng.

Từ mô tả, chúng ta xác định:

  • Thư viện

  • Thành viên (hoặc Người dùng)

  • Sách

  • Mượn (hoặc Việc mượn)

  • Ngày trả (có thể quá nhỏ)

  • Thẻ thư viện (có thể là một phần của Thành viên)

Chúng ta lọc và chỉ giữ lại những cái có ý nghĩa nhất:

✅ Thành viênSáchMượn

⚠️ Ghi chú: Đừng lo lắng về việc phải đúng ngay từ đầu tất cả các lớp — đó chính là điểm thú vị của thẻ CRC. Bạn sẽ phát hiện ra những lớp còn thiếu thông qua việc đóng vai!


✏️ Bước 2: Tạo các thẻ CRC ban đầu

Bây giờ, chúng ta gántrách nhiệmđồng tác giảcho mỗi lớp.

📘 Lớp: Sách

Trách nhiệm Đồng tác giả
Biết tiêu đề của nó
Biết tác giả của nó
Biết mã ISBN của nó
Biết liệu nó có đang sẵn có hay không Mượn
Bị mượn Mượn
Được trả lại Mượn

💬 Sách không “biết” ai đã mượn nó — nó chỉ biết liệu nó có một khoản mượn đang hoạt động hay không.


👤 Lớp: Thành viên

Trách nhiệm Các cộng sự
Biết tên
Biết mã thành viên
Biết số lượng sách đang được mượn Mượn
Mượn một cuốn sách (nếu được phép) Sách, Mượn
Trả lại một cuốn sách Sách, Mượn
Kiểm tra xem giới hạn mượn đã đạt đến chưa Mượn

💬 Thành viên quản lý hành vi mượn của chính mình và kiểm tra giới hạn thông qua lớp Mượn.


📅 Lớp: Mượn

Trách nhiệm Các cộng sự
Ghi lại cuốn sách nào đã được mượn Sách
Ghi lại thành viên nào đã mượn nó Thành viên
Ghi lại ngày mượn
Tính ngày trả
Biết liệu có quá hạn hay không
Ghi chú đã trả Sách

💬 Lớp Loan lưu trữ mối quan hệ giữa một Thành viên và một Sách, bao gồm các chi tiết về thời gian.


🎭 Bước 3: Diễn kịch tình huống — “Mượn một cuốn sách”

Bây giờ đến phần thú vị: diễn kịch tình huống như thể các thẻ là những vật thật.

📖 Tình huống: Curtis muốn mượn “Code sạch”, đang có sẵn.

Hãy cùng đi qua từng bước:

  1. Thành viên (Curtis) nói: “Tôi muốn mượn ‘Code sạch’.”
    → Kiểm tra đầu tiên: “Tôi có ít hơn 3 cuốn sách rồi không?”
    → Hỏi Mượn“Tôi có bao nhiêu khoản mượn đang hoạt động?”

  2. Mượn trả lời: “Bạn có 1 khoản mượn đang hoạt động → bạn có thể mượn.”

  3. Thành viên tìm kiếm cuốn sách: “‘Code sạch’ ở đâu?”
    → Hỏi Sách“Bạn có rảnh không?”

  4. Sách kiểm tra: “Tôi có một khoản vay đang hoạt động (chưa được trả lại) không?”
    → Hỏi Vay“Có khoản vay đang hoạt động dành cho tôi không?”

  5. Vay trả lời: “Không — bạn đang rảnh!”

  6. Thành viên tạo một mới Vay đối tượng:

    • Liên kết đến Sách và Thành viên

    • Đặt ngày mượn = hôm nay

    • Tính ngày trả = hôm nay + 14 ngày

  7. Sách được cập nhật: “Bây giờ tôi đã có một khoản vay đang hoạt động → Tôi không còn rảnh nữa.”

✅ Kết quả: Quy trình mượn sách cảm giác tự nhiên, phân tán và hợp lý.


🔄 Bước 4: Một tình huống khác — “Trả sách”

📖 Tình huống: Curtis trả lại “Mã sạch”

  1. Thành viên (Curtis) nói: “Tôi muốn trả lại cuốn ‘Clean Code’.”

  2. Thành viên tìm thấy phù hợp Mượn (khả năng là bằng cách truy vấn Mượn với sách và thành viên).

  3. Mượn đánh dấu bản thân là đã trả.

  4. Mượn nói Sách“Bạn đã có thể được mượn lại rồi.”

✅ Sạch sẽ, rõ ràng và mạch lạc — không lớp nào đang thực hiện công việc ngoài trách nhiệm của nó.


🔍 Bước 5: Tinh chỉnh và thêm các lớp còn thiếu

Sau khi đóng vai, chúng tôi nhận thấy một khoảng trống:

❓ Ai tìm được sách theo tiêu đề?

Hiện tại, Thành viên đang hỏi Sách trực tiếp — nhưng Sách không biết cách tìm kiếm!
Chúng tôi cần một người điều phối trung tâm.

➕ Lớp mới: Thư viện

Trách nhiệm Các cộng sự
Thêm một cuốn sách mới vào bộ sưu tập Sách
Tìm sách theo tiêu đề Sách
Đăng ký thành viên mới Thành viên
Xử lý yêu cầu mượn sách Thành viên, Sách, Mượn
Xử lý việc trả sách Thành viên, Sách, Mượn
Biết tất cả các khoản mượn hiện tại Mượn

💬 Thư viện đóng vai trò là trung tâm — nó biết tất cả các sách, tất cả thành viên và tất cả các khoản mượn.


✨ Luồng cập nhật: “Mượn một cuốn sách” với Thư viện

  1. Thành viên → Thư viện“Tìm cuốn sách có tiêu đề ‘Clean Code’.”

  2. Thư viện tìm kiếm trong bộ sưu tập của mình và trả về Cuốn sách (hoặc null nếu không tìm thấy).

  3. Thành viên bây giờ biết rằng cuốn sách tồn tại → hỏi Thư viện“Tôi có thể mượn cuốn sách này được không?”

  4. Thư viện kiểm tra:

    • Cuốn sách có sẵn không? (thông qua Book.isAvailable())

    • Thành viên có đang trong giới hạn mượn không? (thông qua Loan.countActiveLoans(thành viên))

  5. Nếu có → Thư viện tạo một mới Giao dịch mượn và cập nhật cả Cuốn sách và Giao dịch mượn.

  6. Cuốn sách trở nên không khả dụng; Mượn theo dõi mối quan hệ.

✅ Bây giờ luồng hoạt động trở nên hợp lý — cái Thư viện xử lý việc phát hiện và phối hợp.


🧩 Tổng kết thẻ CRC cuối cùng (Đơn giản hóa cho người mới bắt đầu)

Lớp Trách nhiệm chính Các cộng sự chính
Thư viện Quản lý sách, thành viên, mượn trả; xử lý việc mượn/trả Sách, Thành viên, Mượn
Thành viên Biết thông tin cá nhân; khởi tạo việc mượn/trả Thư viện, Mượn
Sách Lưu trữ dữ liệu mô tả; theo dõi tình trạng sẵn có Thư viện, Mượn
Mượn Theo dõi lịch sử mượn; tính ngày trả; quản lý trạng thái trả Thành viên, Sách, Thư viện

✅ Nguyên tắc thiết kế: Mỗi lớp có một mục đích rõ ràng, và trách nhiệm là thống nhất và phân bổ hợp lý.


🌟 Tại sao Thẻ CRC lại hoạt động rất tốt (Những bài học dành cho người mới)

Lợi ích Giải thích
Thiết kế dựa trên trách nhiệm Buộc bạn phải suy nghĩ: “Lớp này biết hoặc làm gì?” thay vì chỉ lưu trữ dữ liệu.
Phát hiện tự nhiên các lớp bị thiếu Diễn kịch tiết lộ khoảng trống (như lớp bị thiếu Thư viện) — không cần suy đoán gì thêm.
Phản hồi tức thì thông qua diễn kịch Nếu một luồng cảm giác khó chịu, bạn sẽ biết trách nhiệm đang ở vị trí sai.
Thiếu hình thức & Hợp tác Không cần công cụ phức tạp — chỉ cần thẻ ghi chú, giấy dán hoặc bảng trắng. Rất tốt cho nhóm.
Kết nối yêu cầu với mã nguồn Biến các câu chuyện người dùng thành các tương tác lớp thực tế.

🛠️ Mẹo nhanh cho buổi họp CRC đầu tiên

  1. Sử dụng thẻ vật lý (thẻ ghi chú 3×5 hoặc giấy dán) — sẽ hấp dẫn hơn.

  2. Một lớp mỗi thẻ — giữ đơn giản.

  3. Viết lớn và dễ đọc — người khác phải đọc được dễ dàng.

  4. Diễn kịch to thành tiếng — trao đổi thẻ như các vật thật.

  5. Bắt đầu với 3–6 tình huống cốt lõi (ví dụ: mượn, trả, tìm kiếm).

  6. Đừng hướng đến sự hoàn hảo — mục tiêu là lần lặp, không phải là thiết kế cuối cùng. Refined dần theo quá trình.

  7. Sử dụng tên đơn giản, phù hợp với lĩnh vực — tránh dùng thuật ngữ kỹ thuật. Sử dụng “Thành viên” thay vì “Khách hàng” nếu cả đội đồng thuận.

  8. Mời mọi người tham gia — ngay cả những người không lập trình cũng có thể giúp phát hiện các trách nhiệm bị thiếu.

  9. Vẽ sơ đồ lớp đơn giản sau đó — để trực quan hóa các mối quan hệ và xác nhận tính nhất quán.

  10. Giữ cho vui vẻ — coi đó như một trò chơi. Đội của bạn càng tham gia tích cực, kết quả càng tốt.


🔄 Thử tự làm: Các lĩnh vực tiếp theo để khám phá

Sau khi đã thành thạo hệ thống thư viện, hãy thử áp dụng thẻ CRC vào các lĩnh vực thân thiện với người mới bắt đầu khác:

☕ Hệ thống đặt hàng quán cà phê

  • Lớp: Khách hàngĐơn hàngMón ănBaristaMáy tính tiền

  • Các tình huống: Đặt đơn → Thêm đồ uống → Áp dụng giảm giá → Thanh toán → In hóa đơn

🪙 Máy bán hàng tự động

  • Lớp: Máy bán hàng tự độngSản phẩmĐồng tiềnMáy phátBộ tính tiền thừa

  • Các tình huống: Nhập tiền → Chọn sản phẩm → Phát sản phẩm → Trả lại tiền thừa

🎮 Trò chơi hỏi đáp

  • Lớp: Bài kiểm traCâu hỏiNgười chơiBộ theo dõi điểm sốPhiên chơi

  • Các tình huống: Bắt đầu bài kiểm tra → Trả lời câu hỏi → Kiểm tra tính chính xác → Hiển thị điểm cuối

🚗 Bãi đậu xe

  • Lớp: Bãi đậu xeXe hơiVị trí đậu xeCổng

  • Các tình huống: Vào garage → Đỗ xe → Ra ngoài → Thanh toán phí → Nhận vé

Mỗi hệ thống này đều dựa trên những nguyên tắc giống nhau:

  • Xác định danh từ → phân công trách nhiệm → đóng vai → hoàn thiện → lặp lại.


📌 Những suy nghĩ cuối cùng: Thẻ CRC hơn cả một kỹ thuật — đó là một tư duy

Sức mạnh thực sự của thẻ CRC không nằm ở chính những thẻ đó — mà nằm ở sự cuộc trò chuyệnmà chúng gợi lên.

Khi bạn viết một thẻ và nói, “Ai sẽ thực hiện điều này?” hay “Ai nó cần nói chuyện với?”, bạn đã đang suy nghĩ như một nhà thiết kế hướng đối tượng.

🔥 Mẹo hay: Sử dụng thẻ CRC trong quá trình lập kế hoạch sprint, nghiên cứu công nghệ hoặc thậm chí trong phỏng vấn để thể hiện tư duy thiết kế của bạn.

Chúng không chỉ dành cho nhà phát triển — mà dành cho bất kỳ ai tham gia vào việc xây dựng phần mềm: người quản lý sản phẩm, nhà thiết kế, người kiểm thử và sinh viên.


📎 Muốn biết thêm?

👉 Tải xuống mẫu thẻ CRC in được (PDF hoặc kỹ thuật số) để sử dụng trong buổi làm việc tiếp theo của bạn.
👉 Thử một buổi họp CRC trực tiếp với một đồng đội — phân công vai trò: “Bạn là Thành viên”, “Bạn là Sách”, v.v.
👉 Chia sẻ kết quả của bạn — đăng thẻ của bạn lên mạng xã hội với #CRCcards hoặc #OODesignJourney.


🏁 Kết luận

Sự Hệ thống mượn sách thư việnlà một trong những ví dụ kinh điển và hiệu quả nhất về thẻ CRC — không phải vì nó phức tạp, mà vì nóđơn giản, dễ liên hệ và làm rõ.

Bằng cách tuân theo chỉnăm bước— lập ý tưởng, tạo thẻ, đóng vai, tinh chỉnh và lặp lại — bạn có thể:

  • Phát hiện các lớp một cách tự nhiên

  • Phân công trách nhiệm rõ ràng

  • Phát hiện lỗi thiết kế sớm

  • Xây dựng mô hình tư duy chung như một đội nhóm

Và điều tuyệt vời nhất? Bạn không cần phải là nhà phát triển cấp cao để làm điều đó.
Bạn chỉ cần tò mò, vài thẻ và sẵn sàng chơi.


✅ Bây giờ đến lượt bạn: Lấy vài giấy ghi chú dán, chọn một hệ thống đơn giản (như một quán cà phê hoặc máy bán hàng tự động), và thử phương pháp CRC.

📌 Hãy nhớ: Thiết kế tốt không phải là viết mã hoàn hảo — mà là đặt ra những câu hỏi đúng.

Và với thẻ CRC, bạn đã đang đặt chúng.


📌 Thêm: Mẫu thẻ CRC in được (phiên bản văn bản)

┌────────────────────┐
│    [TÊN LỚP]    │
├────────────────────┤
│ Trách nhiệm:  │
│ -                  │
│ -                  │
│ -                  │
├────────────────────┤
│ Cộng tác viên:     │
│ -                  │
│ -                  │
└────────────────────┘

In mẫu này lên thẻ 3×5 hoặc sử dụng trong công cụ số như Miro, Figma hoặc Google Slides.


📚 Bước tiếp theo?
Bạn có muốn một hướng dẫn chi tiết vềHệ thống đặt hàng quán cà phêdùng phong cách CRC tương tự?
👉 Chỉ cần nói một tiếng — tôi sẽ gửi cho bạn nghiên cứu trường hợp tiếp theo, từng bước, với thẻ, tình huống và đóng vai!

Thiết kế vui vẻ! 🎮🧩💻

This post is also available in Deutsch, English, Español, فارسی, Français, English, Bahasa Indonesia, 日本語, Polski, Portuguese, Ру́сский, 简体中文 and 繁體中文.