.Định nghĩa mụ hỡnh miền

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) 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 (Trang 28)

Phần này mụ tả làm thế nào để định nghĩa mụ hỡnh miền và một mụ hỡnh miền cú nghĩa gỡ trong vai trũ của một cụng cụ DSL được phỏt sinh (generated DSL tool). Tất cả cỏc DSL đều cú một mụ hỡnh miền ở nhõn của nú. Nú định nghĩa cỏc khỏi niệm được trỡnh bày (đại diện – miờu tả) bởi ngụn ngữ, cỏc thuộc tớnh của chỳng, và cỏc mối quan hệ của chỳng. Tất cả cỏc người sử dụng DSL phải cú kiến về những cỏi này tới một vài phàm vi, bởi vỡ tất cả cỏc phần tử họ tạo ra và thao tỏc trong khi sử dụng DSL sẽ được mụ tả bởi mụ hỡnh miền. Mụ hỡnh miền giống như một ngữ phỏp cho DSL; nú định nghĩa cỏc phần tử mà cấu thành một model và đưa ra cỏc luật để làm thế nào cỏc phần tử này cú thể được kết nối với nhau.

Mụ hỡnh miền cũng cung cấp cỏc nền tảng cho việc xõy dựng cỏc khớa cạnh khỏc của ngụn ngữ. Việc định nghĩa cỏc ký hiệu, toolbox, explorer, cửa sổ thuộc tớnh, việc xỏc định tớnh hợp lệ, sự xuất bản, và sự triển khai, tất cả đều được xõy dựng trờn mụ hỡnh miền. Nú cũng được dựng để phỏt sinh API cú thể lập trỡnh, mà bạn cú thể sử dụng để tựy biến và mở rộng ngụn ngữ, và cú thể truy cập từ cỏc template đẻ phỏt sinh code và cỏc artifact nguyờn bản khỏc.

Cỏc thành phần cơ bản của mụ hỡnh miềning khỏ đơn giản nếu bạn quen thuộc với thiết kế hướng đối tượng hay lập trỡnh hướng đối tượng.

2.2. Đặc trưng 2: Khả năng định nghĩa cỏc ràng buộc 2.2.1.Định nghĩa cỏc luật 2.2.1.Định nghĩa cỏc luật

Một khỏi niệm quan trọng khỏc khi làm việc với cỏc model trong store là cỏc luật. Chỳng ta sẽ gặp cỏc luật này khi viết cỏc tựy biến. Một luật được định nghĩa khi tỏc giả DSL cần lan truyền cỏc thay đổi tới cỏc phần tử trong store để mà cỏc phần tử khỏc cũng bị ảnh hưởng. Vớ dụ, cỏc luật được sử dụng để sửa cỏc diagram một cỏch tự động bất cứ khi nào model thay đổi. Bõy giờ chỳng ta sẽ chỳ ý một vài điều thiết yếu sau:

 Luật là một class mà kề thừa từ AddRule, ChangeRule, DeleteRule, RolePlayerChangedRule, hay một trong nhiều mục khỏc. Phương thức cú thể override này cung cấp một đối số mà mang lại cỏc chi tiết của sự thay đổi.

 Luật cú một thuộc tớnh RuleOn chỉ ra lớp nào nú ỏp dụng trờn đú.

 Luật được thực thi với giao tỏc trong đú sự thay đổi xuất hiện. Nú cú thể tạo ra cỏc thay đổi để luật được ỏp dụng (được đưa vào hang đời để được thực thi).

Phải đăng ký custom rule nay trong lớp DomainModel: public partial class IssueStateModelsDomainModel {

protected override Type[] GetCustomDomainModelTypes() {

return new System.Type[] { typeof(MyNewRule) }; }

}

2.2.2.Định nghĩa cỏc ràng buộc

Cú 2 cỏch thờm ràng buộc:

 Thay đổi trờn mụ hỡnh.

 Tạo 1 file C# trong 1 thư mục tỏch biệt sỏt cạnh mó được phỏt sinh (generated code), file này sẽ chứa 1 phần định nghĩa class, thờm cỏc phương thức xỏc nhận tớnh hợp lệ vào trong cỏc class được phỏt sinh (generated class).

2.3. Đặc trưng 3: Khả năng phỏt sinh code

Code (mó) cho trỡnh thiết kế của DSL được phỏt sinh từ file định nghĩa DSL. Để thực hiện, vào solution explorer( trong Visual Studio chớnh) click vào nỳt “Transform All Templates”. Tất cả cỏc file mó sẽ được phỏt sinh.

