Bỏ qua để đến nội dung

Nên chọn Canvas App hay Model-driven App?

Khi bắt đầu một dự án Power Apps, câu hỏi xuất hiện sớm nhất thường là “Nên làm Canvas App hay Model-driven App?”. Nghe như đang chọn giữa hai công nghệ, nhưng thực chất đây là quyết định về User Experience, Data Architecture, Business Process, Application Complexity và khả năng bảo trì lâu dài.

Câu hỏi tốt hơn không phải “cái nào tốt hơn?” mà là:

Ứng dụng này lấy Data làm trung tâm, hay lấy Experience làm trung tâm?

Canvas App bắt đầu từ trải nghiệm; Model-driven App bắt đầu từ mô hình dữ liệu:

flowchart TB
  subgraph C["CANVAS APP"]
    direction TB
    UX["User Experience"] --> SCR["Screens"] --> CTRL["Controls"] --> INT["Interactions"] --> D1["Data"]
  end
  subgraph M["MODEL-DRIVEN APP"]
    direction TB
    DM["Business Data Model"] --> TB["Tables"] --> REL["Relationships"] --> FV["Forms / Views"] --> BP["Business Process"] --> APP["Application"]
  end
  • Canvas hỏi: “Người dùng cần một trải nghiệm như thế nào?”
  • Model-driven hỏi: “Doanh nghiệp cần quản lý những business entity và process nào?”

Đúng như tên gọi — một tấm canvas để thiết kế trải nghiệm. Maker kiểm soát gần như toàn bộ: layout, screen, navigation, controls, màu sắc, hình ảnh, responsive behavior, user journey. Microsoft mô tả Canvas như một bề mặt thiết kế trống, nơi maker kéo-thả component và dựng trải nghiệm khớp cách người dùng làm việc.

flowchart LR
  BC["Blank Canvas"] --> DS["Design Screens"] --> AC["Add Controls"] --> CD["Connect Data"] --> BL["Build Logic"] --> UX["User Experience"]

Canvas đặc biệt hợp khi trải nghiệm người dùng là yêu cầu quan trọng nhất.

Model-driven được xây quanh Microsoft Dataverse: bắt đầu từ tables, relationships, forms, views và process components; giao diện phần lớn tự sinh và tự responsive trên nhiều thiết bị. Ví dụ doanh nghiệp cần quản lý Customer, Opportunity, Contract, Invoice, Project, Task, Approval — Model-driven cung cấp sẵn Views, Forms, Charts, Dashboards, Business Rules và Business Process Flows. Đây là mảnh đất của Enterprise Line-of-Business Applications.

Câu hỏi đầu tiên: Experience-centric hay Data-centric?

Phần tiêu đề “Câu hỏi đầu tiên: Experience-centric hay Data-centric?”

Đây là decision rule đầu tiên nên áp dụng:

flowchart TB
  Q["Điều gì DẪN DẮT ứng dụng?"]
  Q --> E["Experience<br/>(màn hình, luồng, thiết bị)"] --> CV["→ Canvas"]
  Q --> DA["Data Model<br/>(entity, quan hệ, role, view)"] --> MD["→ Model-driven"]

Nếu yêu cầu bắt đầu bằng “màn hình phải trông thế này”, “tối ưu cho tablet”, “layout đúng nghiệp vụ hiện trường” → nghiêng Canvas. Nếu bắt đầu bằng “chúng tôi có Customer, Contract, Project, Task…”, “mỗi entity nhiều trạng thái”, “nhiều role cùng làm việc trên dữ liệu”, “cần view/filter/search/history/security” → nghiêng Model-driven.

Khi nào Canvas mạnh — UX đặc thù, task-focused

Phần tiêu đề “Khi nào Canvas mạnh — UX đặc thù, task-focused”

Ví dụ app Site Inspection: người dùng đứng ở công trường, cần chọn Project → chụp ảnh → chọn Issue Type → nhập mô tả → lấy vị trí → Submit. Màn hình nên cực đơn giản, một task-focused experience — họ không muốn nhìn Views, Related Tables, Subgrids, nhiều Tab. Đây là lãnh địa của Canvas.

Khi nào Model-driven mạnh — Business Data phức tạp

Phần tiêu đề “Khi nào Model-driven mạnh — Business Data phức tạp”

Ví dụ một CRM với Lead, Customer, Opportunity, Quotation, Contract, Case, Activity và quan hệ phong phú. Account Manager cần search / filter / open / xem opportunities & contracts / tạo activity / xem history / update status. Nếu tự dựng tất cả bằng Canvas, team phải tự làm List Screen, Search, Filtering, Forms, Navigation, Related Records, Pagination, Responsive, Security-aware UI — chính là những pattern Model-driven đã cung cấp sẵn.

