Tải bản đầy đủ (.pdf) (98 trang)

Tìm hiểu mô hình miền chuyên biệt và ứng dụng vào bài toán chuyển đổi dữ liệu cước

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.08 MB, 98 trang )


ĐẠI HỌC QUỐC GIA HÀ
NỘI

TRƯỜNG ĐẠI HỌC CÔNG
NGHỆ









NGUYỄN VĂN DŨNG








TÌM HIỂU MÔ HÌNH MIỀN CHUYÊN BIỆT
VÀ ỨNG DỤNG VÀO BÀI TOÁN CHUYỂN
ĐỔI DỮ LIỆU CƯỚC















LUẬN VĂN THẠC



























Hà Nội -
2011
ĐẠI HỌC
QUỐ
C GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG
NGHỆ







NGUYỄN VĂN DŨNG











TÌM HIỂU MÔ HÌNH MIỀN CHUYÊN BIỆT
VÀ ỨNG DỤNG VÀO BÀI TOÁN CHUYỂN
ĐỔI DỮ LIỆU CƯỚC







Ngành: Công nghệ thông tin
Chuyên ngành: Công nghệ phần mềm
M
ã số: 60 48 10



LUẬN VĂN THẠC





NGƯỜI HƯỚNG DẪN KHOA HỌC: TS Đặng Đức Hạnh




















Hà Nội –
2011


I

Lời cam đoan

Tôi xin cam đoan luận văn “Tìm hiểu mô hình miền chuyên biệt và ứng dụng vào
bài toán chuyển đổi dữ liệu cước” là do tôi tự nghiên cứu và hoàn thành dưới sự hướng
dẫn của TS. Đặng Đức Hạnh.
Tôi xin chịu hoàn toàn trách nhiệm về lời cam đoan này.
Hà nội, ngày 21 tháng 06 năm 2011



Nguyễn Văn Dũng
II

Lời cảm ơn

Tôi xin trân trọng gửi lời cảm ơn tới giáo viên hướng dẫn - TS. Đặng Đức Hạnh.
Là người hướng dẫn để tài, TS. Đặng Đức Hạnh đã tận tình hướng dẫn tôi trong quá
trình hoàn thành đề tài luận văn này.

III

MỤC LỤC
Lời cam đoan I
Lời cảm ơn II
MỤC LỤC III
Danh mục các ký hiệu, các chữ viết tắt IV
Danh mục các hình vẽ V
MỞ ĐẦU 1
Chương 1 – TÌM HIỂU MÔ HÌNH MIỀN CHUYÊN BIỆT 2
1.1. Khái niệm và giải pháp mô hình miền chuyên biệt 2
1.2. Những lợi ích mô hình miền chuyên biệt cho người phát triển 9
1.3. Định nghĩa ngôn ngữ mô hình cho một miền chuyên biệt 11
1.4. Phát triển sinh code 13
1.5. Cách thực thi DSM 13
Chương 2 – MỘT TIẾP CẬN VỚI MÔ HÌNH MIỀN CHUYÊN BIỆT 15
2.1. Đặc trưng 1: Khả năng định nghĩa miền chuyên biệt 15
2.1.1. Tạo một DSL Solution trong Visual Studio 15
2.1.2. Định nghĩa một DSL 19
2.1.3. Định nghĩa mô hình miền 20
2.2. Đặc trưng 2: Khả năng định nghĩa các ràng buộc 20

2.2.1. Định nghĩa các luật 20
2.2.2. Định nghĩa các ràng buộc 21
2.3. Đặc trưng 3: Khả năng phát sinh code 21
2.4. Đặc trưng 4: Khả năng trình diễn 22
2.5. Đặc trưng 5: Khả năng cài đặt 31
Chương 3 – ỨNG DỤNG MIỀN CHUYÊN BIỆT TRONG THIẾT KẾ HỆ THỐNG
CHUYỂN ĐỔI DỮ LIỆU CƯỚC 33
3.1. Phân tích miền định dạng dữ liệu cước 33
3.1.1. Tìm hiểu một số chính sách cước 33
3.1.2. Khảo sát một số khuôn dạng dữ liệu cước 39
3.2. Thiết kế hệ thống chuyển đổi dữ liệu cước 55
3.2.1. Xây dựng ý tưởng về hệ thống chuyển đổi dữ liệu cước 55
3.2.2. Mô tả hệ thống 57
3.2.3. Thiết kế hệ thống chuyển đổi dữ liệu cước 69
3.2.4. Mô hình vật lý của hệ thống 78
3.3. Cài đặt miền chuyên biệt định dạng dữ liệu cước để tạo ra các thư viện liên kết động 79
3.3.1. Định nghĩa miền chuyên biệt định dạng dữ liệu tổng đài 79
3.3.2. Định nghĩa các luật ràng buộc 83
3.3.3. Sinh thư viện liên dữ liệu tổng đài liên kết động 86
KẾT LUẬN 87
TÀI LIỆU THAM KHẢO 89
PHỤ LỤC 90

