模型在軟件開發(fā)中的角色
當今信息系統(tǒng)的開發(fā)越來越復雜,而且所涉及到的領域也越來越廣,開發(fā)者必須掌握許多不同的技術,包括流行的面向對象技術,XML,腳本語言,接口定義語言,過程定義語言,數(shù)據(jù)庫定義和查詢等等。要把來自于問題領域的需求轉換成解決方案需要對許多架構和協(xié)議的深刻理解。再者,最終用戶常常期望結果是高運行效率的,易用的,易擴展的,而且對于不可知且不可靠的網絡連接是安全的,這可是件苦差事。
在軟件開發(fā)之外的一些領域,例如電子產品(電視機,HiFi音響,照相機)等等,我們可以看到低成本和高可靠性的情況。在過去的幾十年里,制造行業(yè)一直采用這樣的流程:通過一連串復雜的步驟來制造一臺電視機或汽車,其中有很多步驟是完全自動化的。
我們會喜歡使用相同的原理來構筑軟件,不同的是我們沒有開發(fā)出能夠允許有效分離軟件中關注點的軟件說明語言。盡管我們使用不同的程序開發(fā)語言來書寫應用邏輯,來完成不同的開發(fā)任務。例如:使用XML在應用組件中傳遞數(shù)據(jù),使用SQL存取數(shù)據(jù),使用WSDL來說明面向Web應用的組件的接口等等,但是它們中沒有一個直接針對最終用戶所面對的業(yè)務問題。
將要介紹的軟件構筑技術是domain-specific languages(領域定義語言,簡稱DSL)的開發(fā)。DSL被設計為直接面向它所要解決的問題領域。在某種程度上,它能夠代替編碼,數(shù)據(jù)交換,配置等工作,我們常把這類語言稱為建模語言。我們使用這些語言來針對問題領域進行建模。
模型里的每個元素都映射到現(xiàn)實領域中的一個概念,很多年以來,模型對于定義IT系統(tǒng)如何來保存數(shù)據(jù)一直是很重要的,現(xiàn)在,模型的應用更廣泛,例如對業(yè)務過程建模,服務的部署,數(shù)據(jù)中心等等。模型受是因為它能夠很好地表述問題從而避免陷入技術細節(jié)中。當技術變得越來越復雜的時候,模型是提高生產力的必須手段。模型的另一個好處是可以讓程序員和問題領域的專家使用同樣的表述方法,這有助于團隊成員間的溝通。我們也可以把使用模型看作彌合技術和業(yè)務之間縫隙的方法。 mda.com
在過去的幾年里,新的建模方法開始合并,特別是在MDA的旗幟和能夠提高軟件開發(fā)生產力及軟件可移植性的承諾下,OMG對UML和一些相關技術進行了大力的推廣。但是我們必須看到80年代的CASE工具的結果,顯然,CASE已經無法兌現(xiàn)當初的諾言,對于MDA我們仍然十分懷疑,除非能夠證明它對于我們所面對的問題找到了新的道路,不再重蹈CASE工具的覆轍。在我看來只有模型,模式,框架等技術結合在一起才能夠避免象CASE工具那樣的失敗。
Domain-Specific Languages
如果我們想通過運用模型來使領域專家能更容易地解決問題,那么模型就必須能夠清晰地描述問題領域。對于建模語言,就是指用來針對問題領域建模的標記和關系的定義。典型的,但不是必須的,建模語言可以是一組圖釋,一組由線條連接起來的節(jié)點,也可以是流程圖或者實體-關系圖。
模型通常被標記和文本元素所修飾,開發(fā)者需要細心地審視,理解掩蓋在這些修飾下的模型真正要表達的信息。所以要能夠進行建模就必須明白每個元素相關細節(jié)。這意味著一旦成為具有專門的建模技能的人才就會帶來豐厚的回報。
有些人可能會認為正確的觀點是應該定義一個通用的建模語言,使用它來對所有的問題領域建模,同時要教會那些領域專家們學會使用這個通用建模語言。從UML得到的經驗來看,這樣作并不成功,后面我們將會討論UML。
現(xiàn)在,我們把那些被設計成用來對特定問題領域建模的建模語言稱作domain-specific languages(領域建模語言)。領域建模語言可以針對很多問題領域創(chuàng)建,例如:通訊,銀行業(yè)務,空間勘測等等。
無論如何,設計和使用領域建模語言只是模型被用作輔助軟件開發(fā)的很小一部分。模型可以被分析和驗證,轉換,通過很多步驟,被部署并執(zhí)行軟件。這個過程包括開發(fā),分析,驗證模型,在很多不同領域中,通過工具將模型進行轉換,直到部署系統(tǒng)完成。
在軟件系統(tǒng)的構筑中,模型的一個對應物是框架,框架是適用于整個領域的代碼實現(xiàn)框架,并且給多個系統(tǒng)間在相同領域的不同元素提供了擴展點。有很多框架的例子:從GUI到ERP的基礎結構和算法。在所有的情況下,模型的角色是使用框架,給特定的應用定義擴展點。在這個層面上,我們可以認為建模語言是定義擴展點,使其契合到框架上,來適應用戶對問題的理解的一種方法。
另一個重要的對應物是模式,一個模式本質上是一個有很多小孔的模型,和如何將這些小孔用其他模型來填充的規(guī)則。有一種高效使用模式的方法:使用一個由許多小的模型組成的大的模型,或一個由其他類型的模型組裝起來的模型。
在軟件開發(fā)過程中運用模型,模式,框架,代碼的至關重要的一點就是最終的結果必須是“敏捷“的。在代碼和模型間必須不存在任何不可逆性和不連續(xù)性,在整個開發(fā)過程中必須能夠對可見的各種因素作出快速的反映,變化后重新產生最終結果。CASE的錯誤在于沒有針對問題領域使用框架,而是使用了龐大的,不可逆的代碼生成過程,這樣使得開發(fā)者無法修改生成的代碼,從而使整個方法完全失效。只有將模型,模式,框架結合在一起,并使它們無縫的整合進一個敏捷的開發(fā)過程中,才可以避免出現(xiàn)CASE方法那樣的缺陷。
轉帖于:軟件水平考試_考試吧