網易科技訊 4月7日消息,QCon全球企業開發大會今天在北京舉行,網易科技頻道作為大會的戰略合作媒體在現場直播報導。
ThoughtWorks首席科學家Martin Fowler,也是Agile領域的締造者,今天在Qcon全球企業開發大會北京站上向與會者介紹了領域特定語言的發展與應用。
以下為其演講全文。
Floyd Marinescu:所以現在我非常地榮幸向大家介紹Martin Fowler,他也是敏捷宣言締造者之一,大家有很多人都聽過他的名字,那麼Martin Fowler請您過來,所以我今天感到非常的高興。Martin Fowler很少去外面旅遊,然後參加會議什麼的,所以今天他能夠來,是我們的榮幸。
Martin Fowler:非常感謝大家讓我又回到北京了,因為我以前來過北京,來過好幾次呢,而且以前我剛來的時候,我們在北京的辦公室非常小,那麼現在在北京已經有100多個人了,所以在我們的公司,這是一個非常有趣的一個項目,所以今天我要跟大家談的主要是要關注一個在我下一本書要關注的這樣的一個領域,也就是領域特定的語言,那麼領域特定語言,實際上是一個非常常見的這樣的一個技巧,對於軟體的開發來說。那麼如果你是寫任何一種軟體系統的時候,在過去幾年當中,你肯定會碰見一些領域特定語言。你可能不一定能夠認識它們,說它們是領域的特定語言,或者說認為它們有什麼特別的,但是實際上,這一塊是非常重要的一塊,在軟體的開發世界。
那麼領域特定語言它的發展已經有很長的歷史了,大概至少,我參與到軟體開發中來就已經有這樣一種領域的特定語言,但是人們一直沒有太重視它。這樣的話我想就導致了幾個問題,尤其是我們應不應該更多地利用這個領域特定語言,比如說它可以提供給我們一些能力,這些能力我們可以更廣泛地應用,尤其是更好地來建立這樣的一種領域特定語言,這樣的話我們可以更有效地使用它。所以這兩個問題實際上都是一直在驅動著我的工作,因為我覺得這裡有很多的機會可以更多地使用領域特定語言,而且更有效率地使用它們。
但是在我進一步地討論這個問題之前,因為我能夠在這麼短的時間只能講很少的內容,但是不管怎麼樣,我首先描述一下什麼是領域特定語言。我們大多數人都知道我在介紹的時候,總是喜歡用例子,所以當我更年輕一點的時候,我花了很多的時間來看一些不好看的電影在電視上,但是有一個非常常見的,不好看的電影有一個特點,不管是東方還是西方,有一個情況,在這種情況下,會找到一些秘密的通道,這這個通道可能是在城堡裡,你按一個槓桿,或者是按一個電紐,你在一個很怪的地方就按開了,我舉一個例子,我想像一個公司,一個公司是銷售安全系統,比如說他使用領域特定語言,比如說我可能會有一個,在我的家裡,我有一個特殊的這樣的一個控制板,這樣的控制板我可能是需要有物理這樣的一個密碼,然後我們可能會以某一個順序來開,開一個燈,然後再開一個抽屜,然後這就可以使我把這個秘密的們門板打開,就是你要遵循特定的密碼程序,但是如果我給人們這樣的一個秘密的門板的一個控制杆的話,他都有自己的這樣的一個序列,如果要開這樣的一個秘密的門板的話,要有一個特定的序列,所以要知道這個事件的順序,保證這個門能夠正確地按照正確的順序來打開,否則它就不能打開。所以這個就是一個經典的例子,就是領域特定語言對我們來說有什麼樣的幫助,它可以去描述什麼是合法的一個打開門的程序。
那麼,對於這樣的一個問題,這樣一個廣泛的問題,現在已經有一種方式來考慮這樣一種表現,那麼這是一種很自然的方式,也就是用一個STUCES機器,我們可以進行模擬,我們可以用一種過渡的這樣的一種方式去模擬它,比如開始我們從初始階段開始,然後從初始階段,我們會轉向比如說活躍狀態,然後當我們進入這個活躍狀態的時候,不僅不管是開燈,或者是在抽屜打開這樣一個事件的時候,我們進入第三個階段,也就是剩下的階段,也就是門打開這樣的一個階段,所以這也是一個經典的實施的方案,也就是我們這樣的一個圖式。
那麼,有一個在這樣的一個程序裡面,它的獨特的特點是,每一次打開這個通訊門的時候,它就會回到原來這樣的一個序列,那麼這樣一種表現它並不是我提到的最典型的一個方式。它是對於這個機器的這樣一種變體。另外呢,如果我們是在一個軟體的家庭開發過程當中,我們比如說用這樣一種機器,通常我會考慮的步驟就是要建立某一種多目的的圖書館或者是框架,也就是說我會創造一系列的JAVA或者是CSHOP或者是其他的這樣的一些編程的語言,然後要使用這種語言來建立一系列的程序。那麼要想編程的話,比如說它就可以允許我們能夠把一個STED機器進行虛擬和代表,可以把它移動起來,所以我們可以把它變成一個特定的這樣的一些對象,這樣我們可以創造出一系列的程序,然後把它們交織起來,並且去描述一個常見的STED機器,所以把它們交織在一起的時候,我們可能會有一些編碼,比如說像這樣的一些編碼,然後STED機器要區別不同的部分,要求不同的部分去進行不同的操作。另外,在這個系統的不同STED之間會有各種各樣的活動。
你在屏幕上所看到的這樣的一些編碼,它實際上你在做一個STED機器模式的時候是足夠的。同時,如果大家對於這個模型的細節很感興趣,你可以上我的網,就是Martin Fowler.com,你可以看到發展及其應用,你可以看到這一塊,這裡面有很多的內容是我下一本書裡面所包括的內容,所以如果今天有一些細節大家沒有聽明白,或者是怎麼的,大家可以去上網去看我的網站。
那麼,這裡的編碼實際上是一個非常好,而且非常好也非常緊湊的編碼,它可以幫我去描述,為新的客戶去描述新的這樣的一些機器,但是它確實也有幾個缺陷,第一個缺陷就是表現在,或者我覺得也是它最大的缺陷。那也就是說,實際上它是一個STED機器,所以它在讀配置語言的時候,不是特別明顯,所以如果你要想解決這個問題,你可能是需要去了解它的一些模式來看一下是什麼問題,但是其實在這裡面要找出究竟在出現什麼情況是非常困難的。所以,在把某一個編碼它的功能是怎麼樣,去辨別的話,總是一個非常危險的信號,因為你必須要有你的程序,立刻告訴你,它在執行什麼樣的操作,越精確你就越能夠來保證這個系統的穩定運行。
第二個方面就是關於這個編碼,就是在技術方面的問題,但是,這是對於一些應用來講是非常重要的,也就是說,這就是JAVA的編碼,我們可以利用JAVA的編碼,以便來控制這些機器,也就是說為了特定的客戶來進行控制,在有些情況下,這些程序的編碼,它們還是一個過程,那麼我們就需要來使它,讓它能夠來改變我們的文件,然後重新開啟我們的系統,然後給我們這個系統一個合適的行為方式,那麼這也是比較普遍的方法,特別是在JAVA的這種系統裡面。那麼這也是比較普遍的,在通常我們可以看到這樣的情況,也就是說我們把這個配置,把這個STVEP機器進行改變,進行編程,你可以比較熟悉這些配置。在這種情況下,我們在各種情況、各個過程之下來採用。
我們可以看到它這種能力能夠來描述一下我們的這個系統。同時,也能給我們一個,在STEP啟動的靈活性。在這裡我們可以看到更多的這種STED機器的好處。但是我們認為還又可以改進之處,比如說在可讀性方面還帶來一定的負擔,如果我們想要一種XML的描述,我們還要加很多的東西,使得更難以去追蹤看一下發生什麼情況,這是一個傳統的方法,利用那種特定語言來做事情的。
那麼我們再看一個例子,對這種領域特定語言,對於STED模式是一種什麼樣的情況,那它可以去提供同樣的信息,就像我剛才在幻燈片裡面顯示的一樣,我們可以另一種句法,這種句法是特定形式的,針對某一種形式的,大家知道這有兩個後果,第一個就是我們在談論這個機器的時候,它的機器可以說更多地被顯示出來了,第二個結果更加地緊湊,我們需要更多的字節來描述發生的事情,這個緊湊型也是一個比較明顯的東西,它並不是我們所關注的要點,關注的要點是清除性,但是你越緊湊,它就越清潔、越整潔、越明白。
在這裡我們可以看到XML它有很少的字節,它並不會告訴你特定的問題,但是他會有足夠的供XML使用,那麼對這種領域特定語言的目的,就是說也可以來描述它的這個結構,當我在寫這本書的時候,我也想到了一些特定的這種機器來處理這個XML,以及領域特定語言,我們有一定的工具,還有一些相應的這個領域特定語言的經驗,我們可以把它們放在一起,這樣的話能夠來很快地加以應用。
這種語言可以說有更多的例子,來針對這個領域特定語言,那麼還有一個不同的版本,就是說對於這種領域特定語言不同版本,如果我們來跟剛才的那個比較的話,我們就注意到這裡面有一些區別的,但是我們還仍然有一個比較緊湊的編碼,那麼還有這種,它也可以很清楚,跟剛才那個案例一樣,但是問題區別在於它有很多的,我對這個事件的描述有一些是基於編碼的,我看到一些逗號和引號,我們有時候要去避免這些東西,但是總體來講它的這個結構仍然是很不錯的。但是對這種領域特定語言還是有所不同的,有特殊的情況,我們來看這裡的情況,也就是說在這個Ruby的裡面有經過論證的語言,看起來它像特定語言,但是實際上它是Ruby的過程,它結構很清楚,過程也很好,但是Ruby有一些切入性的句法。在使用Ruby跟領域特定語言之間就是有一個例子來看一下這個特定語言裡面的它的這種形式,還有一種是內部和外部的這個領域特定語言,那麼外部的這個特定語言特徵它是一種比較純粹的句法,是大家所開發出來的,然後你可以利用這些傳統的計算機的這種方法來做一個句法,那麼內部的領域特定語言就是,它實際上是一個比較通常的方法來使用這種,以便能夠讓這個特定語言能夠進入到一個特定領域去,它和這種普通的這個特定語言是不一樣的,利用這種內部的這個DSL的話,你在這個主機上採用特定語言,你的好處就是你不用去有傳統的那種東西,在這種編程的環境之中,那麼也就是說你自己可以去編程,使得它發揮這種特定的功能。
在計算機世界裡面,這一種計算機特定語言也是起了很大的作用,可以說在我們業界是廣泛使用的,在很多的也使用了很多小的配件,你可以看到在這個裡面是一個很好的例子,這種內部的方法,它也有一個很長的歷史,特別是LUNX的編程也使用得很多。
剛才我也談到了我們如何來處理這些問題,特別是利用這種XML的問題,XML可以很有效地作為一種外部的程序,那麼,我們必須要遵守一些已有的句法的系統,那麼XML可以直接是可執行的這些程序,所以它的本質上還是一種外部的特定語言,XML的背景我使用這種術語,但是基本的概念就是類似的,它能夠使得我們能夠去除我們客戶背景下的一些問題。
我個人認為,如果我們能夠使用這種領域特定語言,那這樣的話你就比使用XML好得多,因為它能在這種特定的背景下去閱讀,實際上也是這樣的。
我們內部的特定的語言在Ruby的情況下,導致另外的一個問題,當我們去看一下剛才的例子的時候,我們可以看到它的一些特定語言的問題,這個Ruby的編碼我給大家顯示的它實際上使用了Ruby的一些方法,比如說一些特定的Ruby的編碼,它有什麼區別呢?這些跟JAVA的例子有什麼區別呢?特別是在配製這個系統裡面有什麼區別嗎?我想這裡面有一些重要的區別,一開始的那個配製編碼它並不像這個領域特定語言那樣會起作用,更好的作用,STED機器實際上會給你帶來什麼問題,這裡面存在的編碼,這個結構的話,它對它的功能來講是明顯的,另外一個明顯的區別就是Ruby它跟JAVA也是不同的,這個時候,它也導致了一個問題,也就是我內部利用JAVA的程序編碼語言能不能使用?這也是一個例子,對於這種DSL來講,還有我們可以利用JAVA,但是有時候它是一種領域特定語言的形式,我們可以看到JAVA的編碼,它是一個一種奇快的方式,它是一種很快的編碼,在有的情況下,如果你用了它的編碼,你可能會遇到一個很好的反饋,但是它並不是說按照我們通常的這種常規的JAVA的編程的程序,那麼現在STED這種機器的本質被顯示出來了,可以比Ruby這種例子更加緊湊,這種STED機器,它對於機器之間進行交流的時候,它會有什麼樣的情況,還有一個區別也是比較有價值的,那麼我們看到一個Commannd WQuery的API,還有Fluent API,我們認為哪種API更有用,更利於閱讀,這種API比別的API更加有用,那麼在JAVA或者是其它的編程程序裡面,我們有各種不同的目標,我們要識別出各種各樣的方法。它們本身就是說是可以讓人很好地理解的,我們可以看一下這種STED機器的情況,也就是說它的內部的含義和外部的含義都是不言自明的。那麼每一種方法它單獨地來講,它一看起來好像沒有什麼意義,你要是單獨看的話它好像沒有什麼意義,但是你把各種方法結合在一起,你可以把它結合成一種句子這樣的話,整體看起來比較有意思。
我們在這裡看到可以有兩種這種領域特定語言,作為一種方法來講,在這種轉換裡面,它有時候會很有意義。所以這種Fluent API它是安全不同的方法來運轉的,許多的編程都是利用Commmand query這種API,但是特定的情況下,我們要考慮這種特定語言特別是一種內部的特定語言,這樣就會導致Fluent API的產生。實際上的話有兩種不同的領域的特定語言,特別是在這種例子裡面,一種是用的客戶的句法,另外有一些變化在它的內部裡面,比JAVA有一些變化,在這裡能夠給大家一些感覺,就是說關於什麼是領域特定語言的感覺,那麼在一種特定的領域裡面,我們可以更好地去看一下這種特定語言的概念,我的書也描述了這種特定語言,那麼也給了一個義,那麼有很多的因素的話需要我去指出來。
第一個就是基於語言的本質,那麼這也是比較明顯的,特別是關於這種Fluent API裡面更可以看到的,這種Commmand query領域語言,這種編碼的話,它的程序編碼在跟這個Fluent是不樣的,即使我在這種正常的這種程序的編碼裡面在這裡我提到這種語言模式,這種特應該給大家一種特定的語言進行編程的這是一個比較模糊的定義,但是我這一點還是比較重要的,同時它也是一種語言,我們可以利用就是有限的表達性,這種特定語言的話,它並不能夠很好地描述比較小的系統,用這種外部的領域特定語言的話,那麼它也並不是完整的,它也沒有一個系統來做出我們的這種EXPRESSIVENESS,我們用了很多的這種特定語言,它主要是聚焦特定的編碼的程序。那麼作為這個領域特定語言的一種有限表達力的這種情況的話,無論你是STED機器,還是一些正規的表達,它也會執行一些特定的任務。
剛才給大家看了一些例子,我目前沒有詳細地講述,但是我認為的話,如果我們有兩個元素在這裡面,這個裡面有兩個元素是非常重要的,剛才我也提到,這種STED事件內部的據庫,我們可以對這種領域特定語言去建立一個庫,我們在這裡可以看到,我們有一個基本的STED事件的一種模塊,來描述我們所發生的事情,另外,我們還有一種利於特定語言的來建立這種模型,顯然這種領域特定語言的作用就是要進行給好地表我們的領域的有益性。這個腳本可能會使用一些傳統的方式,那麼它也可能使用一個內部的DSL,那麼在這種情況下,它可能是有一些間接的這樣的一些分割,但是它仍然是用這種DSL,我們有一種特定的這種模型,大家就可以執行,大家知道在STED的機器當中,我們可以很容易地來提供必需足夠的執行的依據。大家可以看我的網站上會有整個的這樣的一個例子。但是,在直接利用這樣的一個STED模型它並不是我唯一能夠執行這樣的方式,另外一種方式實際上是使用另外一種程序,這樣的創造編碼其實是非常流行的,尤其是對領域特定語言非常感興趣的人們,對於很多人來說,這種編碼的創造,其實是一種非常常見的領域特定語言的發展方式,但是對於我來是說是一個選擇,有的時候你可以做這種選擇,有的時候必須要做這種創造,但是有的時候並不是必須的,有一些時候只會使系統變得更加複雜,所以對我來說這個編碼的創造,其實在使用特定語言的時候,只是可供選擇的,有的時候很重要,但是並不是永遠都需要。
但是,我覺得非常重要的其實是這樣的一個觀念,就是對於語意模型,要有一個非常明確的概念,那麼這個通常人們沒有這麼做,而且至少沒有說像我所希望的那樣做,很多人他們喜歡編碼的創造,他們會直接從DSL的腳本來創造編碼,而沒有在中間建立一個語意的模型,而我認為這並不是最好的方式,一個語意的模型可以把一個問題的這些語言,語意的問題和它的那個實際的腳本分開來,這個是非常有用的。同時,它還允許你去測試,獨立地去測試這個語意是非常有用的,尤其像我一樣,因為我們經常會使用這個系統當中的測試。
我到目前為止,所描述的實際上是一些老式的傳統的這樣一些領域特定語言。那麼它們已經有了幾十年的這樣的一個應有的歷史,在不同的環境當中,人們都開始使用,但是領域特定語言,它不僅僅是關於這些老舊的工具也不是在書裡面我只關注老的,雖然我喜歡老的,但是我也沒有完全忽視新的,因為我們確實在領域特定語言裡面有一個新的東西,這個新的東西就要就是叫做Language WORKBENCHES,這個在幾個不同的地區同時湧現,這個待會兒我可以給大家介紹,但是它的觀念是提供一個特殊的軟體工具,可以使得人們更加容易修改特定領域語言,同時,可以提供特定的這樣的編程環境,就是你在DSL腳本上所編寫的語言的更好的改編的環境,所以它不僅僅是把你的STED機器進行一種編程,同時它還有一個文本的編輯器的作用,因為人們現在經常會在一些比較複雜的軟體的開發環境當中,他們希望會向什麼方面發展,會成為什麼樣的模式。所以你需要一個模型,它不僅能夠描述之前的這樣的一些投入,而且能描述這個機器所編輯的情況,所以如果要實現這一點的話,你可能就需要一些間接的方式,而不是直接的方式,那麼我們這裡的Language Workbenches就是為了你提供這樣一種工具,提供領域特定語言,同時提供文本編輯器。
在微軟和其它地方都得到了接受,這種觀念很早以前就產生過了,但是最近他比較出名的是叫MPS所創造出來的系統,這個系統之所以有意思,是因為它是以開發一些應用型的軟體為出名的。它就是要使得這些軟體,使得人們更容易獲得,其他還有一些工具,一些成熟的工具。所有的這些關注實際上都是在提供一個更好的編程的環境。那麼有很多的這些工具,它們是怎麼做的呢?就是它們來改變我們去看待,我們去編輯代碼的這樣一種方式和態度,那麼有一個我把它稱為叫做原編輯系統,那麼就是我們可能是有一個文本,然後對這個文本進行一些編輯,然後把這些編輯成一個可以執行的系統,那麼這個文本本身,它是一個對代碼進行編輯和存儲的這樣一個機制,那麼人們怎麼做?人們做,他們是採取一些不同的編輯的方式,我們把它叫做Projectional Editing,這裡有一個編輯庫,這裡會描述你所在進行編輯的這樣的一個系統,然後從你的圖形庫裡面進行一個選擇,進行匹配,也就是說要從你的語言庫裡面來提取相類似的模型,通過工具來選擇,那麼我們這裡的模型庫實際上是跟代碼的創造相關的。但是現在它是被作為一種大多數的軟體開發項目當中的一個基本的工具,因為它有很多的實用的這樣的一些好處,比如說我們會有一些文本模式的控制,有更複雜的文本編輯系,但是有很多的Lanauge開發人員都在使用它,因為它可以使得它們更容易來描繪,來定義這樣的一種智能的,領域特定語言的開發的環境,所以現在有好幾種語言。
另外一個重要的,允許你可以畫出STED機器的模型圖,然後通過模型庫的對比,來選擇最佳的模式,那麼這裡其實也是有一個文本的輸入,但是它是有特殊的文本編輯器對它進行編輯。那麼,另外,它們可能是在一種人們比較受歡迎的模式,但是Projectional這個系統當中,你沒有理由同時使用文本和圖形,但是再一個語言系統當中你就必須要使用文本。
它其實是DSL的第三個支柱,那麼前面我提到了內部的DSL和外部的DSL,剛才提到的這一點是DSL的第三個支柱,那麼從外部的DSL已經存在幾十年了,而且也是大家理解的比較明確的,而我們的這個是比較新的,我提到的這個在幻燈片上列出來的基本上大多數大家都還不熟悉,有很多都還是處在早期的開發的階段。但是我想它們有非常大的潛力。而且他們所持的觀點,他們以後可以改變我們根本性的對編程軟體的想法,不知道這個能不能發生,但是我認為這個工具是非常有趣的,而且是未來非常有趣的發展方向。但是對我們現代來說,我們需要關注的是,如果說我們使用DSL,那麼內部的和外部的DSL比較簡單,已經有幾十年的時間,但是如果我們需要考慮一下,為什麼我們希望使用一個領域特定語言呢?使用那些基本的內部和外部的領域特定語言也就是DSL,為什麼要使用它們呢?
第一個原因你可能會比較感興趣,就是我要使用DSL,也就是最容易理解的,它實際上就是關於說一個非常經典的案例,這裡我們看到一個公式,這是一種DSL的表達,也是最古老的表達,也是很多編程人員常用的,大家可以看到,這是一個非常常見的符合美國的電話號碼,是四位數,如果大家要去看一下它能不能夠符合你的一個文本的風格,那麼這裡就需要去了解怎麼樣去描繪它,但是一旦你了解了它常見的表達,你就會比較容易去理解它。那麼如果你會比較熟悉,比較習慣於閱讀它的這樣一種習慣的表達的話,那麼你就會明白你在尋找什麼,那麼你需要寫的另外一種可供選擇的編碼,你就需要跟它進行一個對比和匹配。所以,使用DSL一個巨大的優勢就是它可以改善你的效率,因為它可以把你的這些工作變得更加清晰,也變得更加緊湊,另外DSL對於我們其它方面也有很多的好處,比如說它可以把你更明確的和緊湊的簡潔地來表達你要做的程序。
但是,DSL最有趣的好處還是在於我們需要不再僅僅地將我們的編程人員考慮為一個消費者、使用者,因為這裡是一個常間的特定領域語言,這是CSS代碼,CSS比較有趣的現象有很多人來做CSS編碼,他們不認為自己是程式語言,他們認為自己是網絡設計師,因為儘管他們使用了一些非常複雜的編程人員,他們實際上已經是一個領域特定語言的這樣的一個描述了。有很多的這樣的一些,他們所設計的CSS網頁,他們本來就是網絡設計師,他們使用JAVA或者是CSHOP,或者是其他的簡單的像Ruby這樣的一些網頁設計人員,但是CSS非常有用,他們可以非常明確地表達他們的網絡是什麼樣的,同時他們可以看到在他們的網頁上發生了什麼情況,這個會導致,我覺得CSS最有趣的方面,它可以提供給商業人員或者是其他的一些人員一些溝通的方式。
實際上你在聽很多人在討論DSL的時候,你可以聽到人們談論到這一點,但是你可以知道,也就是說在這個論點當中,可能有一個重大的缺陷,那麼有很多人,他們可能從DSL來跟領域專家進行溝通的時候,獲得了很多的好處的時候,那麼他們就會夢想說他們可以寫出非常重要的程序的一部分,CSS的網絡設計師可能能做到這一點,但是描述一個計算機的系統,以特定的精確度來說永遠都是一個困難,所以很多年來,我們都有各種各樣的項目來創造一種很好的環境,就是說商業商務人士就能使用,不需要我們的編程。但是它之前設計出來是允許商務人士能夠不用編程人員來自己進行一些簡單的操作。
這樣的話,我們就必須,當人們說一個DSL可以允許商務人士來不用編程人員自己來寫程序,那麼這個就是很值得懷疑的。實際上你可以從DSL當中得到很多的好處,也就是像商務人士能夠讀DSL就好了,儘管他不能寫DSL,但是他可以讀,他可以理解他們現在在進行什麼樣的操作,他們可以找出其中的錯誤,他們可以加入他們覺得一些合適的改動。那麼這裡最關鍵的一個問題就是說它改善了我們溝通的帶寬,也就是在商務人士和編程人員之間增加了溝通的帶寬,所以這現在也是我們軟體開發的瓶頸,也就是這個溝通的渠道,所以如果我們能夠改善這樣的溝通的渠道的話,那麼它肯定對於我們開發系統會有好處。
這樣的話我認為這也是一個有趣的方法,如果你把DSL作為一個跟商務人士溝通也是一個很有趣的方式,商務人士不僅可以閱讀發生什麼,而且他們可以知道系統所容納的限度是什麼樣的。那麼,如果能有這樣的一種語言,能夠讓那些領域專家理解的語言就非常重要,但是這一點非常難以達到,因為我們現在試圖要做的就是你是從這樣的一個增加的溝通渠道的方面來考慮的話,那麼你會獲得更好的效果。那麼基本上我已經說得差不多了,如果你想知道更多的信息的話,你可以上我的網站去看,我的網站上有很多的細節的信息,那麼這裡我只是給大家一個起點,尤其是說它是給大家介紹一下我現在這本新書的進展,現在我的書有很多部分已經公布在網上,這個書裡面還有很多地方沒有連貫起來,因為這本書還在寫的過程中,所以我今天所談到的很多的資料都會在我的書的前幾章當中有更多的更詳細的這樣的一個介紹,我希望它能夠對大家有所益處,我現在還可以接受大家的幾個提問,如果大家有什麼問題,這裡有提問的時間嗎?如果沒有提問時間就先到這兒。
非常感謝大家聽我的演講,我也希望這個演講可以給大家一些關於DSL它究竟是什麼,還有它的作用是在你的開發過程當中有什麼作用,謝謝。
主持人:我們再次用熱烈的掌聲感謝Martin Fowler先生,謝謝他的精彩演講,下面我們有十分鐘的茶歇,然後大家十點半回到會場,在外面我們有一個公布欄,因為今天晚上我們在大概是晚上8:00-9:00會有一個自由的討論,那個會場也是比較,就是為了更有效地組織討論,我們就採用了一個方法,叫技術臭味相投會,大家願意去發起一個小的討論,你就可以在外面的海報上,在這樣的一個黃紙上面寫上你要討論的題目,以及你的姓名,作為發起人,晚上我們會根據大家寫的這些題目的情況,我們會明確地標註對這個題目感興趣的人請到那個區域去參加討論,這樣的話,大家可以在我們這個會場茫茫人海裡找到跟你「臭味相投」的夥伴。好,請大家享受你們的休息吧,謝謝!