IV

Danh mục các ký hiệu, các chữ viết tắt

Thuật ngữ,chữ viết tắt
Giải thích
DSM

Domain-Specific Modeling
Mô hình miền chuyên biệt
DSL
Domain-Specific Language
Ngôn ngữ miền chuyên biệt
UML
Unified Modeling Language
Ngôn ngữ mô hình hóa đối tượng
Domain
Miền
Mediation System
Hệ thống chuyển đổi dữ liệu cước
CDR
Call Detail Record
Bản ghi chi tiết cuộc gọi
DLL
Dynamic-link library
Thư viện liên kết động

V

Danh mục các hình vẽ
Hình 1-1. DSM cho thiết kế ứng dụng điện thoại di động 4
Hình 1-2. Sinh code và thực thi code theo mục đích 5
Hình 1-3. DSM cho tiến trình nghiệp vụ 6
Hình 1-4. Sinh các luồng công việc trong file XML 7
Hình 1-5. DSM for voice menu design 8
Hình 1-6. Generated 8-bit code to microcontroller 9
Hình 2-1. Domain-Specific Language Designer Wizard 15
Hình 2-2: Một DSL Solution 16

Hình 2-3: Project Debugging 18
Hình 2-5: Nút “Transform All Templates” 22
Hình 2-6: Thể hiện của một model trong designer kết quả 23
Hình 2-7: Định nghĩa diagram cho Issue State DSL 25
Hình 2-8: Định nghĩa của editor cho Issue State DSL 27
Hình 3-1. Sơ đồ kết nối của các cuộc gọi liên tỉnh trong VNPT 34
Hình 3-2. Sơ đồ kết nối các cuộc gọi quốc tế qua VTN 34
Hình 3-3. Các cuộc gọi quốc tế không qua VTN 34
Hình 3-4. Sơ đồ kết nối của các cuộc gọi VOIP liên tỉnh trong VNPT 35
Hình 3-5. Sơ đồ kết nối các cuộc gọi VOIP quốc tế trong VNPT 35
Hình 3-6. Sơ đồ kết nối các cuộc gọi di động qua VTN 36
Hình 3-7. Các cuộc gọi di động không qua VTN 36
Hình 3-8. Sơ đồ kết nối cuộc gọi VOIP liên tỉnh có qua POP 37
Hình 3-9. Sơ đồ kết nối cuộc gọi VOIP quốc tế đi không qua VTN 38
Hình 3-10. Cấu trúc của các file AMA 40
Hình 3-11. Lưu trữ và truyền file AMA 41
Hình 3-12. Bộ đệm chứa các bản ghi AMA 41
Hình 3-13. Đưa dữ liệu ra ngoài theo phương pháp giảm bộ đệm động 43
Hình 3-14. Đưa dữ liệu ra ngoài theo phương pháp điều chỉnh động 43
Hình 3-15. Quá trình ghi dữ liệu cước 44
Hình 3-16. Hoạt động của file ghi vòng 45
Hình 3-17. Thiết lập vùng copy trong file ghi vòng 47
Hình 3-18. Yêu cầu truyền FTAM bị ngắt 47
Hình 3-19. Cấu trúc gói tin AMA 48
Hình 3-30. Ý tưởng hệ thống chuyển đổi dữ liệu cước 55
Hình 3-22. Sơ đồ khối của hệ thống thu thập và xử lý dữ liệu 58
Hình 3-23. Quy trình tổng thể của hệ thống thu thập và xử lý số liệu 59
Hình 3-24. Sơ đồ hoạt động của hệ thống thu thập và xử lý dữ liệu 68
Hình 3-25. Quy trình hoạt động của khối điều khiển 70
Hình 3-26. Cấu trúc thư mục của giai đoạn chuyển đổi 71

Hình 3-27. Quy trình xử lý của quá trình chuyển đổi 72
Hình 3-28. Quy trình load dữ liệu 75
Hình 3-29. Quy trình xử lý dữ liệu 77
Hình 3-30. Mô hình vật lý của hệ thống thu thập và xử lý dữ liệu 78
Hình 3-31. Định nghĩa miền định dạng file cước tổng đài 82
Hình 3-32. Ứng dụng thiết kế trên miền định dạng file cước tổng đài 83
VI

Hình 3-33. Định nghĩa ràng buộc trong miền định dạng file cước tổng đài 85
1