Hỡnh 2-5: Nỳt “Transform All Templates”

Sau khi biờn tập việc định nghĩa DSL, luụn luụn nhấn nỳt “Transform All Templates”. Thư mục “GeneratedCode” chứa cỏc file text template với phần mở rộng là .tt. Mỗi file cú cú một file phụ trợ đú là kết quả được phỏt sinh. Click dấu [+] để xem. Cỏc file được phỏt sinh bao gồm cả C# và resource file. Đừng thay đổi cỏc file được phỏt sinh (generated file).

Nhấn F5 để qua experimental Visual Studio (Debugging project). Thờm file mới vào project Debugging (menu lệnh “Add new item”), thờm vào nú cỏc phần tử và mối quan hệ.

2.4. Đặc trưng 4: Khả năng trỡnh diễn

Mục này mụ tả cỏch làm thế nào để định nghĩa presentation aspect – giao diện. Đú là làm thế nào thụng tin được mó húa trong cỏc model element bờn dưới được hiển thị thụng qua giao diện người dựng của trỡnh thiết kế.

Cú 3 cửa sổ trong giao diện người dựng mà cỏc thụng tin được hiển thị: vựng thiết kế, model explorer, và cửa sổ thuộc tớnh.

Việc định nghĩa khớa cạnh trỡnh bày (presentation aspect – giao diện) bao gồm việc định nghĩa cỏc ký hiệu đồ họa trờn vựng thiết kế, việc tựy biến sự xuất hiện của trỡnh explorer, và sự tựy biến sự xuất hiện của cửa sổ thuộc tớnh.

Phần phức tạp nhất là việc định nghĩa cỏc ký hiệu đồ họa, vỡ thế hầu hết chương này sẽ giải thớch về khớa cạnh này. Trỡnh explorer và cửa sổ thuộc tớnh sẽ giải quyết sau cựng.

Ký hiệu Đồ họa (Graphical Notation) – Tổng quan

Một trỡnh thiết kế đồ họa trỡnh bày (hiển thị) một vài element của một model trờn vựng thiết kế thụng qua một kớ hiệu đồ họa mà sử dụng cỏc shape (hỡnh) và cỏc connector (mối kết nối). Tất cả cỏc phần tử (element) được tạo ra thụng qua cỏc menu mặc định

trờn explorer, và cỏc hỡnh (shape) được tạo ra trờn diagram một cỏch tự động. Núi chung, việc tạo ra một model element (phẩn tử của mụ hỡnh) sẽ tự động tạo ra phần tử giao diện tương ứng (shape hay connector – hinh hay mối kết nối).

Hỡnh 2-6: Thể hiện của một model trong designer kết quả

Cỏc hỡnh (shape) trờn lược đồ (diagram) được ỏnh xạ tới cỏc phần tử (element) trong mụ hỡnh (model).

Cỏc hỡnh (shape) và mối kết nối (connector) trong định nghĩa DSL (DSL definition) cú nhiều thuộc tớnh cho phộp tựy biến màu sắc và kiểu (style), kớch thước ban đầu khi shape được tạo ra lần đầu tiờn, hỡnh dỏng hỡnh học của shape, và v.v… Bạn cú thể định nghĩa bộ trang trớ văn bản (text và iocn decorator) và icon cho cỏc shape và mối kết nối. Một text decorator (bộ trang trớ text) được sử dụng để hiển thị text, thường là giỏ trị của một vài domain property bờn dưới, với hay liền kề với một shape.

Để cỏc model element trong DSL cú thể được trực quan húa (visualize) trờn diagram (diagram surface). Ta cần phải định nghĩa:

 Loại (kind) và vẻ bề ngoài (appearance – sự xuất hiện) của cỏc hỡnh (shape) mà sẽ được sử dụng để thể hiện (present) những phần tử (element) đú.

 Một ỏnh xạ từ định nghĩa hỡnh (shape definition) tới domain class của cỏc phần tử, mà sẽ điều khiển hành động sắp đặt (placement behavior) của một hỡnh (shape) và diện mạo (appeareance) của trỡnh trang trớ (decorator) bị ảnh hưởng như thế nào khi dữ liệu thay đổi.

Để cỏc link cú thể được trực quan húa trờn diagram thỡ cần phải định nghĩa:

 Diện mạo của mối kết nối (connector) mà sẽ được sử dụng để thể hiện

