21. MÔ HÌNH LỚP ĐỂ XÂY DỰNG BỘ CÔNG CỤ
23.2.1. Thiết kế lớp duyệt
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 86 Hình 3. 3 – Form tạo database, thiết kế lớp duyệt
Mô tả form:
§ Button New Class: Muốn tạo lớp mới cho database, người dùng nhấn button New Class, form thiết kế lớp sẽ hiện ra.
§ Button Update / Delete Class: Muốn cập nhật (tên, các thuộc tính) một lớp đã có sẵn, người dùng chọn tên lớp đó trong danh sách, nhấn button Update Class để gọi form cập nhật lớp, hoặc nhấn button Delete Class để xoá lớp.
§ Button Build DB: Sau khi đã tạo lớp, thuộc tính cho database muốn tạo mới, người dùng nhấn Build DB. Database sẽ thật sự được gửi đi và tạo trên server, còn các thao tác xác nhận trước đó chỉ nhằm lưu trữ trong bộ nhớ ở client.
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 87 Hình 3. 4 - Thực hiện tạo các lớp duyệt cho hypertext BookShopPrj
§ Grid nhập cấu trúc lớp: dùng context menu của grid để thêm hay xoá dòng (tương đương với thêm hay xoá thuộc tính).
§ Sau khi tạo xong lớp, muốn tiếp tục tạo lớp khác, người dùng nhấn button Create Other.
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 88 23.2.2. Tạo đối tượng cho các lớp duyệt
Hình 3. 5 – Form nhập liệu cho các lớp duyệt
Thao tác nhập liệu:
§ Chọn database trong combo và nhấn Load. Danh sách các lớp của database được chọn sẽ được đưa vào combo class.
§ Chọn class muốn nhập liệu và nhấn Load. Chương trình sẽ
gửi yêu cầu đến server để lấy các đối tượng hiện có của lớp về và liệt kê trong grid.
§ Dùng grid để nhập liệu. Sau đó để xác nhận thêm, xoá, sửa cho đối tượng nào ta click vào ô bất kỳ của đối tượng đó rồi nhấn button Create, Delete hoặc Update object.
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 89 Hình 3. 6 - Nhập liệu cho lớp Book của hypertext BookShopPrj
23.2.3. Mô tả ngữ cảnh duyệt
Hình 3. 7 – Form mô tả các ngữ cảnh duyệt
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 90
§ Chọn database cần mô tả và nhấn button Load để lấy từ
server các ngữ cảnh duyệt đã có của database đó. Danh sách các ngữ cảnh sẽ hiện ra trong grid (chỉ dùng để đọc).
§ Muốn sửa hoặc xoá ngữ cảnh nào, người dùng click vào dòng tương ứng với ngữ cảnh đó trong grid rồi nhấn button Update để gọi form cập nhật ngữ cảnh, hoặc nhấn button Delete để xoá.
§ Muốn tạo mới một ngữ cảnh, người dùng nhấn button New. Sau đó chọn loại ngữ cảnh muốn tạo trong context menu. Form mô tả ngữ cảnh sẽ xuất hiện.
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 91
23.3. Công cụ soạn thảo template
Hình 3. 9 – Giao diện công cụ thiết kế template
Thành phần giao diện của công cụ gồm có:
§ TreeView cấu trúc của hypertext, gồm các template nào, mỗi template gồm các frame nào. Khi click chuột phải vào item bất kỳ trên TreeView này, context menu tương ứng với item đó (là hypertext, template hay frame) sẽ hiện ra.
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 92 Hình 3. 10 – Context menu cho hypertext
• Context menu cho template: Dùng menu item Template properties có thể đặt màu nền, nhạc nền, ảnh nền cho template đó (tức cho tập tin htm tương ứng)
Hình 3. 11 - Context menu cho template
• Context menu cho frame: Frame có thể được copy từ
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 93 Hình 3. 12 - Context menu cho frame
§ Dãy Toolbar button cũng có chức năng tương tự như các context menu này.
§ TabPage Page Frames để thiết kế vị trí, màu sắc cho các frame.
Hình 3. 13 - TreeView Function và TabPage Design Frames
§ TreeView Function: danh sách các hàm do công cụ cung cấp để thiết kế template. Có thể dùng context menu gắn với TreeView hoặc click đúp vào 1 function để thêm hàm vào frame.
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 94 Hình 3. 14 – Context menu cho TreeView Function
§ TabPage Design Frames chứa nội dung các hàm của frame đó, cách nhau bằng dấu xuống dòng. Có thể dùng context menu gắn với RichTextBox để hỗ trợ cho việc sử dụng hàm:
Hình 3. 15 - Context menu cho TabPage Design Frames
23.4. Công cụ Browser
o Giao diện trình duyệt: người dùng nhấn vào nút Select template để chọn template bắt đầu. Trình duyệt sẽ tự động phân tích, tạo tập tin htm tương ứng (đặt trong thư mục Htm của thư mục hypertext) và trình bày. Người dùng click vào link trên trang htm kết quả để chuyển sang trang kế tiếp.
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 95 Hình 3. 16 - Tập tin htm được tạo tương ứng với template tplHome.tpl
Template tplHome.tpl:
tplHome,BookShopPrj,-8323073,,,1 frHome,-1,10,10,712,523
{
Alignment(center)
Text(Minh họa việc tạo template, function cũng như tạo và duyệt htm tương ứng; Font(Arial;6;Bold, Italic;-16744448))
NewLine()
Image(ConCaiChungTaGioiThat.jpg) EndAlignment()
NewLine()
LinkTpl(tplIdxClsDerivedCtx.tpl; Template với context loại 1 IdxClsDerivedCtx)
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 96
LinkTpl(tplIdxClsDerivedGrpCtx.tpl; Template với context loại 2 IdxClsDerivedGroupCtx)
}
Hình 3. 17 - Tập tin htm được tạo tương ứng với template tplIdxClsDerivedCtx.tpl Template tplIdxClsDerivedCtx.tpl: tplIdxClsDerivedCtx,BookShopPrj,-1,wallpaper01.jpg,,1 frIdxClsDerivedCtx,-1,10,10,651,501 { Alignment(center)
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 97
Text(Minh họa context loại 1 IdxClsDerived; Font(Arial;6;Bold;-65536))
EndAlignment() NewLine()
Text(Danh sách các sách trong lớp Book; Font(Arial;5,25;Bold, Italic;-16744320))
NewLine()
IdxClsDerived(BookList; BookName; Vertical()) }
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 98
Template tplBook.tpl:
tplBook,BookShopPrj,-1,,Adoration.mid,5 Default frame,-1,10,10,784,83
{
AllLinksAtt(BookName; GlobalContext; Horizontal(><)) }
Default frame 2,-1,10,93,784,167 {
Alignment(center);
AttribImg(Book; GlobalInstance; BookImg; GlobalContext) EndAlignment();
}
Default frame 3,-1,10,260,787,286 {
AttribFont(Book; GlobalInstance; BookDescr; GlobalContext; Font(Times New Roman;3;Regular;-16777088))
} frNext,-1,696,547,100,53 { NextLinkHtm(Next; GlobalContext) } frPrev,-1,596,546,100,54 { PrevLinkHtm(Prev; GlobalContext) }
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 99
CHƯƠNG 4:
XÂY DỰNG SERVER CHO
OOHDM
24. GIỚI THIỆU CHUNG
- Nội dung chương này sẽ đề cập đến vấn đề xây dựng server cho việc lưu trữ các lớp đối tượng hypermedia dựa trên phương pháp OOHDM và sử dụng cơ sở dữ liệu hướng đối tượng để lưu trữ. Môi trường lập trình được chọn để phát triển là Microsoft Visual C# (.NET Framework 1.1.1432) chạy trên hệ điều hành WindowsXP/2k/NT.
- Toàn bộ quá trình cài đặt chia làm 4 phần:
- Cài đặt OOHDM Server. Đây là chương trình chạy trên máy chủ quản lý toàn bộ các giao dịch với các máy client, quản trị cơ sở dữ liệu hypermedia
- Cài đặt chương trình OOHDM Definition
- Cài đặt chương trình OOHDM Template Designer - Cài đặt chương trình OOHDM Browser
25. GIẢI PHÁP CHO VIỆC LỰA CHỌN CƠ SỞ DỮ LIỆU
- Ban đầu khi xây dựng OOHDM, vì hoạt động trên môi trường mạng, cơ sở dữ liệu tập trung ở Server và do bài toán mang tính hướng đối tượng
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 100
nên ta phải chọn một hệ quản trị cơ sở dữ liệu hướng đối tượng và phải hỗ trợ mô hình client/server với multi-user. Và ứng cử viên đầu tiên là Versant, một trong những sản phẩm nổi tiếng và lâu đời với công nghệ OODBMS. Thế nhưng do Versant phát triển từ rất sớm nên Versant bị dính rất chặt với C/C++. Vậy cho nên khi công nghệ .NET ra đời thì Versant gặp vấn đề ở ngôn ngữ hỗ trợ, các version từ 6.0.5.2 trở về trước không thể biên dịch thành công 100% các chương trình trên môi trường Microsoft VC++ 7.0 trở lên. Một lý do đơn giản là C mà .NET sử dụng là ANSI C++, còn Versant lại sử dụng C/C++ thường cho việc xây dựng các thư viện hỗ trợ của mình. Do đó sẽ không thể phát triển ứng dụng trên môi trường .NET.
- Do đó ta sẽ chọn sản phẩm của FastObjects thuộc tập đoàn Poet. Ở những ngày đầu FastObjects cũng chỉ hỗ trợ trên môi trường Microsoft Visual C++6.0 mà thôi. Nhưng năm 2004 FastObjects đã cộng tác với Versant tung ra sản phẩm FastObjects.Net với khả năng tích hợp hoàn toàn vào môi trường Visual Studio .NET, hỗ trợ ngôn ngữ C#, VB.NET, Jsharp, và với sản phẩm FastObjects.Net này Poet đã thực sự có được một OODBMS theo kiểu Component của mình.
- Vấn đề về hệ quản trị cơ sở dữ liệu đã được giải quyết, thế nhưng lại phát sinh vấn đề là làm thế nào để chuyển các đối tượng đã được lưu vào trong cơ sở dữ liệu từ server đến client ? Và vấn đề cũng đã được giải quyết, ta có thể xem cách giải quyết ở phần “kiến trúc phần lưu trữ” bên dưới.
26. CÀI ĐẶT ỨNG DỤNG OOHDM SERVER
26.1. Kiến trúc tầng lưu trữ
- Ta sẽ xem xét sơ đồ quan hệ giữa các lớp OOHDM được lưu trữ vào cơ sở dữ liệu hướng đối tượng, đây là sơ đồ biểu diễn mới ở mức cơ sở dữ liệu của FastObject.NET:
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 101 Hình 4. 1 - Kiến trúc tầng lưu trữ
- Khi có yêu cầu lưu trữ từ client, server sẽ tiến hành đổi các đối tượng tương ứng sang dạng có thể lưu trữ.
- Lý do chuyển đổi?
Thật ra theo như tính chất của sản phẩm FastObjects.NET mà ta nói ở các chương trước, thì không cần phải thêm bất kì thao tác hay thêm dòng code nào ngoài những dòng code chuẩn của FastObjects.NET để thực hiện việc lưu trữ các đối tượng của một lớp cả. Nhưng do ứng dụng của ta hoạt động theo giao thức TCP/IP, giữa client và server có sự chuyển dữ liệu với nhau và dữ
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 102
liệu ở đây là những thể hiện (đối tượng) của các lớp OOHDM. Do đó ta phải sử dụng tính năng Serialize của .NET để đồng bộ các thể hiện của các lớp thành các đối tượng dữ liệu tập tin; khi đó ta chỉ việc gửi các gói tin với phần dữ liệu là nội dung của tập tin từ
server cho client hoặc ngược lại để trao đổi thông tin với nhau. Nhưng thuộc tính Serialize của .NET chỉ cho phép serialize một số kiểu cơ bản mà thôi, vì lý do này ta không thể serialize các đối tượng đã được đánh dấu là persistent của FastObjects.NET. Do đó ta phải tạo các lớp gần như song sinh với các lớp OOHDM cơ bản nhưng chỉ chứa các thuộc tính và phương thức cần lưu vào cơ sở dữ liệu bằng cách xây dựng thêm hàm Clone().
- Sau khi đã có được các đối tượng có khả năng lưu vào cơ sở dữ liệu, ta sẽ gởi lệnh lên FastObjects.NET component để lưu vào cơ sở dữ liệu.
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 103
26.2. Kiến trúc tầng runtime
Hình 4. 2 - Kiến trúc tầng runtime
- Server được thiết kế theo mô hình 3 lớp.
- Giao diện tách với phần xử lý, ứng với mỗi form ta sẽ có lớp xử lý tương ứng cho form đó, và nếu có yêu cầu về dữ liệu, lớp xử lý sẽ
tiến hành gởi yêu cầu cho lớp chuyên trách về Database.
Ví dụ: ta có lớp FrmMain là lớp hiển thị giao diện tương tác với người dùng, thì nó sẽ có lớp xử lý tương ứng là DFormMain. - Khi client có yêu cầu về dữ liệu, client sẽ gởi yêu cầu lên cho
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 104
HDBServerCtl. Trong HDBServerCtl có chứa đối tượng HDBServerEngine, đối tượng này sẽ lo các giao tác giữa client và server.
- HDBServerEngine sẽ tạo biến session cho client để theo dõi hoạt động của client, đồng thời cập nhật các trạng thái của server và theo dõi hoạt động kết nối và ngắt kết nối từ client.
26.3. Giao diện chương trình
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 105 Hình 4. 4 – Form điều chỉnh các tham số về connection
Ở form này ta có thể thiết lập lại các tham số liên quan đến phần kết nối giữ client và server như: thay đổi địa chỉ ip của server, số hiệu cổng lắng nghe…
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 106 Hình 4. 5 – Form điều chỉnh các tham số về session
Với form này ta có thể thay đổi các tham số liên quan đến vấn đề session và log file. Ta có thể điều chỉnh chế độ tạo log file, kích thước tối đa của log file…
26.4. Chức năng của Server
Như đã trình bày ở trên, OOHDM Server sẽ lắng nghe ở port mặc định là 2411, và số hiệu này có thể điều chỉnh lúc runtime, hoặc thay đổi lúc cài đặt chương trình.
Server có các chức năng sau:
- Khởi động dịch vụ gởi nhận thông tin để lắng nghe yêu cầu từ
phía client
- Tạo phiên làm việc cho client khi client kết nối thành công - Ghi nhận các phiên làm việc của từng client
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 107
- Ghi nhận các hoạt động của client có liên quan đến thao tác trên cơ sở dữ liệu
- Ghi nhận trạng thái làm việc của chính mình (server) - Hủy phiên làm việc của client
- Tạo kết nối với client - Hủy kết nối với client
- Lưu dữ liệu nhận được vào cơ sở dữ liệu - Đọc dữ liệu từ có sở dữ liệu và gửi cho client - Sao lưu cơ sở dữ liệu
- Tạm dừng liên lạc với client
- Dừng hẳn dịch vụ gửi nhận thông tin
27. CHI TIẾT CÁC LỚP ĐỐI TƯỢNG TẦNG STORAGE
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 108 Hình 4. 6 – Sơđồ quan hệ giữa các lớp OOHDM
27.1. PERCArbitraryCtx
27.1.1. Thuộc tính
STT Kiểu dữ liệu Tên thuộc tính Ý nghĩa
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 109 27.1.2. Phương thức
STT Dữ liệu trả ra Tên phương thức Các tham số Ý nghĩa
5. CNavigationContext override Clone Hàm sao chép đối tượng hiện hành và trả về một đối tượng có khả năng serialize
27.2. PERCAttributeValue
27.2.1. Thuộc tính
STT Kiểu dữ liệu Tên thuộc tính Ý nghĩa
1. String attValue Chuỗi chứa giá trị cho các biến của lớp CClassAttribute
27.2.2. Phương thức
STT Dữ liệu trả ra Tên phương thức Các tham số Ý nghĩa
1. CAttributeValue Clone Hàm sao chép đối tượng hiện hành và trả về một đối tượng có khả năng serialize 2. String override ToString
27.3. PERCClassAttribute
27.3.1. Thuộc tính
STT Kiểu dữ liệu Tên thuộc tính Ý nghĩa 3. string m_sAttName Tên thuộc tính
KHOA CNTT –
ĐH KHTN
Sinh viên thực hiện: Cao Thị Thuỳ Liên - Nguyễn Thế Vũ Trang 110 27.3.2. Phương thức
STT Dữ liệu trả ra Tên phương thức Các tham số Ý nghĩa
1. CClassAttribute Clone Hàm sao chép đối tượng hiện hành và trả về một đối tượng có khả năng serialize 2. CClassAttribute static DeSerialize string fn Đọc thông tin từ file
vào đối tượng
3. Serialize string fn Ghi đối tượng ra tập tin
27.4. PERCClassDerivedGroupCtx
27.4.1. Thuộc tính
STT Kiểu dữ liệu Tên thuộc tính Ý nghĩa