MỞ ĐẦU
Các mô hình sinh code hoạt động như là những cỗ máy giúp cho việc hiểu và ghi
lại tài liệu code tốt hơn, ngoài ra chúng cũng có thể được sử dụng để sinh code hoàn
thiện và khả dụng. Sinh code hoàn thiện từ các mô hình đã trở thành mục tiêu của
ngành công nghệ trong nhiều năm. Việc phát triển tự động này giúp cải thiện hiệu
năng, chất lượt và tránh được các vấn đề phức tạp.
Không may là nhiều ngôn ngữ mô hình hóa hiện nay dựa trên code cơ bản và chỉ
cung cấp chút ít khả năng để nâng cao mức trừu tượng trong thiết kế và để lưu trữ bộ
sinh code hoàn thiện. Ví dụ, UML sử dụng khái niệm lập trình trực tiếp (Lớp, giá trị
trả lại, …) như là các cấu trúc mô hình. Có biểu tượng hình chữ nhật để minh họa lớp
trong biểu đồ nhưng mô tả bằng text tương đương trong ngôn ngữ lập trình lại không
cung cấp khả năng sinh code thực – Mức trừu tượng trong mô hình và trong code là
như nhau! Do đó, lập trình viên dễ dàng thấy rằng họ đã tự tạo mô hình mà mô tả chức
năng và hành vi có thể dễ dàng viết trực tiếp như code. Giới hạn về khả năng sinh code
buộc người phát triển phải bắt đầu lập trình thủ công sau khi thiết kế. Nó cũng dẫn đến
vấn đề vòng luẩn quẩn: Có cùng một thông tin tại hai vị trí, tại code và tại các mô
hình, là một sự rắc rối.
Mô hình chuyên biệt miền nâng mức độ trừu tượng hơn cả lập trình bằng cách chỉ
ra giải pháp sử dụng trực tiếp khái niệm miền (domain). Sản phẩm cuối cùng được

sinh ra bởi các đặc tả mức cao. Quá trình tự động này là khả thi bởi vì cả ngôn ngữ và
bộ sinh code đều chỉ cần thỏa mãn yêu cầu của công ty và miền (domain). Luận văn
tập trung tìm hiểu mô hình chuyên biệt miền và vận dụng vào thiết kế bài toán chuyển
đổi dữ liệu cước.
Luận văn được bố cục thành 5 chương. Chương 1 tập chung tìm hiểu khái niệm
và lợi ích khi sử dụng mô hình miền chuyên biệt.Chương 2 trình bày về một tiếp cận
mô hình chuyên biệt miền bằng công cụ Microsoft DSL.Chương 3 minh họa việc ứng
dụng mô hình chuyên biệt miền trong thiết kế bài toán chuyển đổi dữ liệu cước.

2

Chương 1 – TÌM HIỂU MÔ HÌNH MIỀN CHUYÊN BIỆT
Chương 1 tập chung tìm hiểu khái niệm và lợi ích khi sử dụng mô hình miền
chuyên biệt. Nội dung của chương được bố cục thành 5 mục. Mục 1 trình bày tổng
quan về khái niệm và giải pháp mô hình miền chuyên biệt. Mục 2 nêu ra những lợi ích
khi sử dụng miền chuyên biệt. Mục 3 trình bày về định nghĩa mô hình cho một miền
chuyên biệt. Mục 4 mô tả chức năng phát sinh code. Mục 5 mô tả về cách thực thi
miền chuyên biệt.
1.1. Khái niệm và giải pháp mô hình miền chuyên biệt
Những thách thức về vấn đề sinh code có thể được xử lý theo cách xử lý tương tự
với các ngôn ngữ lập trình trước đây. Bằng cách tiếp tục nâng dần mức trừu tượng.
Các mô hình không nên là code nhìn thấy được (visualize code), mà là mô hình mô tả
mức trừu tượng cao hơn ngôn ngữ lập trình. Tương tự, như trước đây việc chuyển sang
sử dụng ngôn ngữ C để nâng mức trừu tượng thì tốt hơn là ngôn ngữ hình tượng hóa
đầu tiên: code Assembler (visualizing Assembler code)
Trong mô hình miền chuyên biệt (DSM: Domain-Specific Modeling), các thành
phần mô hình đại diện mô tả các đặc trưng trong thế giới miền, không phải như trong
thế giới code. Ngôn ngữ mô hình tuân theo mức trừu tượng và ngữ nghĩa miền, cho
phép người thiết kế mô hình biết được họ đang làm việc trực tiếp với khái niệm miền
nào. Các quy tắc của miền có thể được đưa vào ngôn ngữ lập trình như các ràng buộc,

ý tưởng là kiểm tra và ngăn chặn những mô hình thiết kế không hợp lệ hoặc không
như mong muốn. Sự liên kết chặt chẽ của ngôn ngữ và vấn đề miền mang lại nhiều lợi
ích. Những điều đó là cách phổ biến để chuyển ngôn ngữ lập trình lên các mức trừu
tượng cao hơn: cải tiến hiệu năng, giảm đi sự phức tạp, và chất lượng hệ thống tốt hơn.
Mặc dù sự trừu tượng ở mức cao sẽ thay đổi giữa các ứng dụng và sản phẩm. Mọi
miền đều chứa đựng những khái niệm chuyên biệt của nó và các ràng buộc chính xác.
Cho nên, các ngôn ngữ mô hình cần là chuyên biệt cho mỗi một miền. Ta lấy một ví
dụ. Nếu chúng ta đang phát triển một cổng thông tin so sánh và mua các sản phẩm bảo
hiểm, tại sao lại không sử dụng trực tiếp thuật ngữ bảo hiểm trong ngôn ngữ thiết kế?
Các khái niệm ngôn ngữ như „Risk‟,‟Bonus‟ và „Dammage‟ phản ánh những bản chất
của bảo hiểm hơn là các lớp Java. Một ngôn ngữ chuyên biệt về bảo hiểm cũng có thể
3

