Chương 7<br />
<br />
Kiến trúc<br />
Document/View<br />
1<br />
<br />
7.1. Giới thiệu document/view<br />
<br />
<br />
Một ứng dụng theo kiến trúc document/view<br />
<br />
Lớp ứng dụng - CT<br />
<br />
Lớp cửa sổ - CS<br />
<br />
Lớp quan sát - CV<br />
<br />
Lớp tài liệu - CD<br />
<br />
2<br />
<br />
7.1. Giới thiệu document/view...<br />
Các đặc điểm của kiến trúc tài liệu/quan sát<br />
- Tính độc lập dữ liệu, tài liệu của chương trình.<br />
- Tính độc lập của khung nhìn đối với cửa sổ chương trình.<br />
- Tính gắn kết giữa tài liệu và khung nhìn.<br />
- Một khung nhìn một thời điểm chỉ làm việc được với một tài liệu, ngược<br />
lại một tài liệu có thể đồng thời được xử lý bởi nhiều khung nhìn.<br />
- Cho phép quản lý lưu trữ tài liệu chương trình một cách “trong suốt”<br />
thông qua kỹ thuật Serialize gắn kết với tài liệu.<br />
Khái niệm về tạo lập động (dynamic create): là cơ chế cho phép tạo các<br />
đối tượng từ các lớp không bằng câu lệnh lập trình. Phải sử dụng các<br />
macro sau để khai báo và định nghĩa cho các lớp tương ứng:<br />
DECLARE_DYNCREATE( class_name ),<br />
IMPLEMENT_DYNCREATE( class_name , base_name ),<br />
RUNTIME_CLASS( class_name ).<br />
<br />
<br />
3<br />
<br />
7.1. Giới thiệu document/view...<br />
Có hai kiểu kiến trúc này: SDI (đơn tài liệu) và MDI (đa tài liệu)<br />
- Đơn tài liệu là chương trình chỉ xử lý một tài liệu tại một thời điểm.<br />
- Đa tài liệu cho phép xử lý nhiều tài liệu (trên nhiều khung nhìn) đồng thời.<br />
Minh họa SDI và MDI như sau:<br />
<br />
<br />
4<br />
<br />
7.2. Ứng dụng kiểu SDI<br />
Bước 1: Dẫn xuất để xây dựng lớp cung cấp cho chương trình:<br />
Lớp ứng dụng CT từ lớp CWinApp.<br />
Lớp khung cửa sổ CS từ lớp CFrameWnd.<br />
Lớp tài liệu CD từ lớp CDocument.<br />
Lớp CV từ lớp CView.<br />
<br />
Bước 2: Cho phép tạo lập động các lớp CS, CD và CV bằng cách sử dụng<br />
các cặp macro DECLARE_DYNCREATE và<br />
IMPLEMENT_DYNCREATE.<br />
Bước 3: Tạo một mẫu (template) để liên kết các lớp CS, CD và CV với nhau<br />
qua đối tượng lớp CSingleDocTemplate.<br />
Bước 4: Phân tích cú pháp và xử lý dòng lệnh bằng hàm<br />
ParseCommandLineInfo().<br />
<br />
Bước 5: Nạp chồng một số hàm thành viên để thực hiện như:<br />
- Hàm lưu trữ và đọc tài liệu<br />
CObject :: Serialize()<br />
- Hàm vẽ tài liệu lên khung nhìn<br />
CView :: OnDraw(),...<br />
5<br />
<br />