cỏc link.

 Một ỏnh xạ từ định nghĩa connector tới domain relationship cho cỏc link, sẽ xỏc định cỏch hành xử kết nối của một connector và diện mạo của decorator bị ảnh hưởng như thế nào khi dữ liệu thay đổi.

Cú nhiều loại shape (vớ dụ shape hỡnh học và shape hỡnh ảnh). Shape hỡnh ảnh hiển thị một hỡnh ảnh cụ thể. Một shape hỡnh học hiển thị một shape với đường nột hỡnh học bờn ngoài như hỡnh chữ nhật (người sử dụng DSL cú thể resize)

Diagram và Editor

Việc định nghĩa kớ kiệu đồ họa được thực hiện trong ngữ cảnh của một diagram, sau đú được tham chiếu bởi việc định nghĩa editor.

Định nghĩa diagram và editor xuất hiện như là cỏc node trong DSL explorer. Cả 2 node này trong định nghĩa DSL được tạo ra khi tạo một project DSL sử dụng project template DSL designer. Nếu bạn xúa nú, cú thể tạo lại nú băng cỏch click lờn node cấp cao nhất (Dsl) trong DSL explorer và chọn “Add Diagram” hay chọn “Add Custom Editor” / “Add Designer” từ menu ngữ cảnh.

Diagram

Việc định nghĩa diagram là một vật chứa (container) cho cỏc shape map và connector map. Hỡnh bờn dưới trỡnh bày định nghĩa của diagram cho Issue State DSL

Hỡnh 2-7: Định nghĩa diagram cho Issue State DSL

Cửa sổ bờn tay trỏi trỡnh bày cỏc phần tử con (sub-element) của định nghĩa diagram trong DSL explorer, và cửa sổ bờn tay phải là cỏc thuộc tớnh của định nghĩa DSL. Cỏc thiết đặt thuộc tớnh được túm tắt trong bảng sau

Appearance Cỏc thiết đặt định nghĩa diện mạo trực quan của diagram, như màu background

Code Cỏc thiết đặt ảnh hưởng tới hỡnh thức của code được phỏt sinh cho diagram. Tất cả cỏc thiết đặt này được kề thừa từ domain class, bởi vi một định nghĩa diagram cũng là một domain class.

Definition Cỏc thiết đặt này tương tự như của domain class(name, namespace, base diagram), với sự bổ sung thờm một thuộc

tớnh để chỉ rừ lớp của element được thể hiện bởi một diagram

Documentation Như nhiều phần tử khỏc trong định nghĩa DSL, phần tài liệu định nghĩa một thuộc tớnh chứa cỏc note (ghi chỳ) về thiết kế của DSL

Exposed Style Properties

Đõy là cỏc thuộc tớnh chỉ đọc và chỉ ra rằng cú hay khụng một thiết đặt kiểu trong mục appearance (như fill color) cú thể được thiết lập bởi người sử dụng trỡnh thiết kế đớch trong cửa sổ thuộc tớnh

Resources Cỏc thuộc tớnh này cung cấp cỏc tài nguyờn dạng text được sử dụng với giao diện của trỡnh thiết kế đớch. Tài nguyờn được phỏt sinh trong file .resx để mà chỳng cú thể được cục bộ húa cho cỏc văn húa khỏc nhau. Một từ khúa để drive F1 Help trong trỡnh thiết kế đớch cú thẻ được cung cấp

Bảng 0-1: Cỏc mục thiết đặt thuộc tớnh cho diagram

Editor

Cú 2 loại editor: một trỡnh thiết kế đồ họa (giao diện – graphical designer) và một trỡnh soạn thảo tựy biến. Định nghĩa của một editor xuất hiện trong node “Editor” trong DSL explorer. Dữ liệu được định nghĩa ở đõy được sử dụng để phỏt sinh ra cỏc cỏi đặt (implementation) của lớp EditorFactory, toolbox, và cỏc hành động xỏc nhận tớnh hợp lệ. Mặc định khi bạn tao ra một DSL authoring project mà sử dụng DSL designer project template, định nghĩa DSL định nghĩa một trỡnh thiết kế (designer) như là một trỡnh soạn thảo của nú (editor)

Trỡnh soạn thảo (một phần của định nghĩa DSL) chứa định nghĩa của toolbox và hành động xỏc định tinh hợp lệ.