Business application càng data-intensive, Model-driven càng có lợi thế.

Data Source là một yếu tố quyết định lớn

Phần tiêu đề “Data Source là một yếu tố quyết định lớn”

Model-driven chỉ kết nối trực tiếp Dataverse. Canvas linh hoạt hơn — Dataverse, SharePoint, SQL, API và nhiều connector khác. Nếu chỉ cần một app nhỏ trên SharePoint List, Canvas thường tự nhiên hơn; nếu đang xây enterprise application với relational data model thì Dataverse + Model-driven thường là kiến trúc tốt hơn.

Dataverse Security — lợi thế lớn của Model-driven

Phần tiêu đề “Dataverse Security — lợi thế lớn của Model-driven”

Enterprise app thường cần User / Team / Business Unit / Role / Record Ownership / Column Security / Row-level Access. Dataverse cung cấp một security model mạnh ở tầng nền tảng; với Model-driven, UI tự động hoạt động trên security context đó (user → security role → chỉ thấy record được phép). Rất lợi khi xây CRM, Project/Case/Contract Management và enterprise workflow. Xem thêm Bảo mật & Phân quyền.

Một hiểu lầm cần tránh: Canvas = SharePoint và Model-driven = Dataverse — không đúng. Cả hai đều dùng được Dataverse:

flowchart TB
  DV["DATAVERSE"] --> CV["Canvas App"]
  DV --> MD["Model-driven App"]

Data platform và UX architecture là hai quyết định liên quan nhưng không giống nhau. Một Canvas App trên Dataverse là lựa chọn rất tốt cho frontline / mobile / task-centric.

Đây là insight quan trọng nhất. Cùng một Dataverse (Inspection, Issue, Project, Location, Photo), nhân viên hiện trường dùng Canvas (nhanh, đơn giản, touch, camera, task-oriented) còn Supervisor dùng Model-driven (all inspections, filters, views, assignments, history, dashboards):

flowchart TB
  DV["BUSINESS DATA · DATAVERSE"]
  DV --> MD["Model-driven<br/>Back Office"]
  DV --> CV["Canvas<br/>Mobile / Field"]
  DV --> PP["Power Pages<br/>External User"]
  • Mobile ≠ Canvas. Model-driven có Unified Interface responsive, chạy tốt trên browser và mobile. Câu hỏi đúng: mobile user đang làm task đơn giản (→ Canvas) hay cần business workspace đầy đủ như mở Customer/Opportunity/Activity (→ Model-driven vẫn hợp)?
  • Offline ≠ Canvas. Canvas trên Dataverse có offline-first (local store, delta sync, conflict handling) nhưng có giới hạn (connector non-Dataverse như SharePoint không hỗ trợ offline này). Đừng mặc định “offline = Canvas” — xét theo data source, thiết bị, volume, sync, conflict.
  • Dashboard ≠ Canvas. Model-driven có sẵn Views/Charts/Dashboards; phân tích phức tạp thì thêm Power BI. Đừng dựng Canvas chỉ để tự vẽ dashboard cho mục tiêu enterprise analytics.
  • Freedom có cost. Canvas cho pixel-level control, nhưng team tự chịu trách nhiệm responsive, navigation, consistency, accessibility, error handling, state management → nhiều UX freedom hơn = nhiều design responsibility hơn. Model-driven ít tự do hơn nhưng tăng productivity (ít UI design → ít rework → build nhanh).
  • Requirement thay đổi. Thêm field/entity trong Model-driven thường là add column → add to form → add to view; Canvas phải xét thêm screen, gallery, formula, navigation, responsive. Data model càng hay mở rộng, Model-driven càng giảm chi phí thay đổi.
  • Search/Filter & Delegation. Nếu 90% thời gian user tìm và xử lý records, Model-driven Views cho search/sort/filter/saved view sẵn. Với Canvas trên dataset lớn phải hiểu delegation — công thức không delegating được sẽ chỉ xử lý một tập giới hạn ở client.
  • Maintenance > Development speed. Canvas prototype dựng cực nhanh, nhưng 3 năm sau có thể là 80 màn hình + hàng nghìn công thức Power Fx khó bảo trì. Hãy tính Total Cost of Ownership, không chỉ Time to First Demo.

Microsoft cho phép nhúng custom page (trải nghiệm kiểu canvas) vào Model-driven App — mở ra layout linh hoạt ngay trong một Model-driven application:

flowchart TB
  MD["MODEL-DRIVEN APP"]
  MD --> F["Standard Form"]
  MD --> V["View"]
  MD --> D["Dashboard"]
  MD --> CP["Custom Page → Canvas-style UX"]