đảm bảo rằng các sản phẩm thuộc mô hình hợp lệ: bảo hiểm mà không có phí tổn thì
không phải là một sản phẩm tốt. Những khái niệm miền chuyên biệt này được biết đến
và sử dụng chúng một cách tự nhiên để phản ánh các mô hình thiết kế sản phẩm. Code
sau cùng (assembler, 3GL, object-oriented etc.) có thể vẫn được sinh ra từ các mức đặc
tả cao. Nền tảng cho việc sinh code tự động từ các mô hình là cả ngôn ngữ và bộ sinh
code cần phù hợp với các yêu cầu của công ty.
a.Một số ví dụ về miền chuyên biệt
Chúng ta sẽ tiếp tục minh họa lợi ích của DSM qua việc sử dụng các ví dụ thực
tế. Chúng ta chỉ ra ở đây ba trường hợp từ các miền ứng dụng khác nhau: ứng dụng
điện thoại di động, luồng xử lý nghiệp vụ và voice menus (danh mục giọng nói) trong
bộ vi điều khiển 8bit. Những ví dụ này tập trung vào tính logic và hành vi của ứng
dụng, chứ không chỉ tập trung vào các cấu trúc tĩnh mà thường được tạo ra dễ dàng
hơn.
Những ứng dụng điện thoại Symbian Series 60
Hỗ trợ bạn phát triển những ứng dụng doanh nghiệp cho di động. Sau đó, những
phát triển viên của bạn sẽ tạo ra các ứng dụng như: kiểm tra trạng thái kiểm kê, thứ tự,
đăng ký sự kiện, Trước khi xây dựng bất kể một ứng dụng mới nào, thì người phát

triển cũng đều phải thiết kế chúng trong miền chuyên biệt “phone”. Điều này kéo theo
việc áp dụng những thuật ngữ và quy tắc của chiếc điện thoại, như là danh bạ, phím
nóng, views, tin nhắn văn bản, và các hành động của người sử dụng. DSM sẽ áp dụng
trực tiếp những khái niệm tương tự này trong ngôn ngữ mô hình.
Một ví dụ của ngôn ngữ mô hình miền chuyên biệt được mô tả trong Hình 1-1.
Nếu bạn đã quen với một số ứng dụng phone, giống như phone book hoặc lịch, thì bạn
gần như đã hiểu hết ứng dụng này dùng để làm gì. Một người sử dụng có thể đăng ký
cuộc họp bằng cách sử dụng tin nhắn văn bản, lựa chọn một phương thức thanh toán,
hiển thị chương trình và dữ liệu giọng nói, duyệt chương trình hội thảo qua web hoặc
cũng có thể hủy đăng ký.
Mô hình thiết kế trực tiếp dựa trên các khái niệm miền, như Note, Pop-up, Text
Message, Form, và các truy vấn. DSM sử dụng những widgets và services của điện
thoại như là những khái niệm mô hình và đảm bảo các điều kiện ràng buộc mà mô
4

hình lập trình phone được tuân thủ. Nó cũng ngăn chặn rất nhiều những thiết kế không
hợp lệ hoặc không mong muốn - Như là: dẫn đến giảm hiệu năng hệ thống. Sau đó, bộ
sinh code cụ thể sẽ sinh ra code hoàn thiện từ mô hình thiết kế, được gọi là các dịch vụ
nền của phone (phone‟s platform services), và thực thi kết quả trong bộ giả lập hoặc
thiết bị cuối. (Hình 1-2)

Hình 1-1. DSM cho thiết kế ứng dụng điện thoại di động
5


Hình 1-2. Sinh code và thực thi code theo mục đích
Ở đây, DSM cho phép tăng mức độ trừu tượng một cách đáng kể mà không làm
mất đi tính linh động. Ngay cả trong trường hợp thay đổi nguyên tắc cơ bản trong kiến
trúc hoặc dịch vụ nền xảy ra thì cũng chỉ tương ứng với việc chỉ thay đổi bộ sinh code
hay ngôn ngữ mô hình.

Mô hình tiến trình nghiệp vụ
Ví dụ này minh họa: làm thế nào để phần mềm có thể được sinh ra dựa trên mô
hình tiến trình nghiệp vụ. Những người quản lý nghiệp vụ có thể tập trung vào việc tìm
kiếm giải pháp cho tiến trình nghiệp vụ của công ty sử dụng những khái niệm tự nhiên
hoặc phổ biến. Họ vẽ ra những mô hình sử dụng những khái niệm như là quy trình của
6

