Saturday, May 12, 2012

Phần 1: Giới thiệu Domain-Specific Development

Giới thiệu:
DSL Tools và một phần của Visual Studio SDK, có thể download từ http://www.microsoft.com/downloads/details.aspx?familyid=51A5C65B-C020-4E08-8AC0-3EB9C06996F4&displaylang=en nếu bn dùng Visual Studio 2005 http://www.microsoft.com/downloads/details.aspx?familyid=30402623-93CA-479A-867C-04DC45164F5B&displaylang=en nếu bn dùng Visual Studio 2008.
DSL Tools tích hợp trong Microsoft Visual Studio 2005 Microsoft Visual Studio 2008 để h trợ một hướng phát triển phần mềm có tên là Domain-Specifc Development.
Domain-Specific Development dựa trên sự quan sát rằng: nhiều vấn đề phát triển phần mềm có thể được giải quyêt dễ dàng bằng cách thiết kế một ngôn ngữ mục đích đặc biệt (special-purpose language).
Ví dụ, hãy nghĩ đến việc tìm kiếm tất cả sự xuất hiện của một mẫu (pattern) trong một file, và làm một cái gì đó với mỗi sự xuất hiện mà bạn tìm thấy?
· Cách 1: Sử dụng lớp .NET System.Text.RegularExpression.Regex, biểu thức chính qui (regular expression) (?<user>[^@]+)?<host>.+) được áp dụng cho một chuỗi các kí tự sẽ tìm các địa chỉ email trong nó, và cho mỗi địa chỉ tìm thấy, gán chuỗi con ngay trước dấu”@” cho biến user, và chuỗi con ngay sau dấu “@” cho biến host.
· Cách 2: Nếu không có regular expresion, một developer sẽ phải viết một chương trình đặc biệt để nhận ra các pattern (mẫu) và gán các giá trị đúng cho các biến thích hợp. Đây là một nhiệm vụ khá nặng và sẽ gặp nhiều lỗi.
Domain-Specific Development áp dụng cùng hướng tiếp cận trên cho nhiều vấn đề, đặc biệt là những vấn đề bao gồm việc quản lý sự phức tạp của các hệ thống phân tán hiện đại ( ví dụ như những thứ có thể được phát triển trên .NET platform ). Thay vì chỉ sử dụng các ngôn ngữ lập trình mục đích chung (general-purpose programming language) để giải quyết những vấn đề này mỗi cái tại một thời điểm, người sử dụng Domain-Specific Development tạo và cài đặt các ngôn ngữ đặc biệt, mỗi ngôn ngữ giải quyết một cách hiệu quả toàn bộ một lớp các vấn đề tương tự nhau.
Các Domain-Specific Languaguage có thể là textual (text) hay graphical (đồ họa). Các ngôn ngữ đồ họa có các thuận lợi quan trọng hơn các ngôn ngữ text trên nhiều vấn đề, bởi vì chúng cho phép giải pháp được trực quan hóa một cách rất trực tiếp trên các diagram. DSL Tools làm cho việc cài đặt DSL đồ họa trở nên dễ dàng, và cho phép Domain-Specific Development được áp dụng cho một phạm vi rộng và cho nhiều vấn đề.

Domain-Specific Development

Domain-Specific Development là một cách giải quyết các vấn đề mà bạn có thể áp dụng khi một vấn đề cụ thể xuất hiện lặp đi lặp lại.
Mỗi sự xuất hiện của vấn đề có nhiều khía cạnh giống nhau, và mỗi phần có thể được giải quyết một lần và cho tất cả (xem Figure 1-1).
Các khía cạnh khác nhau của một vấn đề được thể hiện bởi một ngôn ngữ đặc biệt. Mỗi sự xuất hiện cụ thể đó được giải quyết bằng cách tạo ra một model hay biểu thức trong ngôn ngữ đặc biệt và gắn model này vào trong phần cố định của solution.
Phần cố định của solution được viết sử dụng các thiết kế, coding và testing truyền thống, phụ thuộc vào kích thước và hình dạng của vấn đề, phần cố định này của solution có thể được gọi là một framework, một platform, một trình thông dịch, hay một Aplication Programming Interface (API). Phần cố định capture các mẫu kiến trúc mà hình thành nên domain và đưa ra các điểm mở rộng cho phép nó được sử dụng trong nhiều solution.
What makes the approach applicable is the fact that you create the variable part of the solution by using a special-purpose language—a DSL.
DSL có thể là văn bản hay đồ họa. Vì công nghệ cho domain-specific development đã hoàn thiện, chúng ta mong đợi thấy các công cụ hổ trợ việc phát triển và tích hợp của các DSL text và đồ họa. Con người có một dãy các cảm giác về loại ngôn ngữ nào mà họ thích hơn. Ví dụ, nhiều người thích các ngôn ngữ text cho input, bởi vì họ có thể gõ nhanh, nhưng các ngôn ngữ đồ họa cho ouput, bởi vì có thể dàng xem “bức tranh lớn” (big picture) trong một diagram. Các biểu thức text thì dễ tính toán sự khác biệt và dễ kết hợp hơn, trong khi các biểu thức đồ họa thì dễ thấy các mối quan hệ hơn.
Để tạo ra một giải pháp hoạt động cho vấn đề được chỉ ra, phần cố định của giải pháp phải được tích hợp với phần thay đổi được thể hiện bởi model. Có 2 hướng tiếp cận phổ biến cho việc tích hợp này.
· Thứ nhất, là hướng tiếp cận trình diễn, mà phần cố định chứa một trình thông dịch cho DSL được sử dụng để thể hiện phần thay đổi. Một hướng tiếp cận như thế có thể linh hoạt, nhưng nó có thể có các bất lợi về việc thể hiện kém và khó khăn trong việc debug.
· Thứ hai, một biểu thức đặc biệt hay diagram (biểu đồ) có thể được convert một cách đầy đủ thành code và có thể được biên dịch cùng với phần còn lại của giải pháp – đó là hướng tiếp cận phát sinh code. Đây là một thủ tục biến đổi phức tạp hơn, nhưng nó cung cấp các thuận lợi trong khả năng mở rộng, biểu diễn, và debug.
Các DSL đồ họa không chỉ là các diagram. Nếu bạn chỉ muốn tạo ra các diagram, bạn có thể sử dụng các chương trình vẽ diagram nổi tiếng như Microsoft Visio để đạt được kết quả lớp thứ nhất (first-class result). Thay vào đó, bạn đang thực sự tạo ra các model thể hiện một cách khái niệm hệ thống mà bạn đang xây dựng, cùng với các sự thể hiện bằng biểu đồ nội dung của chúng. Một model được thể hiện đồng thời bởi một hay nhiều diagram, với mỗi diagram thể hiện một khía cạnh đặc biệt của model, xem Figure 1-2 để thấy rõ hơn
 
>>Phần 2

No comments:

Post a Comment