Hỡnh 2-8: Định nghĩa của editor cho Issue State DSL

Cỏc thuộc tớnh của editor bao gồm một tham chiếu tới “Root Class” mà liờn kết với designer (trỡnh thiết kế) (vớ dụ, xuất hiện như là phần tử trờn cựng trong editor‟s explorer được phỏt sinh). “Editor Guid” được sử dụng trong code cho lớp EditorFactory được phỏt sinh.

Trong mục “Resources”, cú cỏc thiết đặt để định nghĩa phần mở rộng của file được sử dụng để chứa cỏc model cho DSL và định nghĩa icon liờn đới với nhứng file đú (vớ dụ, trong Windows Explorer hay Visual Studio solution explorer).

Designer (Trỡnh thiết kế)

Khi trỡnh soạn thảo (editor) là một trỡnh thiết kế (designer), cú một entry bờn dưới mục định nghĩa trong cửa sổ thuộc tớnh tham chiếu tới lớp Diagram được sử dụng bởi trỡnh thiết kế (vớ dụ, IssueStateDiagram). Root class liờn đới với trỡnh thiết kề và lớp mà referenced diagram represent phải giống nhau. Nếu chỳng khụng giống nhau, một lỗi xỏc định tớnh hợp lệ trong DSL designer sẽ xuất hiện.

Custom Editor(trỡnh soạn thảo tựy biến)

Ta cú thể định nghĩa một trỡnh soạn thảo tựy biến (là một trỡnh soạn thảo khụng cú diagram). Ta sẽ chọn cỏch này nếu vựng thiết kế đồ họa (graphical design surface) khụng thớch hợp để present (trỡnh bày) thụng tin mà bạn muốn capture (đưa vào) trong DSL của bạn. Trong trường hợp này, bạn phải tạo ra một control Windows Form để cung cấp sự trỡnh bày tựy biến (custom presentation) của dữ liệu từ mụ hỡnh.