các loại khác nhau, sự kiện, tiến trình con, các đơn vị trong một tổ chức … như được
mô tả trong Hình 1-3. DSM cung cấp các khái niệm mô hình cơ bản theo các quy tắc:
làm cách nào để định nghĩa các tiến trình.
DSM cũng được tạo với mục đích sinh code để sinh ra các mô tả luồng công việc
theo một định dạng mà một workflow engine có thể thực hiện được. Tạo ra bộ sinh
code cũng trở nên dễ dàng hơn như đặc tả: không cần phải xác thực – vì ngôn ngữ
DSM và các ràng buộc quan hệ đã được kiểm tra.

Hình 1-3. DSM cho tiến trình nghiệp vụ

7


Hình 1-4. Sinh các luồng công việc trong file XML
Voice menus for an 8-bit microcontroller
Ví dụ này minh họa một DSM sử dụng để phát triển danh bạ giọng nói - voice
menus cho hệ thống tự động gia đình. Bởi vì thiết bị này có bộ nhớ và các tài nguyên
khác giới hạn nên DSM giúp tối ưu code. Hình 1-5 minh họa luồng thực thi của một hệ
thống voice menu.
DSM cung cấp những trừu tượng được định nghĩa trước, thích hợp với nhu cầu
phát triển cụ thể. Với các nhà phát triển, nghĩ về chuỗi logic truyền thông như là
„Menu‟, ‟Prompt‟, và „Voice entry‟ thì tự nhiên hơn là nghĩ nó như các thuật ghi nhớ
Assembler.


8

Bộ sinh mã tạo ra code assembler với chức năng cần thiết để đánh địa chỉ bộ nhớ,
tính toán … (Hình 1-6). Cần lưu ý rằng, mặc dù nền đích và mã là ở mức thấp, nhưng
ngôn ngữ DSM vẫn có thể thao tác trên các khái niệm miền thuần, như là: menu item,
voice message and menu selection. Vì thế, bằng cách thay đổi trình sinh code chúng ta
có thể sinh ra cho các đối tượng C từ các thiết kế tương tự.

Hình 1-5. DSM for voice menu design

9


Hình 1-6. Generated 8-bit code to microcontroller
1.2. Những lợi ích mô hình miền chuyên biệt cho người phát triển
Các ví dụ ở trên mô tả: DSM như thế nào và có thể giúp gì cho các nhà phát triển.
Mức trừu tượng cao thì thường tạo ra năng suất cao hơn. Điều này có nghĩa là không
chỉ tiết kiệm thời gian và tài nguyên để thiết kế phần mềm ban đầu, mà còn tiết kiệm
được cả trong quá trình bảo trì sản phẩm.
Những thay đổi yêu cầu thường do miền vấn đề (problem domain) chứ không
phải do miền thực thi (implementation domain), cho nên việc tạo ra những sự thay đổi
trong ngôn ngữ mô hình, mà sử dụng thuật ngữ miền, thì dễ hơn. Thêm vào đó, trong
một số miền, không cần có lập trình viên cũng có thể tạo ra đặc tả hoàn chỉnh và chạy
bộ sinh code để tạo ra code.
10


Giữ các đặc tả ở mức trừu tượng hóa cao hơn đáng kể so với mã nguồn truyền
thống. Bởi vì một ngôn ngữ cần phù hợp với chỉ một miền cụ thể, thường miền đó là

nghiệp vụ của một công ty, DSM có thể rất nhẹ. Nó không bao gồm nhiều kỹ thuật hay
cấu trúc mà tạo thêm nhiều công việc không cần thiết cho người phát triển.
DSM giảm bớt sự cần thiết của việc học ngữ nghĩa mới. Các khái niệm miền vấn
đề (Problem domain concepts) đã được sử dụng phổ biến, thì những ngữ nghĩa dễ xác
định đã tồn tại và được coi là tự nhiên như là bản chất của nó. Bởi vì ngữ nghĩa miền
cụ thể luôn phải được quản lý, vậy tại sao lại không đặt trạng thái lớp đầu tiên cho
chúng? Người phát triển không cần phải học ngữ nghĩa bổ sung (ví dụ UML) và ánh
xạ trước sau giữa miền và các ngữ nghĩa UML. Việc ánh xạ không cần thiết này là tốn
thời gian và tài nguyên, dễ dấn tới lỗi, và được thực hiện bởi tất cả những người thiết
kế - một số người có thể làm tốt hơn, nhưng thường thì mọi người làm khác nhau.
DSM dẫn tới hệ thống chất lượng tốt hơn, phần lớn bởi hai lý do. Thứ nhất, DSM
có thể chứa những luật của miền làm cho nó chính xác hơn, và thường không thể tạo ra
những điều không hợp lệ hoặc những đặc tả không mong muốn. Đây cũng là một cách
giảm chi phí để loại trừ gỡ lỗi: càng phát hiện lỗi sớm càng tốt hơn. Thứ hai, người
sinh code cung cấp ánh xạ tới một mức trừ tượng thấp hơn. Sau cùng, đặc tả được tạo
với thuật ngữ miền thường dễ đọc hơn, dẽ hiểu, dễ nhớ, hợp lệ và dễ giao tiếp với nó
a.Sử dụng DSM
Mô hình miền đặc biệt cho phép phát triển nhanh hơn, dựa trên nền tảng các mô
hình của mô hình bài toán hơn là trên các mô hình của code. Kinh nghiệm của DSM
chỉ ra rằng mục tiêu chính là cải tạo hiệu năng sản phẩm, giảm thấp công sức phát triển
và chất lượng tốt hơn. Các nhân tố cốt lõi đó đóng góp các điều sau:
 Vấn đề được xử lý một lần tại mức trừu tượng cao nhất và code cuối cùng được
sinh ra ngay từ giải pháp này.
 Tập trung của người phát triển chuyển từ code tới thiết kế, xử lý vấn đề. Độ
phức tạp và sự triển khai chi tiết có thể được ẩn đi, và quen thuộc với người sử
dụng.
11

 Tính bền vững của sản phẩm và ít gặp lỗi đã đạt được tính đơn trị tốt hơn của
môi trường phát triển và giảm đi sự chuyển đổi giữa các mức thiết kế và triển

khai.
 Kiến thức về miền được tạo ra rõ ràng cho nhóm phát triển, và được nắm bắt
trong ngôn ngữ mô hình và hỗ trợ các tiện ích.
Sự cài đặt DSM không phải đầu tư bổ sung thêm nếu người thiết kế quan tâm đến
tất cả chu trình từ thiết kế đến sinh mã. Hơn nữa, nó lưu các tài nguyên phát triển:
Thông thường tất cả các người phát triển đều làm việc với các khái niệm miền vấn đề
xử lý và ánh xạ chúng tới các khái niệm thực thi một cách thủ công. Và giữa các nhà
phát triển, có một sự khác nhau lớn. Một số thì làm tốt, nhưng không phải là ai cũng
làm tốt. Vì thế để những người phát triển có kinh nghiệm định nghĩa ra các các khái
niệm và ánh xạ chúng, và những người còn lại không cần làm điều đó nữa. Nếu hàm
sinh code đặc biệt chuyên nghiệp, nó sẽ cho ra những những dụng chất lượng tốt hơn
so với việc phát triển thủ công.
1.3. Định nghĩa ngôn ngữ mô hình cho một miền chuyên biệt
Định nghĩa một ngôn ngữ mô hình bao gồm ba dạng: các khái niệm miền, ký hiệu
đồ họa sử dụng để đại diện cho các mô hình, và các luật để hướng dẫn tiến trình của
mô hình. Định nghĩa một ngôn ngữ hoàn chỉnh là một công việc khó nhưng đó là điều
cần thiết nếu bạn muốn xây dựng một ngôn ngữ chuyên biệt cho tất cả. Công việc đó
dễ hơn đáng kể nếu bạn tạo nó duy nhất cho một miền bài toán trong một công ty.
Chìa khóa cho việc tìm kiếm những khái niệm miền là sự cung cấp kinh nghiệm
bởi các chuyên gia miền. Điển hình, chuyên gia là những người phát triển có kinh
nghiệm phát triển một vài sản phẩm trong miền đó. Họ có thể thiết kế kiến trúc đằng
sau các sản phẩm, hoặc phải chịu trách nhiệm cho việc tạo ra các thư viện đối tượng.
Anh ta có thể dễ dàng nhận ra những khái niệm miền từ các mô tả hệ thống và đối
tượng dịch vụ.
Trong ví dụ ứng dụng phone, các khái niệm miền đến từ các thành phần UI (ví
dụ: Form,Popup), menu và cấu trúc các button (các khóa người sử dụng có thể định
nghĩa) và các dịch vụ ngầm (ví dụ: text messages, web browsing). Bằng những khái
niệm được gán cho ngôn ngữ mô hình và có thể định nghĩa lại chúng trong tương lai,
12


