<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>IT Technology</title>
	<atom:link href="http://bupbegiandon.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://bupbegiandon.wordpress.com</link>
	<description>Chia sẻ kiến thức cho mọi người!</description>
	<lastBuildDate>Thu, 05 Jun 2008 22:01:16 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>vi</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='bupbegiandon.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/c729041a2ca63d408ab5ed4bc66267f6?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>IT Technology</title>
		<link>http://bupbegiandon.wordpress.com</link>
	</image>
			<item>
		<title>Chương 2: Tạo và sử dụng một DSL</title>
		<link>http://bupbegiandon.wordpress.com/2008/06/06/ch%c6%b0%c6%a1ng-2-t%e1%ba%a1o-va-s%e1%bb%ad-d%e1%bb%a5ng-m%e1%bb%99t-dsl/</link>
		<comments>http://bupbegiandon.wordpress.com/2008/06/06/ch%c6%b0%c6%a1ng-2-t%e1%ba%a1o-va-s%e1%bb%ad-d%e1%bb%a5ng-m%e1%bb%99t-dsl/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 21:56:16 +0000</pubDate>
		<dc:creator>bupbegiandon</dc:creator>
				<category><![CDATA[Microsoft DSL]]></category>
		<category><![CDATA[Ngôn ngữ DSL]]></category>

		<guid isPermaLink="false">http://bupbegiandon.wordpress.com/?p=139</guid>
		<description><![CDATA[Giới thiệu
Mục đích của chương này là bàn đến tất cả những khía cạnh chính của việc định nghĩa 1 domain-specific langugue (DSL) với Microsoft DSL Tools. 
Tạo một DSL Solution trong Visual Studio
New Project -&#62;Nếu có cài Visual Studio SDK, trong phần Extensibility -&#62; Domain-Specific Language Designer.

Các template bao gồm: 

Minimal    [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bupbegiandon.wordpress.com&blog=3633477&post=139&subd=bupbegiandon&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h2>Gi<span>ới </span><span>t</span><span>hiệu</span></h2>
<p><span style="font-size:11pt;line-height:115%;">Mục đích của chương này là bàn đến tất cả những khía cạnh chính của việc định nghĩa 1 domain-specific langugue (DSL) với Microsoft DSL Tools. </span></p>
<h2><a name="_Toc194416286"></a><a name="_Toc194196885"></a><a name="_Toc194416287"></a><a name="_Toc194196886"><span>T</span></a><span><span><span>ạ</span>o m</span></span><span><span><span>ộ</span>t DSL Solution trong Visual Studio</span></span></h2>
<p class="MsoNormal">New Project -&gt;N<span>ế</span>u có cài Visual Studio SDK, trong ph<span>ầ</span>n Extensibility -&gt; Domain-Specific Language Designer.</p>
<p class="MsoNormal"><span style="font-size:11pt;line-height:115%;"><!--[if gte vml 1]&amp;gt;                    &amp;lt;![endif]--><!--[if !vml]--><img src="http://bupbegiandon.files.wordpress.com/2008/06/fig2-1.jpg?w=450&#038;h=375" alt="" width="450" height="375" /><!--[endif]--></span></p>
<p class="MsoNormal"><span>Các template bao gồm: </span></p>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span>Minimal      Languages</span><span>: <span> </span>Chỉ đủ thể hiện một loại box và một loại      line.</span></li>
<li class="MsoNormal"><span>Components      Models</span><span>: <span> </span>Các box với các port </span></li>
<li class="MsoNormal"><span>Classes      Diagrams</span><span>: Tương tự      như lược đồ lớp UML (UML class diagram). </span></li>
<li class="MsoNormal"><span>Task Flows:</span><span> Tương tự như lược đồ hoạt động      UML (UML activity diagram).</span></li>
</ul>
<p class="MsoNormal"><span>Tiếp theo, đặt tên cho ngôn ngữ và namespace của source code cho designer (trình thiết kế) và generation tools (các công cụ phát sinh), 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)</span></p>
<p><span style="font-size:11pt;line-height:115%;"><!--[if gte vml 1]&amp;gt;                    &amp;lt;![endif]--><!--[if !vml]--><img src="http://bupbegiandon.files.wordpress.com/2008/06/fig2-2.jpg?w=480&#038;h=375" alt="" width="480" height="375" /></span></p>
<p class="MsoNormal"><span>Gần như tất cả code từ các file khác từ 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.</span></p>
<p class="MsoNormal"><span>Code trong 2 project bao gồm 3 phần chính:</span></p>
<p class="MsoNormal" style="margin-left:0.5in;"><span>1. 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</span></p>
<p class="MsoNormal" style="margin-left:0.5in;"><span>2. Trình phát sinh mã (Code generators) – sẽ nhận lấy các model (mô hình) và text template</span></p>
<p class="MsoNormal" style="margin-left:0.5in;"><span>3. 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</span></p>
<p class="MsoNormal"><span>Tác giả DSL có thể thay đổi các chức năng này bằng cách viết thêm code (C#) ( thường thì ít thôi). Ví dụ, để thêm menu command hay validation constrainst (ràng buộc xác định hợp lệ)<span> </span>vào editor, hay thay đổi cách mà các models được serialize (xuất bản) xuống file( chương 6) hay cách mà text template được thông dịch và mã được phát sinh.</span></p>
<p class="MsoNormal">
<p class="MsoNormal"><strong><span style="background:aqua none repeat scroll 0 50%;font-size:12pt;line-height:115%;">Có gì trong DSL solution?</span></strong></p>
<p class="MsoNormal"><span style="background:aqua none repeat scroll 0 50%;">Hai project được tạo lúc ban đầu bởi DSL creation wizard là Dsl và DslPackage.</span></p>
<p class="MsoNormal"><span style="background:aqua none repeat scroll 0 50%;">Project<span> </span>Dsl cung cấp:</span></p>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span style="background:aqua none repeat scroll 0 50%;">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.</span></li>
<li class="MsoNormal"><span style="background:aqua none repeat scroll 0 50%;">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.</span></li>
<li class="MsoNormal"><span style="background:aqua none repeat scroll 0 50%;">Một bộ xử lý chi      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.</span></li>
<li class="MsoNormal"><span style="background:aqua none repeat scroll 0 50%;">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.</span></li>
</ul>
<p class="MsoNormal"><span style="background:aqua none repeat scroll 0 50%;">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 thì tương tự nhau như trong các gói (pagkage) Visual Studio SDK khác.</span></p>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span style="background:aqua none repeat scroll 0 50%;">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.</span></li>
<li class="MsoNormal"><span style="background:aqua none repeat scroll 0 50%;">Các menu lệnh      (menu command) kết hợp với trình thiết kế DSL.</span></li>
<li class="MsoNormal"><span style="background:aqua none repeat scroll 0 50%;">Các file item      template từ đó các thể hiện mới của DSL có thể được tạo ra.</span></li>
</ul>
<p class="MsoNormal"><span style="background:aqua none repeat scroll 0 50%;">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à <strong>.tt</strong>), 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 include file (các file này được chứa trong thư mục cài đặt DSL Tool có tên là “TextTemplate”)</span></p>
<p class="MsoNormal"><span style="background:aqua none repeat scroll 0 50%;">Tất cả các generated file đều được xuất phát từ Dsl\DslDefinition.dsl. Bạn không nên thay đổi chúng (generated file), nhưng bạn có thể tùy biến generated code (mã được phát sinh) bằng cách thêm một phần các định nghĩa lớp trong các file riêng biệt. (chương 10 để biết các “tiện nghi” để tùy biến)</span></p>
<h3><a name="_Toc194416288"></a><a name="_Toc194196887"><span>Ch</span></a><span><span><span>ạy t</span>h</span></span><span><span><span>ử</span> m</span></span><span><span><span>ộ</span>t DSL Solution</span></span></h3>
<p class="MsoNormal">Đ<span>ể chạy được solution ta nhấn F5 (sẽ build solution và chạy trong chế độ debugging), việc tương đương với menu lệnh “Debug</span><span style="font-family:Wingdings;"><span>à</span></span><span> Start Debgging”. Chúng ta sẽ xem DSL trong 1 trình thiết kế (trình biên tập đồ họa) chạy chung với Visual Studio. Khi nhấn F5 sẽ xuất hiện 1 thể hiện khác của Visual Studio, được khởi tạo để thể hiện 1 ví dụ của DSL.</span></p>
<p class="MsoNormal"><span>Thể hiện mới của Visual Studio sẽ mở một project mẫu tên là Debugging, ta mở file mô hình là có tên là Sample.* (ví dụ Sample.iss)</span></p>
<p><span style="font-size:11pt;line-height:115%;"><!--[if gte vml 1]&amp;gt;                    &amp;lt;![endif]--><!--[if !vml]--><img src="http://bupbegiandon.files.wordpress.com/2008/06/fig2-3.jpg?w=480&#038;h=400" alt="" width="480" height="400" /></span></p>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span>Cửa sổ lớn nhất là màn hình thiêt kế, phần trình bày      chính của 1 thể hiện DSL. Ta phải biên tập lại việc định nghĩa DSL (trong      thể hiện Visual Studio chính) để có thể thêm các định nghĩa của các thành      phần. Khi toàn bộ DSL làm việc và được triển khai, người sử dụng DSL sẽ vẽ      các lược đồ của họ ở đây.</span></li>
<li class="MsoNormal"><span>Bên trái là toolbox. Để thêm một phần tử mới, ta      drag từ toolbox và kéo vào diagram (lược đồ); Để tạo 1 mối kết nối mới (connector)      mới, ta click vào công cụ liên quan, click trên phần tử source, sau đó là      phần tử đích trên lược đồ. Ta phải biên tập DSL definition để mà có thể      thay đổi tên của công cụ và add thêm tool.</span></li>
<li class="MsoNormal"><span>Bên phải là model explorer. Nó hiện thị model dưới dạng      cây. Nó hiện thị các phần tử (element) và<span> </span>các mối quan hệ nhúng của chúng. Trong một vài DSL, có nhiều phần tử      không xuất hiện trong màn hình thiết kế chính nhưng sẽ luôn xuất hiện      trong model explorer.</span></li>
<li class="MsoNormal"><span>Solution explorer hiện thị project Debugging chứa      file mẫu. Ta có thể đổi tên project. Khi nó được triển khai, các bản sao của      project này sẽ chạy cùng với mã của ứng dụng mà ta viết cho. Thêm các text      template file mà sẽ đọc các thể hiện DSL của người sử dụng và tạo ra code.</span></li>
<li class="MsoNormal"><span>Bên dưới là properties window dùng để thay đổi các      thuộc tính của các phần tử được chọn</span></li>
</ul>
<h3><a name="_Toc194416289"></a><a name="_Toc194196888"><span>Đ</span></a><span><span><span>ị</span>nh nghĩa m</span></span><span><span><span>ộ</span>t DSL</span></span></h3>
<p class="MsoNormal"><span>Để định nghĩa DSL ta mở file DslDefinition.dsl trong project Dsl, sẽ mở ra trình thiết kế DSL. Trình thiết kế trong giống như trình thiết kế của Minimal language hay bất kỳ DSL cụ thể khác.</span></p>
<p class="MsoNormal"><span>Cửa sổ chính gồm 2 swimlane hay cột: bên tay trái, là <em>domain model</em> là các domain class và relationship, bên tay phải là các shape và các connector mà thể hiện chúng lên màn hình. Ta có thể thêm mới các phần tử bằng cách sử dụng các công cụ trong toolbox. Trình thiết kế duy trì mốt sự trình bày dạng cây các phần tử và các mối quan hệ của chúng. Click phải lên domain class, sẽ tìm được lệnh sắp xếp lại cây.</span></p>
<p class="MsoNormal"><span>Ta edit tên của domain class, shape, connector, diagram, role name (nhãn trên 2 cánh tay của mỗi relationship), và tên của relationship. Tất cả có thê edit trực tiếp trên diagram, ngoại trừ role name.</span></p>
<p class="MsoNormal"><span>Để đổi tên của các công cụ sẽ xuất hiện trong toolbox. Những tên này không hiện thị trong main diagram của việc định nghĩa DSL – thay vào đó nhìn vào DSL explorer; sự định nghĩa các tool có thể được tìm thấy trong node Editor. Tên của chúng có thể được edit trong properties window cùng với các tooltip và tiêu đề mà sẽ hiện thị cho người sử dụng.</span></p>
<h3><a name="_Toc194416290"></a><a name="_Toc194196889"><span>Phát sinh Code (mã) cho Designer (trình thi</span></a><span><span><span>ế</span>t k</span></span><span><span><span>ế</span>)</span></span></h3>
<p class="MsoNormal">Code (mã) cho trình thi<span>ế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.</span></p>
<p><span style="font-size:11pt;line-height:115%;"><!--[if gte vml 1]&amp;gt;                    &amp;lt;![endif]--><!--[if !vml]--><img src="http://bupbegiandon.files.wordpress.com/2008/06/fig2-4.jpg?w=405&#038;h=271" alt="" width="405" height="271" /></span></p>
<p class="MsoNormal"><span>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)</span></p>
<p class="MsoNormal"><span>Nhấn F5 để qua experimental Visual Studio (Debugging project). Thêm file mới vào project Debugging (menu lệnh<span> </span>“Add new item”), thêm vào nó các phần tử và mối quan hệ.</span></p>
<h3><a name="_Toc194416291"></a><a name="_Toc194196890"><span>Vi</span></a><span><span><span>ệ</span>c thêm vào trong DSL</span></span></h3>
<p class="MsoNormal">Đ<span>ể thêm một phần tử <span style="color:red;">*Element</span>, nếu ta thấy nó nên được dẫn xuất từ lớp cơ sở trừu tượng chung. Thêm vào một vài domain class và 1 shape, định nghĩa lại shape map, và thiết đặt thuộc tính Inheritance của base class thành abstract (trong properties window), kết thúc việc định nghĩa DSL.</span></p>
<p class="MsoNormal"><span>Để tạo một <span style="color:red;">*Shape</span>, sử dụng một hình học và set thuộc tính “geometry” thành : Circle, Retangle…. Ta cũng có thể thay đỏi các thuộc tính kích thước và màu sắc mặc định của các shape và connector khác. Một tool mới được yêu cầu cho shape mình mới tạo ra có thể được thêm vào trong node Editor trong cửa sổ DSL explorer. Nếu lưu tại thời điểm này sẽ bị lỗi vì chưa định nghĩa icon cho tool mới. Trong solution, vào thư mục Resource trong project Dsl và copy một trong những file hình ở đó và đổi tên  thành </span><span style="font-family:Wingdings;"></span><span> <span style="color:red;">*ElementTool.bmp.</span></span></p>
<p class="MsoNormal">
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bupbegiandon.wordpress.com/139/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bupbegiandon.wordpress.com/139/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bupbegiandon.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bupbegiandon.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bupbegiandon.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bupbegiandon.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bupbegiandon.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bupbegiandon.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bupbegiandon.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bupbegiandon.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bupbegiandon.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bupbegiandon.wordpress.com/139/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bupbegiandon.wordpress.com&blog=3633477&post=139&subd=bupbegiandon&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bupbegiandon.wordpress.com/2008/06/06/ch%c6%b0%c6%a1ng-2-t%e1%ba%a1o-va-s%e1%bb%ad-d%e1%bb%a5ng-m%e1%bb%99t-dsl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/185123f57b7101391b9e314d1225c929?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">bupbegiandon</media:title>
		</media:content>

		<media:content url="http://bupbegiandon.files.wordpress.com/2008/06/fig2-1.jpg" medium="image" />

		<media:content url="http://bupbegiandon.files.wordpress.com/2008/06/fig2-2.jpg" medium="image" />

		<media:content url="http://bupbegiandon.files.wordpress.com/2008/06/fig2-3.jpg" medium="image" />

		<media:content url="http://bupbegiandon.files.wordpress.com/2008/06/fig2-4.jpg" medium="image" />
	</item>
		<item>
		<title>Chương 1 (cont): Các lợi ích của Domain-Specific Development</title>
		<link>http://bupbegiandon.wordpress.com/2008/06/06/ch%c6%b0%c6%a1ng-1-cont-cac-l%e1%bb%a3i-ich-c%e1%bb%a7a-domain-specific-development/</link>
		<comments>http://bupbegiandon.wordpress.com/2008/06/06/ch%c6%b0%c6%a1ng-1-cont-cac-l%e1%bb%a3i-ich-c%e1%bb%a7a-domain-specific-development/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 21:28:07 +0000</pubDate>
		<dc:creator>bupbegiandon</dc:creator>
				<category><![CDATA[Microsoft DSL]]></category>
		<category><![CDATA[Ngôn ngữ DSL]]></category>

		<guid isPermaLink="false">http://bupbegiandon.wordpress.com/?p=138</guid>
		<description><![CDATA[

Một DSL cho khả năng làm việc dưới      dạng “problem      space”, với      phạm vi ít hơn cho việc sinh ra các lỗi đến từ việc thể hiện nó trong một ngôn ngữ mục đích chung (general-purpose     [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bupbegiandon.wordpress.com&blog=3633477&post=138&subd=bupbegiandon&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="MsoNormal">
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span>Một DSL cho khả năng làm việc dưới      dạng </span><span>“</span><span>problem      space</span><span>”</span><span>, với      phạm vi ít hơn cho việc </span><span>sinh</span><span> ra các lỗi đến từ việc thể hiện nó trong một ngôn ngữ mục đích chung (general-purpose      language).</span></li>
</ul>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span>Làm việc dưới dạng “problem space”</span><span>,</span><span> làm cho model có thể sử      dụng được với những người không quen với công nghệ cài đặ</span><span>t</span><span>, bao gồm cả những người      kinh doanh.</span></li>
</ul>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span>Các model được thể hiện bằng      cách sử dụng DSL có thể được validate (xác định tính hợp lệ) ở mức trừu tượng      của <em>problem space</em>, có nghĩa là      các lỗi trong sự hiểu biết hay sự thể hiện có thể được </span><span>tìm </span><span>kiếm một cách dễ dàng hơn      trong </span><span>quá trình </span><span>phát      triển.</span></li>
</ul>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span>Các model có thể được sử      dụng để giả lập một giải pháp một cách trực tiếp, cung cấp feedback một      cách trực tiếp trên sự thích hợp của model.</span></li>
</ul>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span>Các model cũng có thể được      sử dụng để generate các model khác, và để cấu hình các hệ thống, network,      và sản phẩm khác, có thể trong sự kết hợp với các công nghệ cho phép khác      như các wizard.</span></li>
</ul>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span>Một domain-specific      language cung cấp một domain-specific API cho việc thao tác trên các model      của nó, vì vậy cải tiến năng suất của nhà phát triển.</span></li>
</ul>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span>Các artifact được phát      sinh từ một DSL không cần phải là tất cả các artifact cài đặt công nghệ; một      model thích hợp có thể được sử dụng để phát sinh các build script,      purchase order, tài liệu, hóa đơn hay các material, kế hoạch, bộ khung của      các hợp đồng hợp lệ.</span></li>
</ul>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal"><span>Một khi kiến thức kính      doanh quan trọng được capture trong một model, nó trở nên dễ dàng một cách      đáng kể để di trú một giải pháp từ một công nghệ này tới một công nghệ      khác, hay giữa các phiên bản của cùng một công nghệ. Việc này thường được      thực hiện một cách đơn giản bằng các thay đổi khiêm tốn tới các trình phát      sinh (generator) hay trình thông dịch (interpreter).</span></li>
</ul>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bupbegiandon.wordpress.com/138/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bupbegiandon.wordpress.com/138/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bupbegiandon.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bupbegiandon.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bupbegiandon.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bupbegiandon.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bupbegiandon.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bupbegiandon.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bupbegiandon.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bupbegiandon.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bupbegiandon.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bupbegiandon.wordpress.com/138/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bupbegiandon.wordpress.com&blog=3633477&post=138&subd=bupbegiandon&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bupbegiandon.wordpress.com/2008/06/06/ch%c6%b0%c6%a1ng-1-cont-cac-l%e1%bb%a3i-ich-c%e1%bb%a7a-domain-specific-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/185123f57b7101391b9e314d1225c929?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">bupbegiandon</media:title>
		</media:content>
	</item>
		<item>
		<title>Chương 1 (cont): Example (p2)</title>
		<link>http://bupbegiandon.wordpress.com/2008/06/06/ch%c6%b0%c6%a1ng-1-cont-example-p2/</link>
		<comments>http://bupbegiandon.wordpress.com/2008/06/06/ch%c6%b0%c6%a1ng-1-cont-example-p2/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 21:21:31 +0000</pubDate>
		<dc:creator>bupbegiandon</dc:creator>
				<category><![CDATA[Microsoft DSL]]></category>
		<category><![CDATA[Ngôn ngữ DSL]]></category>

		<guid isPermaLink="false">http://bupbegiandon.wordpress.com/?p=137</guid>
		<description><![CDATA[Đây là một vài ví dụ “vertical” hơn mà ở đó domain-specific development có thể được áp dụng.
Software Defined Circuitry
Nhiều sản phẩm điện tử có circuitry được lập trình bằng cách dùng phần mềm. Ví dụ, các FPGA (Field Programable Gate Arrays) là các chip có thể lập trình được sử dụng trong các lĩnh [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bupbegiandon.wordpress.com&blog=3633477&post=137&subd=bupbegiandon&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="MsoNormal" style="margin-top:12pt;"><span>Đây là một vài ví dụ “vertical” hơn mà ở đó domain-specific development có thể được áp dụng.</span></p>
<h3><a name="_Toc194416393"></a><span style="color:#000080;"><a name="_Toc194196861"><span>Software Defined C</span></a><span><span><span>ircuitry</span></span></span></span></h3>
<p class="MsoNormal" style="padding-left:30px;"><span>Nhiều sản phẩm điện tử có circuitry được lập trình bằng cách dùng phần mềm. Ví dụ, các FPGA (Field Programable Gate Arrays) là các chip có thể lập trình được sử dụng trong các lĩnh vực như software defined radio, xử lý tính hiệu số, mô tả hình tượng y khoa và nhận dạng giọng nói. Lập trình các chip như thế một cách trực tiếp trong Hardware Description Language (HDL) (ngôn ngữ mô tả phần cứng) của chúng là một nhiệm vụ ở mức thấp và đòi hỏi phải rất cẩn thận. Hướng tiếp cận Domain-Specific Development có thể được sử dụng để nâng mức độ trừu tượng cho tới khi nó thể hiện một cách trực tiếp hơn domain được cài đặt; ví dụ, một DSL hướng tới software defined radio được thảo luận trong một bài báo bởi Bruce Track của PrismTech tại www.mil-embedded.com/articles/authors/track/.</span></p>
<h3><a name="_Toc194416394"></a><span style="color:#000080;"><a name="_Toc194196862"><span><span>Embedded Systems</span></span></a></span></h3>
<p class="MsoNormal" style="padding-left:30px;"><span>Nhiều hệ thống nhúng thời gian thực có thể được khái niệm hóa như là một tập hợp các communicating finite state machine (cỗ máy trạng thái có giới hạn liên lạc). Tách biệt sự thiết kế của các hệ thống này vào các explicit state machine, cộng với một platform tổng quát cho các executing state machine có thể đơn giản hóa rất nhiều việc nghĩ về các hệ thống như thế. Trong trường hợp này, DSL là một ngôn ngữ cho việc thể hiện các state machine bao gồm các state và các transition giữa chúng¸trong khi execution platform (platform thực thi) thì hầu như được build sử dụng custom code.</span></p>
<h3><a name="_Toc194416395"></a><span style="color:#000080;"><a name="_Toc194196863"><span><span>Device Interfaces</span></span></a></span></h3>
<p class="MsoNormal" style="padding-left:30px;"><span>Nhiều thiết bị hiện đại, như điện thoại di động, thiết bị HiFi, và v.v…, có các giao diện người dung phức tạp. Các giao diện này được tổ chức một cách điển hình thông qua các luật mà làm cho giao diện có thể tiên đoán được, như một luật mà nhấn một nút cancel luôn luôn dẫn bạn về một trạng thái đã biết, hay input text luôn luôn theo sau cùng một tập các rule dự đoán trước. Một DSL có thể được tạo ra cho việc thiết kế các hệ thống như thế, mà diện mạo đồ họa của ngôn ngữ tương ứng một cách chính xác với diện mạo của giao diện thực sự được thiết kế, và các luật tương tác tác của giao diện được capture trong cấu trúc của ngôn ngữ. Các ví dụ hay của hướng tiếp cận này có thể tìm thấy tại Domain-Specific Modeling Forum website tại www.dsmforum.org.</span></p>
<h3><a name="_Toc194416396"></a><span style="color:#000080;"><a name="_Toc194196864"><span><span>Software Development Process</span></span></a></span><span><span style="color:#000080;"> Customization</span></span></h3>
<p class="MsoNormal" style="padding-left:30px;"><span>Ví dụ được sử dụng xuyên suốt cuốn sách này để minh họa DSL Tools trình bày làm thế nào sử dụng các DSL để định nghĩa các khía cạnh của tiến trình phát triển phần mềm, như việc xử lý các bug và issue, và làm thế nào sử dụng model để cấu hình các công cụ để thực thi tiến trình.<span> </span></span></p>
<p class="MsoNormal" style="padding-left:30px;"><span style="color:#000080;"><strong><span>Tất cả những ví dụ này và nhiều ví dụ khác chia sẻ cùng một hướng tiếp cận: </span></strong></span></p>
<p class="MsoNormal" style="margin-left:0.5in;text-indent:0.5in;"><span style="color:#000080;"><strong><span>(1) chỉ ra các khía cạnh của vấn đề mà cố định cho tất cả các sự xuất hiện và capture những khía cạnh đó trong một framework hay platform chung</span><span>.</span></strong></span></p>
<p class="MsoNormal" style="margin-left:0.5in;text-indent:0.5in;"><span><span style="color:#000080;"><strong>(2) chỉ ra các khía cạnh khác mà biến đổi giữa các sự xuất hiện và việc thiết kế một Domain-Specific Language mà các biểu thức hay model của nó sẽ chỉ một giải pháp cho vấn đề.</strong></span></span></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bupbegiandon.wordpress.com/137/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bupbegiandon.wordpress.com/137/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bupbegiandon.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bupbegiandon.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bupbegiandon.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bupbegiandon.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bupbegiandon.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bupbegiandon.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bupbegiandon.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bupbegiandon.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bupbegiandon.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bupbegiandon.wordpress.com/137/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bupbegiandon.wordpress.com&blog=3633477&post=137&subd=bupbegiandon&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bupbegiandon.wordpress.com/2008/06/06/ch%c6%b0%c6%a1ng-1-cont-example-p2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/185123f57b7101391b9e314d1225c929?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">bupbegiandon</media:title>
		</media:content>
	</item>
		<item>
		<title>Chương 1 (cont): Example (p1)</title>
		<link>http://bupbegiandon.wordpress.com/2008/06/06/ch%c6%b0%c6%a1ng-1-cont-example-p1/</link>
		<comments>http://bupbegiandon.wordpress.com/2008/06/06/ch%c6%b0%c6%a1ng-1-cont-example-p1/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 21:12:07 +0000</pubDate>
		<dc:creator>bupbegiandon</dc:creator>
				<category><![CDATA[Microsoft DSL]]></category>
		<category><![CDATA[Ngôn ngữ DSL]]></category>

		<guid isPermaLink="false">http://bupbegiandon.wordpress.com/?p=129</guid>
		<description><![CDATA[Trước tiên hãy xem một vài ví dụ mà DSL Tools đã được áp dụng trong thực tế. 
Ví dụ đầu tiên đến từ Independent Software Vendor (ISV) có tên Himalia. Himalia đã tạo ra một tập các DSL cho việc cài đặt các giao diện người dùng phức tạp mà không phải coding chút [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bupbegiandon.wordpress.com&blog=3633477&post=129&subd=bupbegiandon&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="MsoNormal"><span style="font-family:&quot;" lang="VI">Trước tiên hãy xem một vài ví dụ mà DSL Tools đã được áp dụng trong thực tế. </span><span style="font-family:&quot;"></span></p>
<p class="MsoNormal"><span style="font-family:&quot;" lang="VI">Ví dụ đầu tiên đến từ Independent Software Vendor (ISV) có tên Himalia. Himalia đã tạo ra một tập các DSL cho việc cài đặt các giao diện người dùng phức tạp mà không phải coding </span><span style="font-family:&quot;">chút</span><span style="font-family:&quot;" lang="VI"> nào. Himalia Navigation Model</span><span style="font-family:&quot;"> (</span><span style="font-family:&quot;" lang="VI">Figure 1-3</span><span style="font-family:&quot;">)</span><span style="font-family:&quot;" lang="VI"> định nghĩa sự di chuyển thông qua giao diện người dùng.</span></p>
<p class="MsoNormal"><span lang="VI"><span> </span>Use Case Model </span><span>(</span><span lang="VI">Figure 1-4</span><span>): </span><span lang="VI">Các Use Case, xem như các lu</span><span>ồ</span><span lang="VI">ng điều khiển lớn bao gồm các activity và transition, được định nghĩa một cách tường minh trong một state machine view để chỉ ra sự phức tạp của chúng. Các Use Case state và transition được liên kết tới các Navigation Model element và action, theo thứ tự định sẵn. </span></p>
<p class="MsoNormal" style="margin-top:12pt;"><span lang="VI"><span> </span>User Profile Model </span><span>(</span><span lang="VI">Figure 1-5</span><span>)</span><span lang="VI"> định nghĩa các user state (trạng thái người dùng) mà ảnh hưởng tới cách hành xử của user interface (giao diện người dùng).</span></p>
<p class="MsoNormal" style="margin-top:12pt;"><span lang="VI"><span> </span>Hệ thống Himalia hoàn chỉnh tích hợp những model này với những model khác vào trong Visual Studio 2005 để cài đặt các giao diện người dùng hoàn chỉnh dựa trên công nghệ Microsoft, bao gồm Windows Presentation Foundation (WPF).</span></p>
<p><span style="font-size:11pt;"><img src="http://bupbegiandon.files.wordpress.com/2008/06/fig3.jpg?w=450&#038;h=350" alt="" width="450" height="350" /></span></p>
<p class="MsoNormal" style="margin-top:12pt;"><span><!--[if gte vml 1]&amp;gt;                    &amp;lt;![endif]--><!--[if !vml]--><img src="http://bupbegiandon.files.wordpress.com/2008/06/fig4.jpg?w=450&#038;h=350" alt="" width="450" height="350" /><!--[endif]--></span></p>
<p class="MsoNormal" style="margin-top:12pt;"><span lang="VI"><span> </span>Ví dụ thứ 2 là một Systems Intergrator (SI) có tên là Ordina có trụ sở ở Hà Lan. Ordian đã xây dựng một nhà máy phần mềm hướng mô hình hoàn hảo với Microsoft Development Center của nó, có tên là SMART-Microsoft Softwar Factory.<span> </span>Factory này sử dụng 4 DSL được kết nối với nhau. Để cho phép các DSL này cộng tác với nhau, Ordina đã tạo ra một lược đồ tham chiếu chéo (cross-referencing scheme) cho phép các element trong một DSL tham chiếu tới các element trong DSL khác.</span></p>
<p class="MsoNormal" style="margin-top:12pt;"><span><!--[if gte vml 1]&amp;gt;  &amp;lt;![endif]--><!--[if !vml]--><img src="http://bupbegiandon.files.wordpress.com/2008/06/fig5.jpg?w=450&#038;h=250" alt="" width="450" height="250" /><!--[endif]--></span></p>
<p class="MsoNormal" style="margin-top:12pt;"><span lang="VI"><span> </span>Web Scenario DSL được sử dụng để mô hình các trang web và hành động của người dùng, và phát sinh ra các trang web ASP.NET</span><span> (xem</span><span lang="VI"> Figure 1-6</span><span>)</span></p>
<p class="MsoNormal" style="margin-top:12pt;"><span><!--[if gte vml 1]&amp;gt;  &amp;lt;![endif]--><!--[if !vml]--><img src="http://bupbegiandon.files.wordpress.com/2008/06/fig6.jpg?w=450&#038;h=350" alt="" width="450" height="350" /><!--[endif]--></span></p>
<p class="MsoNormal" style="margin-top:12pt;"><span lang="VI"><span> </span>Data Constract DSL được sử dụng để định nghĩa các đối tượng dữ liệu mà được làm trong suốt giữa các lớp khác nhau trong kiến trúc. Một ví dụ được </span><span>thể hiện </span><span lang="VI"><span> </span>trong Figure 1-7, minh họa nhiều loại đối tượng dữ liệu khác nhau.</span></p>
<p class="MsoNormal" style="margin-top:12pt;"><span><!--[if gte vml 1]&amp;gt;  &amp;lt;![endif]--><!--[if !vml]--><img src="http://bupbegiandon.files.wordpress.com/2008/06/fig7.jpg?w=450&#038;h=350" alt="" width="450" height="350" /><!--[endif]--></span></p>
<p class="MsoNormal" style="margin-top:12pt;text-indent:0.5in;"><span lang="VI">DSL thứ 3 trong Ordina factory là Service Model được show trong Figure 1-8, được sử dụng để phát sinh các service interface (giao diện dịch vụ) và skeleton (bộ khung) của các tiến trình thương mại mà cài đặt các dịch vụ.</span></p>
<p class="MsoNormal" style="margin-top:12pt;text-indent:0.5in;"><span><!--[if gte vml 1]&amp;gt;  &amp;lt;![endif]--><!--[if !vml]--><img src="http://bupbegiandon.files.wordpress.com/2008/06/fig8.jpg?w=436&#038;h=291" alt="" width="436" height="291" /><!--[endif]--></span></p>
<p class="MsoNormal" style="margin-top:12pt;"><span lang="VI"><span> </span>DSL cuối cùng trong Ordina factory là Business Class Model được sử dụng để phát sinh code cho các tầng Bussiness Class và Data. Model này được show trong Figure 1-9.</span></p>
<p class="MsoNormal" style="margin-top:12pt;"><span><!--[if gte vml 1]&amp;gt;  &amp;lt;![endif]--><!--[if !vml]--><img src="http://bupbegiandon.files.wordpress.com/2008/06/fig9.jpg?w=450&#038;h=350" alt="" width="450" height="350" /><!--[endif]--></span></p>
<p><span style="font-size:11pt;" lang="VI"><span> </span>Hai ví dụ này từ Himalia và Ordina là cho các DSL “horizontal” (ngang) mà ở đó các khách hàng được dự kiến cho phần mềm kết quả không phụ thuộc vào bất kì công nghiệp cụ thể nào.</span></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bupbegiandon.wordpress.com/129/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bupbegiandon.wordpress.com/129/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bupbegiandon.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bupbegiandon.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bupbegiandon.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bupbegiandon.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bupbegiandon.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bupbegiandon.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bupbegiandon.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bupbegiandon.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bupbegiandon.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bupbegiandon.wordpress.com/129/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bupbegiandon.wordpress.com&blog=3633477&post=129&subd=bupbegiandon&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bupbegiandon.wordpress.com/2008/06/06/ch%c6%b0%c6%a1ng-1-cont-example-p1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/185123f57b7101391b9e314d1225c929?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">bupbegiandon</media:title>
		</media:content>

		<media:content url="http://bupbegiandon.files.wordpress.com/2008/06/fig3.jpg" medium="image" />

		<media:content url="http://bupbegiandon.files.wordpress.com/2008/06/fig4.jpg" medium="image" />

		<media:content url="http://bupbegiandon.files.wordpress.com/2008/06/fig5.jpg" medium="image" />

		<media:content url="http://bupbegiandon.files.wordpress.com/2008/06/fig6.jpg" medium="image" />

		<media:content url="http://bupbegiandon.files.wordpress.com/2008/06/fig7.jpg" medium="image" />

		<media:content url="http://bupbegiandon.files.wordpress.com/2008/06/fig8.jpg" medium="image" />

		<media:content url="http://bupbegiandon.files.wordpress.com/2008/06/fig9.jpg" medium="image" />
	</item>
		<item>
		<title>Chương 1: Giới thiệu Domain-Specific Development</title>
		<link>http://bupbegiandon.wordpress.com/2008/06/06/ch%c6%b0%c6%a1ng-1-gi%e1%bb%9bi-thi%e1%bb%87u-domain-specific-development/</link>
		<comments>http://bupbegiandon.wordpress.com/2008/06/06/ch%c6%b0%c6%a1ng-1-gi%e1%bb%9bi-thi%e1%bb%87u-domain-specific-development/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 20:52:12 +0000</pubDate>
		<dc:creator>bupbegiandon</dc:creator>
				<category><![CDATA[Microsoft DSL]]></category>
		<category><![CDATA[Ngôn ngữ DSL]]></category>

		<guid isPermaLink="false">http://bupbegiandon.wordpress.com/?p=126</guid>
		<description><![CDATA[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&#38;displaylang=en nếu bạn dùng Visual Studio 2005 và http://www.microsoft.com/downloads/details.aspx?familyid=30402623-93CA-479A-867C-04DC45164F5B&#38;displaylang=en nếu bạn dùng Visual Studio 2008. 
DSL Tools tích hợp trong Microsoft Visual Studio 2005 và Microsoft Visual Studio 2008 để hỗ  trợ một hướng phát triển phần mềm có tên [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bupbegiandon.wordpress.com&blog=3633477&post=126&subd=bupbegiandon&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="MsoNormal"><strong><span style="font-size:12pt;line-height:115%;">Giới thiệu</span></strong><strong><span style="font-size:12pt;line-height:115%;">:</span></strong></p>
<p class="MsoNormal" style="text-indent:0.5in;"><span>DSL Tool</span><span>s</span><span> và một phần của Visual Studio SDK, </span><span>có thể </span><span>download từ <a href="http://www.microsoft.com/downloads/details.aspx?familyid=51A5C65B-C020-4E08-8AC0-3EB9C06996F4&amp;displaylang=en" target="_blank">http://www.microsoft.com/downloads/details.aspx?familyid=51A5C65B-C020-4E08-8AC0-3EB9C06996F4&amp;displaylang=en</a></span><span> n</span><span>ế</span><span lang="VI">u b</span><span>ạ</span><span lang="VI">n dùng Visual Studio 2005 </span><span>và <a href="http://www.microsoft.com/downloads/details.aspx?familyid=30402623-93CA-479A-867C-04DC45164F5B&amp;displaylang=en" target="_blank">http://www.microsoft.com/downloads/details.aspx?familyid=30402623-93CA-479A-867C-04DC45164F5B&amp;displaylang=en</a> n</span><span>ế</span><span lang="VI">u b</span><span>ạ</span><span lang="VI">n dùng Visual Studio 2008</span><span>. </span></p>
<p class="MsoNormal" style="text-indent:0.5in;"><span>DSL Tools </span><span>tích hợp trong</span><span> Microsoft Visual Studio 2005 </span><span>và </span><span>Microsoft Visual Studio 200</span><span>8 </span><span>để h</span><span>ỗ </span><span><span> </span>trợ một hướng phát triển phần mềm có tên là Domain-Specifc Development</span><span>.</span></p>
<p class="MsoNormal" style="text-indent:0.5in;"><span>Domain-Specific Development dựa trên sự quan sát rằng</span><span>: </span><span>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). </span></p>
<p class="MsoNormal" style="text-indent:0.5in;"><span>Ví dụ</span><span>, hãy nghĩ </span><span><span> </span>đến việc </span><span>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</span><span>?</span></p>
<p class="MsoListParagraphCxSpFirst" style="margin-left:1in;text-indent:-0.25in;"><!--[if !supportLists]--><span style="font-family:Symbol;"><span>·<span style="font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span></span><!--[endif]--><span>Cách 1: S</span><span>ử dụng lớp .NET <span style="color:blue;">System.Text.RegularExpression.Regex</span>, biểu thức chính qui <strong>(regular expression) (?&lt;user&gt;[^@]+)?&lt;host&gt;.+)</strong> đượ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</span><span>ỗi</span><span> con ngay sau dấu “@” cho biến host. </span></p>
<p class="MsoListParagraphCxSpLast" style="margin-left:1in;text-indent:-0.25in;"><!--[if !supportLists]--><span style="font-family:Symbol;"><span>·<span style="font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span></span><!--[endif]--><span>Cách 2: Nếu k</span><span>hông có regular expresion, một developer sẽ phải </span><span>viết</span><span> 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.</span></p>
<p class="MsoNormal" style="text-indent:0.5in;"><span>Domain-Specific Development áp dụng cùng hướng tiếp cận </span><span>trên</span><span> cho nhiều vấn đề, đặc biệt là những </span><span>vấn đề </span><span>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</span><span> (</span><span> ví dụ như những </span><span>thứ</span><span> có thể được phát triển trên .NET platform</span><span> </span><span>)</span><span>. 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</span><span>ỗi</span><span> cái tại một thời điểm, người </span><span>sử dụng</span><span> 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<span> </span>tự nhau.</span></p>
<p class="MsoNormal" style="text-indent:0.5in;"><span>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ễ</span><span> dàng</span><span>, và cho phép Domain-Specific Development được áp dụng cho một phạm vi rộng </span><span>và cho nhiều</span><span> vấn đề. </span></p>
<p class="MsoNormal" style="text-indent:0.5in;"><span> </span></p>
<h2><a name="_Toc194416391"></a><a name="_Toc194196859"><span>Domain-Specific Development</span></a></h2>
<p class="MsoNormal" style="text-indent:0.5in;"><span>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. </span></p>
<p class="MsoNormal" style="text-indent:0.5in;"><span>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). </span></p>
<p class="MsoNormal" style="text-indent:0.5in;"><span>Các khía cạnh khác nhau của</span><span> một</span><span> 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ể </span><span>đó được</span><span> 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à </span><span>gắn</span><span> model này vào trong phần cố định của solution.</span></p>
<p class="MsoNormal"><span><!--[if gte vml 1]&amp;gt;                    &amp;lt;![endif]--><!--[if !vml]--><img src="http://bupbegiandon.files.wordpress.com/2008/06/fig1.jpg?w=450&#038;h=350" alt="" width="450" height="350" /><!--[endif]--></span><strong></strong></p>
<p class="MsoNormal"><span>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, </span><span>p</span><span>hụ 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à </span><span>đưa</span><span> ra các điểm mở r</span><span>ộng</span><span> <span lang="VI">cho phép nó được sử dụng trong nhiều solution. </span></span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal" style="text-indent:0.5in;"><strong><span>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.</span></strong><span></span></p>
<p class="MsoNormal" style="text-indent:0.5in;"><span>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ề l</span><span>oại</span><span> 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à </span><span>dễ </span><span>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</span><span>.</span></p>
<p class="MsoNormal"><span><span> </span>Để 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. </span></p>
<p class="MsoListParagraphCxSpFirst" style="margin-left:0.75in;text-indent:-0.25in;"><!--[if !supportLists]--><span style="font-family:Symbol;"><span>·<span style="font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span></span><!--[endif]--><span>Thứ nhất</span><span>, là <span style="color:blue;">hướng tiếp cận trình diễn</span>, 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.<span> </span>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. </span></p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left:0.75in;"><span> </span></p>
<p class="MsoListParagraphCxSpLast" style="margin-left:0.75in;text-indent:-0.25in;"><!--[if !supportLists]--><span style="font-family:Symbol;"><span>·<span style="font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span></span><!--[endif]--><span>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à <span style="color:blue;">hướng tiếp cận phát sinh code</span>. Đâ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.</span></p>
<p class="MsoNormal"><span><span> </span>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ẽ </span><span>diagram</span><span> 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 </span><span>hay nhiều </span><span>diagram, với mỗi diagram thể hiện một khía cạnh đặc biệt của model, </span><span>xem </span><span>Figure 1-2 </span><span>để thấy rõ hơn</span></p>
<p class="MsoNormal"><span><!--[if gte vml 1]&amp;gt;  &amp;lt;![endif]--><!--[if !vml]--><img src="http://bupbegiandon.files.wordpress.com/2008/06/fig2.jpg?w=450&#038;h=350" alt="" width="450" height="350" /><!--[endif]--></span></p>
<h2><a name="_Toc194416392"></a><a name="_Toc194196860"></a></h2>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/bupbegiandon.wordpress.com/126/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/bupbegiandon.wordpress.com/126/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bupbegiandon.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bupbegiandon.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bupbegiandon.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bupbegiandon.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bupbegiandon.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bupbegiandon.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bupbegiandon.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bupbegiandon.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bupbegiandon.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bupbegiandon.wordpress.com/126/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bupbegiandon.wordpress.com&blog=3633477&post=126&subd=bupbegiandon&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bupbegiandon.wordpress.com/2008/06/06/ch%c6%b0%c6%a1ng-1-gi%e1%bb%9bi-thi%e1%bb%87u-domain-specific-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/185123f57b7101391b9e314d1225c929?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">bupbegiandon</media:title>
		</media:content>

		<media:content url="http://bupbegiandon.files.wordpress.com/2008/06/fig1.jpg" medium="image" />

		<media:content url="http://bupbegiandon.files.wordpress.com/2008/06/fig2.jpg" medium="image" />
	</item>
	</channel>
</rss>