Trước đây “cần UX đặc thù → Canvas”; ngày nay “phần lớn Model-driven + một trải nghiệm đặc biệt → Custom Page” thường là kiến trúc tốt hơn. Đừng biến cả hệ thống thành Canvas chỉ vì một màn hình đặc biệt.

Tình huốngPersona chínhKhuyến nghị
CRM (Lead/Customer/Opportunity/Contract/Case)Sales, CS, ManagementModel-driven làm core
Mobile Sales (viếng khách, check-in, chụp ảnh, tạo đơn nhanh)Field SalesCanvas trên cùng Dataverse
Approval nhiều loại, có history/security/auditAdmin + ApproverModel-driven core + Canvas/Custom Page cho approver
Project Management (Project/Task/Risk/Contract/Payment)PMOModel-driven core + Canvas cho Site Engineer
Inventory Count (scan → đếm → scan tiếp)WarehouseCanvas (đếm) + Model-driven (quản lý)

Mẫu lặp lại: một Dataverse — nhiều experience cho từng persona, tốt hơn ép mọi người vào một app.

NhómVí dụThường chọn
Transaction / Back-officeSales Admin, Finance, HR, PM, CSModel-driven
FrontlineTechnician, Warehouse, Site Engineer, Field SalesCanvas
ExternalCustomer, Supplier, Contractor, PartnerPower Pages

Hoặc theo bản chất công việc: Manage business records → Model-driven · Perform a specific task → Canvas · Serve external users → Power Pages.

Hỏi lần lượt: (1) Core data có phải Dataverse? (2) Nhiều business entity? (3) Quan hệ phức tạp? (4) User chủ yếu quản lý records hay thực hiện task? (5) UX có cần đặc thù cao? (6) Nhiều role/security? (7) App sống lâu & tiếp tục mở rộng?

Nếu đa số nghiêng về Data Model · Relationships · Records · Security · Long Lifecycle → Model-driven. Nếu nghiêng về Task · Special UX · Mobile · Visual Interaction · Few Screens → Canvas.

Yếu tốNghiêng Model-drivenNghiêng Canvas
Trọng tâmDữ liệu & quy trìnhTrải nghiệm & tác vụ
Nguồn dữ liệuDataverse (bắt buộc)Dataverse hoặc nhiều connector
Số business entityNhiều, quan hệ phức tạpÍt
Hành vi userRecord-centric (tìm/mở/sửa)Task-centric (làm/submit)
Bảo mậtRole/row/column chi tiếtĐơn giản
Business Process FlowCó, nhiều stageÍt/không
Vòng đờiDài, mở rộng liên tụcNgắn/đơn lẻ
PersonaBack-office, managementFrontline, mobile

Với enterprise, thường tốt nhất không chọn “Canvas versus Model-driven”, mà là Model-driven Core + Experience Extensions:

flowchart TB
  DV["DATAVERSE · Enterprise Data Core"]
  DV --> MD["Model-driven<br/>Back Office · Management · Admin"]
  DV --> CV["Canvas<br/>Frontline · Mobile · Task"]
  DV --> PP["Power Pages<br/>External · Customer · Supplier"]
  MD --> PA["Power Automate → Integrations"]
  CV --> PA
  PP --> PA

Model-driven quản lý enterprise core (data · process · security); Canvas/Custom Page dùng khi một persona hoặc use case cần UX chuyên biệt. Đây là One Business Platform — Multiple Experiences, và cũng gọn cho ALM (mọi thứ đóng gói trong Power Platform Solutions, đi từ dev → test → prod).

Canvas và Model-driven không phải “đơn giản vs cao cấp” hay “đẹp vs không đẹp” — chúng là hai triết lý thiết kế: Canvas bắt đầu từ Experience, Model-driven bắt đầu từ Business Data Model.

Nguyên tắc tư vấn của BSD Insight:

  • Experience-driven → Canvas App
  • Data & Process-driven → Model-driven App
  • Với enterprise: nếu core là relational business data trên Dataverse, hãy ưu tiên Model-driven làm core, rồi thêm Canvas cho frontline/task và Custom Page cho UX đặc thù ngay trong Model-driven.
flowchart TB
  ONE["ONE BUSINESS DATA MODEL · DATAVERSE"]
  ONE --> MD["Model-driven → Manage Business"]
  ONE --> CV["Canvas → Perform Task"]
  ONE --> PP["Power Pages → Engage Externally"]

Câu hỏi cuối cùng không nên là “Canvas hay Model-driven?” mà là “Với mỗi persona và mỗi business process, experience nào phù hợp nhất — trong khi vẫn giữ một enterprise data model và governance thống nhất?”.

Chia sẻ: