Chuyển đổi mô hình từ CRUD-based UI sang Task-based UI
Last updated: October 12, 2025 Xem trên toàn màn hình



- 01 May 2022
Có thể xác định vị trí địa lý của địa chỉ IP với độ chính xác đến từng địa chỉ con phố? 443
- 04 Sep 2023
Giải mã nhóm tính cách (ISTP - Nhà kỹ thuật) 229
- 21 May 2024
Hiệu ứng chữ động (kinetic typography) là gì? 222
- 07 Jan 2025
Phân biệt Proxy, HMA và VPN 213
- 16 Oct 2020
Thiết kế "mở" là gì? 186
- 09 Aug 2024
Latency (độ trễ) là gì? 152
- 28 Feb 2023
Đừng biến phần mềm thành công việc bàn giấy hay một "tờ sớ" dài vô tận 131
- 23 Sep 2024
Lỗi FUBAR trong phần mềm là gì? 124
- 01 Jan 2025
Trắc nghiệm: Bạn sở hữu loại trí thông minh nào mạnh nhất? 89
- 15 May 2025
Hiệu quả năng lượng trong phần mềm (Energy Efficiency in Software) là gì? 43
- 14 Jun 2025
25 câu hỏi phỏng vấn Microservices 37
- 17 Aug 2025
Trắc nghiệm CI/CD — Tình huống phỏng vấn 35
- 16 Apr 2025
Thuật ngữ cơ bản và nâng cao trong thiết kế UI/UX 33
- 14 Aug 2025
Câu hỏi phỏng vấn/kiểm tra PMI Scheduling Professional (PMI-SP) 18
Việc chuyển từ CRUD (Create, Read, Update, Delete) sang Task-Based UI (giao diện dựa trên tác vụ) có nghĩa là tạo ra một giao diện người dùng giúp làm rõ các tác vụ của người dùng. Tasks (hoặc actions, commands) là cách để hướng dẫn người dùng thực hiện các hành động cụ thể trong một trạng thái hoặc quy trình làm việc nhất định. Khi bạn phân tích theo hành động, bạn sẽ bắt đầu thấy ranh giới giữa các phần, từ đó có thể chia nhỏ các entities thành nhiều boundaries độc lập.
CRUD là gì?
Trong ví dụ này, ta sử dụng một Product Entity (thực thể sản phẩm) chứa nhiều properties (thuộc tính) được dùng trong ứng dụng.
Tất cả các thuộc tính này đều khá dễ hiểu. Nếu tạo một CRUD-based UI, chúng ta chỉ cần một trang hoặc form cho phép người dùng nhập và chỉnh sửa các thuộc tính đó.
Khi nhấn nút Save, toàn bộ dữ liệu sẽ được gửi lên server, và toàn bộ entity sẽ được cập nhật.
Vấn đề của CRUD là gì?
Trong một số tình huống, việc dùng CRUD-based UI không hề sai. Tuy nhiên, khi bạn bắt đầu muốn suy ra ý định của người dùng dựa trên dữ liệu mà họ thay đổi, thì đó là lúc bạn nên chuyển sang Task-Based UI.
Ví dụ: Trong CRUD-based UI ở trên, nếu người dùng đổi giá từ $85 xuống $80 rồi nhấn Save, câu hỏi đặt ra là: họ chỉ đơn thuần thay đổi giá? Hay ý định thực sự của họ là giảm giá?
Nếu đúng là họ giảm giá, vậy những phần nào khác của hệ thống cần được thông báo?
Liệu bạn có nên gửi thông báo cho những khách hàng có sản phẩm đó trong “Wishlist” rằng giá đã giảm không?
Điểm yếu của CRUD-Based UI là không thể hiện được ý định (intent) của người dùng — nó không rõ ràng (not explicit). Bạn phải tự suy luận ra.
Trong khi đó, Task-Based UI giúp bạn làm rõ hành động của người dùng — tức là “Make the implicit explicit.”
→ Ngừng tạo ứng dụng kiểu CRUD — Hãy bắt đầu thiết kế cho tác vụ thật và ý định người dùng
Xác định ranh giới (Boundaries)
Bước đầu tiên để xây dựng Task-Based UI là xác định những thuộc tính nào của entity thay đổi cùng nhau hoặc có liên quan đến nhau.
- Hộp đỏ (phía trên) chứa Name và Description có thể thay đổi cùng nhau hoặc riêng lẻ. Hai thuộc tính này ít liên quan đến hành vi hoặc tác vụ phức tạp, nên vẫn có thể xử lý theo kiểu CRUD.
- Hộp tím (góc dưới bên trái) gồm Price, For Sale, và Free Shipping – các thuộc tính này thường liên quan đến mục đích bán hàng.
- Hộp xanh (góc dưới giữa) chứa Cost – thể hiện chi phí từ Vendor hoặc Manufacturer. Nó không liên quan gì đến Sale Price.
- Hộp vàng (góc dưới bên phải) chứa Quantity – thể hiện số lượng tồn kho trong Warehouse. Nó cũng không liên quan đến Cost hay Sale Price.
Task-Based UI là gì?
Nếu bạn tách CRUD-Based UI thành các box riêng biệt theo từng boundary, bạn có thể bắt đầu đặt câu hỏi:
- Người dùng có ý định gì khi thay đổi các trường này?
- Tại sao họ lại thay đổi chúng?
- Người dùng hoặc vai trò (role) nào chịu trách nhiệm cho phần dữ liệu đó?
- SKU, Name, Description có thể thuộc quyền sở hữu của Catalog Service/Boundary → phần này có thể vẫn chỉ là CRUD.
- Price có thể do Sales quản lý.
- Cost thuộc Purchasing.
- Quantity on Hand thuộc Warehouse.
Từ góc nhìn user/role, ta nên hỏi: “Họ đang muốn thực hiện tác vụ gì khi thay đổi dữ liệu trong boundary đó?”
Ví dụ:
Sales có thể có hai tác vụ rõ ràng: IncreasePrice hoặc DecreasePrice. Nếu muốn tăng giá, hệ thống nên cung cấp một command cụ thể cho tác vụ đó.
Nếu Warehouse kiểm kê và phát hiện số lượng thực tế ít hơn hệ thống, họ sẽ thực hiện Inventory Adjustment. Họ không chỉ “update QuantityOnHand”, mà thực hiện một hành động có chủ đích — thêm hoặc bớt số lượng vì một lý do cụ thể.
Kết luận
Không chỉ giúp làm rõ tác vụ và hành động của người dùng, Task-Based UI còn giúp xác định ranh giới (boundaries) giữa các phần trong hệ thống.
Một Product có thể “sống” trong nhiều boundaries/services khác nhau, thay vì chỉ nằm trong một entity duy nhất chứa toàn bộ dữ liệu của hệ thống.
Tóm lại, CRUD-Based UI tập trung vào dữ liệu, còn Task-Based UI tập trung vào ý định và hành động của người dùng. Chính sự thay đổi này giúp hệ thống phản ánh đúng quy trình nghiệp vụ thực tế, phân ranh giới rõ ràng, và dễ mở rộng trong tương lai.