chúng ta có thể tạo một phần khái niệm của ngôn ngữ mô hình. Mục tiêu ở đây là tạo
ra sự lựa chọn các khái niệm ánh xạ chính xác tới ngữ nghĩa của miền.
Tuy nhiên, các khái niệm miền đơn ban đầu không tạo ra ngôn ngữ mô hình:
chúng ta cần kiến thức về miền: làm cách nào để ghép nối chúng với nhau. Với miền
này, chúng ta chọn luồng ứng dụng giống như mô hình cơ bản của sự tính toán. Sự mô
tả các khái niệm miền tương tác như thế nào trong suốt quá trình ứng dụng thực thi
(nhìn Hình 1-1 để minh chứng). Chúng ta giới thiệu các khái niệm của sự bắt đầu và
kết thúc các luồng trực tiếp-có hoặc không có điều kiện. Các điều kiện được sử dụng
khi người sử dụng có thể lựa chọn một trong những sự lựa chọn có thể, ví dụ thông
qua list hoặc một menu. Chúng cũng thêm khái niệm cho code thư viện, tạo ra nó có
khả năng liên kết trong một đối tượng mở rộng trung gian và gọi chúng với các tham
số.
Tiếp theo, những khái niệm cơ bản thì được bổ sung với các luật của miền. Đặc
trưng, các luật ràng buộc sự sử dụng của ngôn ngữ bằng các định nghĩa các loại kết nối
giữa các khái niệm là hợp lệ.Chúng ta có thể đặc biệt hóa làm thế nào để chắc chắn các
khái niệm có thể được tái sử dụng và làm cách nào để các mô hình có thể được tổ
chức. Trong ví dụ phone, các luật định nghĩa khi các phần tử UI có thể có sở hữu các
menus, cái mà có thể định nghĩa các buttons bởi người sử dụng, và làm cách nào để
các dịch vụ phone khác nhau có thể được gọi trong quá trình thực thi ứng dụng. Các
luật cùng với các khái niệm được đánh mã và cách điệu hóa vào trong sự đặc tả ngôn
ngữ cái mà thường xuyên được gọi như là một metamodel. Một metamodel mô tả ngôn
ngữ mô hình hóa, giống nhưu cách mô tả ngôn ngữ của một ứng dụng.
Cung cấp phần chú thích của ngôn ngữ mô hình, chúng ta định nghĩa các biểu
tượng đại diện cho giao diện đồ họa của các khái niệm miền. Giống như miền ví dụ
của chúng ta đó là mối quan hệ giao diện người dùng, chúng ta có thể dựa trên một số
biểu tượng đó trên giao diện của phone
a.Định nghĩa domain framework
Domain framework cung cấp giao diện giữa quá trình sinh code và tầng nền dưới.
Trong một số trường hợp, code framework mở rộng không cần thiết: sự sinh code có
thể trực tiếp gọi các đối tượng nền và các dịch vụ của họ là đủ. Cho dù thế, định nghĩa

những code tiện ích framework mở rộng để tạo cho việc sinh code nhanh hơn. Như
13

vậy các đối tượng có thể đã tồn tại từ kết quả của sự phát triển trước và các sản phẩm
mới được tạo tạo ra chỉ cần một ít sự tác động lên các đối tượng đã có.
Trong ví dụ của chúng ta, framework ứng dụng chuyên nghiệp Symbian/Series
60 đã đưa ra một tập các dịch vụ tốt, ở mức cao hơn so với nền Series 60.domain
framework như vậy chỉ thêm hai chức năng: một bộ điều phối để thực hiện luồng logic
của ứng dụng, và hiển thị sự quản lý cho các ứng dụng nhiều khung nhìn.
1.4. Phát triển sinh code
Sau cùng, chúng ta muốn đóng khoảng trống giữa mô hình và code bởi định
nghĩa cách sinh code. Những vấn đề đặc biệt khi sinh code là làm cách nào các thông
tin được đưa ra từ các mô hình và chuyển chúng vào trong code. Code đó sẽ được liên
kết với framework và biên dịch thành có khả năng thực thi cuối cùng mà không cần bổ
sung thêm các điều kiện một cách thủ công. Code được sinh ra đơn giản là một trung
gian từ sản phẩm trong quá trình tới khi kết thúc sản phẩm,giống như các file .o trong
quá trình biên dịch C.
Chìa khóa đưa ra trong việc xây dựng một bộ sinh code là các khái niệm mô hình
được ánh xạ với code như thế nào. Domain framework và thư viện đối tượng có thể
tạo ra các nhiệm vụ một cách dễ dàng bằng cách tăng dần các mức trừu tượng phía
code. Trong trường hợp đơn giản nhất, mỗi một biểu tượng mô hình sản sinh ra code
cố định, bao gồm các giá trị được nhập vào các biểu tượng như là các tham số. Hàm
sinh có thể sinh ra các code khác nhau phụ thuộc vào các giá trị trong các biểu tượng,
các mối quan hệ nó có cùng với các biểu tượng khác, hoặc các thông tin khác trong mô
hình.
1.5. Cách thực thi DSM
Để có được lợi ích DSM cải tiến về năng suất, chất lượng và giảm đi độ phức tạp,
chúng ta cần một ngôn ngữ miền chuyên biệt mô tả miền và bộ sinh code. Trước đây,
người thiết kế vẫn phải cần một công cụ hỗ trợ cài đặt, thực thi. DSM hỗ trợ tất cả các
tính năng đó.

Ngày nay, công việc cần được giảm xuống để chỉ phải định nghĩa ngôn ngữ và
sinh ra code, từ khi các công cụ mô hình cơ bản cho việc mô hình hóa và sinh ra code
được hình thành. Các công cụ đó cho phép tạo ra một môi trường làm việc sẵn sàng
14