Để làm được điều này, xúa trỡnh thiết kế đang đúng vai là một trỡnh soạn thảo (chọn node Editor trong DSL explorer và nhấn delete). Và sau đú thờm vào một trỡnh soạn thảo tựy biến (với root node trong explorer được chọn, chọn “Add Custome Editor” và thiết đặt cỏc thuộc tớnh của nú.

Bất cứ khi nào bạn thay đổi định nghĩa DSL, click nỳt “Transform All Templates” trong header của solution explorer. Việc này sẽ tạo lại nội dung của cỏc thư mục GeneratedCode. Sau đú sử dụng phớm F5 để complile lại code và chạy trỡnh designer để xem tỏc dụng của cỏc thay đổi.

Double click trờn lỗi này sẽ dẫn bạn tới đoạn code với những chỉ dẫn trờn cỏi bạn phải làm.

Shapes(hỡnh)

Shape là những node của một kớ hiệu đồ họa và được sử dụng để trực quan húa cỏc phần tử của một model. Phần này đi sau vào chi tiết của việc định nghĩa shape và shape map.

Kind of Shapes (Cỏc loại Shape)

Cú 5 loại shape khỏc nhau: geometry shape (shape hỡnh học) , compartment shape (shape ngăn ra từng phần), imgae shape (shape hỡnh ảnh), port (cổng), và swimlane. Cỏc thiết lập (categories of setting) ỏp dụng cho tất cả cỏc shape tương tự như của Diagram, cộng thờm mục “Layout”. Chỳng được túm tắt trong bảng sau:

Appearance Cỏc thiết đặt đinh nghĩa giao diện trực quan của hỡnh, như màu sắc, độ dày của đường kẻ, v.v…

Code Cỏc thiết đặt ảnh hưởng tới hỡnh thức của code được phỏt sinh của shape. Tất cả cỏc thiết đặt được kề thừa từ domain class, bởi vỡ cỏc định nghĩa shape cũng là định nghĩa domain class.

Definition Cỏc thiết đặt này tương tự như domain classs (name, namespace, base geometry shape), với việc thờm một thuộc tớnh tooltip định nghĩa cỏc hành xử của tooltip khi hover trờn một shape trong trỡnh thiết kế đớch.

Documentation Như với nhiều phần tử khỏc trong một định nghĩa DSL, phần documentation (tài liệu) định nghĩa một thuộc tớnh để chứa cỏc note về thiết kế của DSL.

Exposed Style Properties

Tất cả cỏc thuộc tớnh này đều là chỉ đọc (read-only) và chỉ ra răng một thuộc tớnh kiểu trong mục appearance cú thể được thiết đặt bởi người sử dụng của trỡnh designer đớch trong cửa sổ thuộc tớnh hay khụng (vớ dụ fill color), Phần này được thảo luận trong phần trước trong phần “Diagram”

Layout Cỏc thuộc tớnh tỏc động đến layout (cỏch bố trớ) và kớch thước của shape.

Resources Cỏc thuộc tớnh này cung cấp cỏc tài nguyờn text và image được sử dụng với giao diện của trỡnh designer đớch. Cỏc tài nguyờn được phỏt sinh trong file .resx để mà chỳng cú thể đượ địa phương húa cho nhiều nờn văn húa khỏc nhau.

Bảng 0-2: Cỏc categories setting của shape

Geometry Shapes

Hỡnh 3-5 bờn dưới mụ tả một geometry shape. Chọn một thiết đặt và cỏc mụ tả hiện ra trong thanh bờn dưới của cửa sổ thuộc tớnh.

Image Shapes

Một image shape là một shape dựng để display một image hơn là một outline (đường nột bờn ngoài). Một decorator (bộ trang trớ) cú thể là tựy chọn hay cú nhiều decorator. Hỡnh sau thể hiện chi tiết một image shape được định nghĩa trong Task Flow DSL template

Cỏc thiết đặt về outline và fill area khụng ảnh hương đến vẻ bề ngoài của imgae shape. Tuy nhiờn cú 2 setting liờn qua tới image shape:

 Trước tiờn đú là “Image Resources” xỏc định image (hỡnh) nào được hiển thị

 Thứ hai là thiết đặt “Has Default Connection Points” xỏc định xem shape cú cỏc điểm kết nối (connection point) Bắc-Nam-Đụng-Tõy. Nếu là

True thỡ cỏc giỏ trị mặc định, nếu là False thỡ cỏc mối nối sẽ nối ở bất kỡ đõu dọc theo một hỡnh chữ nhật vụ hỡnh.

Một port là một shape đớnh kốm vào đường viền bờn ngoài của một shape mà chỉ cú thể di chuyển xung quanh đường viền đú. Đỡnh nghĩa của nú giống như của geometry shape.Hỡnh sau minh họa một port

Swimlanes

Swimlane được sử dụng đẻ phõn chia một diagram thành cỏc dũng hay cột Hỡnh sau định nghĩa một swimlane thẳng đứng

Cú cỏc thiết đặt để thay đổi vẻ bề ngoài của swimlane header và separator, cũng như thuục tớnh “Layout” xỏc định swimlane phõn chia diagram theo chiều dọc hay chiều ngang. Chiều rộng của horizontal swimlane được lờ đi, chiều cao của vertical swimlane thường bị bỏ qua.

Shape Inheritance

Cho phộp kế thừa giữa cỏc hỡnh, với một hạn chế là một shape thuộc một loại chỉ cú thể kế thừa từ một shape cựng loại. Một shape con sẽ kề thừa cỏc decorator và compartment (nếu thớch hợp) của base shape nhưng phải override cỏc thuộc tớnh appearance, layout và resource với dữ liệu của nú. Nếu bạn muốn nú giống base shape thỡ phải set bằng tay.

Shape Maps

Shape map được sử dụng kết hợp shape class với domain class. Cú compartment shape, swimlane map và shape map cho geometry, port, và image shape.

Một khi được tạo, một shape map được view và edit qua DSL detail window thụng qua việc chọn nú, xem trong “Diagram/Shape Map”

Mapping Definition Common to All Shapes

“Parent element path” xỏc đinh phần tử là logical parent cho domain class được tham chiếu

Mapping Compartments

Cỏc compartment được liệt kờ bờn tay trỏi, chọn một compartment sẽ hiện ra định nghĩa của ỏnh xạ cho compartment đú. Cú 2 thụng tin cần cung cấp để mapping một compartment. Thứ nhất đú là tập hợp cỏc element được sử dụng để tạo cỏc entry trong compartment. Thứ hai là thụng tin hiện tại sẽ được display cho mỗi element. Hộp chọn “Use custom element collection” thỡ generated code khụng được build, và lỗi sẽ dẫn bạn tới nơi cú lỗi để xử lý.

Vớ dụ:

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) 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 (Trang 28)

Tải bản đầy đủ (PDF)

(98 trang)