DSM trong nhiều ngày thay vì hàng tháng, các công cụ đó yêu cầu thêm vào lập trình
thủ công. Hơn nữa điều quyết định là giữ được môi trường phát triển đáp ứng tới việc
thay đổi miền: các công cụ có thể bảo trì các mô hình trong sự đồng bộ với sự tiến hóa
của ngôn ngữ và bộ sinh nên việc thiết kế công việc an toàn trong các điều kiện công
việc thật.
15

Chương 2 – MỘT TIẾP CẬN VỚI MÔ HÌNH MIỀN CHUYÊN BIỆT
Chương 2 trình bày một tiếp cận mô hình miền chuyên biệt bằng công cụ thiết kế
DSL của Microsoft. Bố cục của chương gồm 5 mục. Mục 1 hướng dẫn định nghĩa một
miền chuyên biệt. Mục 2 hướng dẫn tạo ra các luật trong miền. Mục 3 hướng dẫn cách
sinh mã. Mục 4 hướng dẫn cách tạo giao diện hiển thị cho miền chuyên biệt. Mục 5
hướng dẫn cách tạo bộ cài đặt.
2.1. Đặc trưng 1: Khả năng định nghĩa miền chuyên biệt
Đặc trưng này cho phép người sử dụng định nghĩa miền chuyên biệt bởi ngôn
ngữ miền chuyên biệt bằng công cụ Microsoft DSL Tools.
2.1.1.Tạo một DSL Solution trong Visual Studio
New Project ->Nếu có cài Visual Studio SDK, trong phần Extensibility ->
Domain-Specific Language Designer.

Hình 2-1. Domain-Specific Language Designer Wizard
Các template bao gồm:
 Minimal Languages: Chỉ đủ thể hiện một loại box và một loại line.
16


 Components Models: Các box với các port.
 Classes Diagrams: Tương tự như lược đồ lớp UML (UML class
diagram).
 Task Flows: Tương tự như lược đồ hoạt động UML (UML activity
diagram).
Các mục tiếp theo là đặt tên cho ngôn ngữ và namespace của source code cho
trình thiết kế (designer) và các công cụ phát sinh (generation tools), ta cũng đặt tên cho
phần mở rộng tên file mà sẽ được sử dụng để chứa các model (mô hình).

Hình 2-2: Một DSL Solution
Gần như tất cả code từ các file khác trong 2 project được phát sinh từ việc định
nghĩa DSL. Khi ta muốn thay đổi từ các template DSL sang DSL của ta, thì ta sẽ làm
việc trên DSL definition.
Code trong 2 project bao gồm 3 phần chính:
 Trình thiết kế (Designer) (hay ngôn ngữ mà ta đang định nghĩa) – Trình
soạn thảo mà DSL user sẽ vẽ các model
17

 Trình phát sinh mã (Code generators) – sẽ nhận lấy các model (mô hình)
và text template
 Trình xuất bản (Serializer) – được thiết kế để lưu các model và trong các
file có phần mở rộng mà ta đặt tên lúc đầu và tải chúng lên một lần nữa.
Trình Serializer được sử dụng trong trình designer và trong trình code
generator, và có thể được sử dụng trong bất cứ ứng dụng tách biệt nào
mà tác giả DSL chọn để viết
a.Các thành phần trong DSL Solution:
Hai project được tạo lúc ban đầu bởi DSL creation wizard là Dsl và DslPackage.
Project Dsl cung cấp:
 Một serializer/deserializer (bộ xuất bản/hủy xuất bản) để đọc và ghi các
thể hiện DSL của bạn xuống file.

 Những định nghĩa lớp (class) để xử lý DSL và các lược đồ của nó trong
một ứng dụng.
 Một bộ xử lý chỉ dẫn(chỉ huy – directive processor) cho phép bạn có thể
viết các text template mà sẽ xử lý DSL của bạn.
 Các thành phần thiết yếu của trình thiết kế mà sẽ biên tập (edit) DSL này
trong Visual Studio.
Project DslPackage cung cấp code cho phép DSL được biên tập (edit) trong
Visual Studio. (Có thể viết một ứng dụng stand-alone (đứng một mình – riêng rẽ) mà
xử lý DSL chỉ sử dụng assembly được tạo bởi project Dsl ). Những file này tương tự
nhau như trong các gói (pagkage) Visual Studio SDK khác.
 Tài liệu (document) xử lý code nhận biết được phần mở rộng file của
DSL và mở trình thiết kế thích hợp.
 Các menu lệnh (menu command) kết hợp với trình thiết kế DSL.
 Các file item template từ đó các thể hiện mới của DSL có thể được tạo
ra.
Trong mỗi project, có một thư mục có tên là GeneratedCode. Thư mục này chứa
các file text template (phần mở rộng là .tt), mỗi file có một file được phát sinh
(generated file) như là phần phụ trợ của nó. Trong solution explorer, click vào dấu [+]
để thấy generated file. Hầu hết các file text template có nhiều tham chiếu đến các

×