軟件最后這一篇的內(nèi)容是一些補充知識,大家可以放輕松來看咯,內(nèi)容也不多,主要還是以擴展知識面為主吧。我們將要學習到的是日常開發(fā)中程序員們比較熟悉的一些系統(tǒng)的經(jīng)典架構(gòu),另外就是軟件開發(fā)環(huán)境和集成技術(shù)相關(guān)的內(nèi)容,都只是非常簡單地介紹一下而已,全文都不是特別重點哈(只有一個知識點需要了解清楚)。
這部分介紹的經(jīng)典的系統(tǒng)架構(gòu)算是對 軟件系統(tǒng)架構(gòu) 部分的一個補充,是我們在實際的業(yè)務(wù)開發(fā)中確實會接觸到并且會了解到的知識。除了我們下面要介紹的之外,之前我們講過的 面向?qū)ο笤O(shè)計 和 面向服務(wù)方法 也都屬于這些經(jīng)典的系統(tǒng)架構(gòu)。
這種模式的體系結(jié)構(gòu)是面向數(shù)據(jù)流的軟件體系結(jié)構(gòu)。它最典型的應(yīng)用是在編譯系統(tǒng)。設(shè)計人員將整個系統(tǒng)的輸入輸出行為理解為單個過濾器行為的疊加與組合;任何兩個過濾器,只要它們之間傳送的數(shù)據(jù)遵守共同的規(guī)約就可以相連接;新舊過濾器可以方便地替換;支持并發(fā)地執(zhí)行每個過濾器。
說了這么多,其實 Linux 命令行中的那個 | 操作符就是一個管道操作符。而過濾器的定義可能會繞一些:如果一個LInux命令是從標準輸入接收它的輸入數(shù)據(jù),并在標準輸出上產(chǎn)生他的輸出,這個命令就被稱為過濾器。
拿一個最常用的命令來舉例。
ps -ef | grep php
第一個命令列出所有的進程,然后它的結(jié)果通過管道給第二個命令使用,第二個命令在第一個命令結(jié)果的基礎(chǔ)上過濾出包含 php 名稱的進程。這一套操作就是一個過濾器操作。當然,除了 grep 之外,還有我們非常熟悉的 awk、cut、sed 等等,都是過濾器操作函數(shù)。
Laravel 中的 Pipeline 、中間件以及設(shè)計模式中的責任鏈模式都有管道過濾器的影子。
事件驅(qū)動模式的基本原理是構(gòu)件并不直接調(diào)用過程,而是觸發(fā)一個或多個事件。系統(tǒng)中的其他構(gòu)件可以注冊相關(guān)的事件,觸發(fā)一個事件時,系統(tǒng)會自動調(diào)用注冊了該事件的構(gòu)件過程,即觸發(fā)事件會導(dǎo)致另一構(gòu)件中過程的調(diào)用。
事件驅(qū)動模式的主要特點是事件的觸發(fā)者并不知道哪些構(gòu)件會受到事件的影響,且不能假定構(gòu)件的處理順序,甚至不知道會調(diào)用哪些過程,使用事件驅(qū)動模式的典型系統(tǒng)包括各種圖形界面工具。比如說我們在前端頁面上的 onclick 這個函數(shù)不僅在 HTML ,在 Android、IOS、.NET 等的開發(fā)中都可以看到類似的事件函數(shù)。
一個不太形象的比喻就是我們?nèi)グ措娞?,這就是一個事件,上下按鈕讓轎廂執(zhí)行上行還是下行的操作。在 PHP 的 Laravel 框架中,同樣有事件相關(guān)的組件。
分層模式其實就是為了解決問題太大太復(fù)雜而出現(xiàn)的一種模式,我們之前已經(jīng)學習過的而且也是最經(jīng)典的 OSI 和 TCP/IP 都是分層模式的典型應(yīng)用。在軟件領(lǐng)域,非常出名的 MVC 就是最典型的一種分層架構(gòu)設(shè)計模式。關(guān)于 MVC 的具體內(nèi)容如果你不是程序員而且有興趣的話,可以自己了解一下,這個不在我們學習的范圍中。除了 MVC 之外,還有 .NET 的三層模式,Android 中比較流行的 MVP 以及現(xiàn)在前端工程化中非常著名的 MVVM ,這些,都是分層模式的架構(gòu)??梢哉f,分層模式其實是離我們最近的一種模式,只要你在做軟件開發(fā),那么你一定會接觸到它。
知識庫模式采用兩種不同的構(gòu)件:中央數(shù)據(jù)結(jié)構(gòu)構(gòu)件說明當前狀態(tài),獨立構(gòu)件在中央數(shù)據(jù)存儲上執(zhí)行,中央數(shù)據(jù)構(gòu)件與獨立的外部構(gòu)件間的相互作用是系統(tǒng)中的主要問題。
知識庫模式有兩種不同的控制策略:如果輸入流觸發(fā)進程執(zhí)行的選擇,則為基于傳統(tǒng)數(shù)據(jù)庫型的知識庫模式;如果中央數(shù)據(jù)結(jié)構(gòu)的當前狀態(tài)觸發(fā)進程執(zhí)行的選擇,則為基于黑板系統(tǒng)的知識庫模式。
黑板系統(tǒng)是一種問題求解模型,是組織推理的步驟、控制狀態(tài)數(shù)據(jù)和問題求解與領(lǐng)域知識的概念框架,它將問題的解組織成一個或多個應(yīng)用相關(guān)的分級結(jié)構(gòu)。
這個嘛,大家了解了解就好,我也不是太清楚這個知識庫模式具體是一個什么樣的東東,有興趣的小伙伴可以自己查一下這個黑板模式。
最后就是我們最重要的客戶端/服務(wù)器模式。這個東西應(yīng)該是現(xiàn)在所有做開發(fā)的同學的入門基礎(chǔ)課。
在最早的時候,我們使用電腦,都需要安裝軟件,比如說 Office、QQ 還有你們最喜歡玩的各種游戲。這個需要安裝一個軟件才能使用的,并且需要網(wǎng)絡(luò)的軟件,被稱為 Client-Server 客戶機/服務(wù)器 模式,簡稱 C/S 模式。
而另外一種,比如我們現(xiàn)在使用的后臺管理系統(tǒng)、OA 系統(tǒng)、CRM 系統(tǒng),網(wǎng)頁版的 QQ 、微信,頁游等,只需要一個瀏覽器就可以運行的,主要的程序都在服務(wù)器端處理的軟件架構(gòu)模式被稱為 Brower-Server 也就是 瀏覽器/服務(wù)器 模式,簡稱 B/S 模式。
其實最簡單的理解就是我們使用某個應(yīng)用是否需要安裝一個軟件,如果需要安裝軟件,那么這個基本就是 C/S 模式,而如果我們只需要一個瀏覽器就可以運行的軟件,那就是 B/S 模式。
從這里可以看出,我們的電腦其實在早期是 C/S 一統(tǒng)天下的,而在最近幾年,B/S 越來越成為主流。當然,C/S 還是有其應(yīng)用場景的,比如大型游戲、復(fù)雜的 PhotoShop 之類的應(yīng)用,需要充分利用本身電腦的硬件資源的應(yīng)用肯定都還是 C/S 架構(gòu)為主的。有好奇的小伙伴要問了,那么我們現(xiàn)在的手機 App 是不是都是 C/S 模式的呢?當然,但是,小程序、小游戲這些東西,就是期望能讓微信、支付寶、頭條、抖音之類的這些平臺變成一個瀏覽器一樣的存在,讓程序能在這些 App 的框架下運行,其實它們就都是 B/S 形式的應(yīng)用。
說了這么多,更重要的是我們要能分清楚 B/S 和 C/S 的一些區(qū)別特點,這才是最重要的。
B/S 架構(gòu):維護難(需要重新安裝軟件)、安全性差(有反向編譯的可能性)、硬件利用率高
C/S 架構(gòu):維護方便(所有程序都在服務(wù)器)、可擴展性強(功能隨時由程序員在服務(wù)器添加)、客戶端要求低(一個瀏覽器)、安全(主要指沒有客戶端的問題)、硬件利用率低(必須在瀏覽器或 App 的殼下運行)
這個是 B/S 和 C/S 模式是我們今天這一課的唯一一個重點知識點。
軟件復(fù)用是指利用已有軟件的各種有關(guān)知識構(gòu)造新的軟件,以縮減軟件開發(fā)和維護的費用。軟件復(fù)用是提高軟件生產(chǎn)力和質(zhì)量的一種重要技術(shù)。
在開發(fā)領(lǐng)域有一個很出名的 DRY 原則,意思是 Don't repeat your self。也就是不要做重復(fù)的事情,而代碼在維護中最怕的也是同樣一段代碼,如果要修改需要在很多地方重復(fù)去修改。這樣做不僅容易效率低下,而且也容易產(chǎn)生各種各樣的 Bug 。
設(shè)計模式、組件化開發(fā)、工具類或工具函數(shù)都是為了解決這個復(fù)用的問題。在這其中,包括代碼的復(fù)用、設(shè)計的復(fù)用、分析的復(fù)用、測試信息的復(fù)用都是我們需要關(guān)注的內(nèi)容。
軟件開發(fā)環(huán)境也是大家了解一下就好。我這里也是簡單地介紹一下。
開發(fā)工具(IDE):Idea、VSCode、Sublime、Vim 這些想必不用多介紹了,做開發(fā)的都懂,其實就是程序員用得編輯器,就像寫文檔要用 Word 或者 WPS 一樣。
代碼管理:Git 已經(jīng)一統(tǒng)天下了,這個無異議吧?即使 SVN 也已經(jīng)很小眾了。這個東西可以想像成 Word 中的歷史文檔功能,可以讓我們寫錯了代碼之后可以快速的恢復(fù),同時也是一個備份。
測試工具:LoadRunner、jmeter 這兩個是壓力、負載測試工具,Selenium、Appium 這兩個是網(wǎng)頁和App的自動化測試工具,JUnit、PHPUnit 這兩個分別是 Java 和 PHP 的單元測試工具,其它語言還有自己對應(yīng)的類似工具。
建模設(shè)計:Visio、Rose 還有網(wǎng)頁版的(B/S)ProcessOn,能畫流程圖,能畫 UML 圖之類的工具也非常多。
在這里我們主要了解一下 企業(yè)應(yīng)用集成(Enterprise Application Integration,EAI)技術(shù)。主要是用來消除企業(yè)中的信息孤島,將多個企業(yè)系統(tǒng)連接起來,實現(xiàn)無縫集成。
EAI 一般連接的系統(tǒng)包括但不限于 電子商務(wù)系統(tǒng)、ERP、CRM、SCM、OA、數(shù)據(jù)庫系統(tǒng)、數(shù)據(jù)倉庫 等。EAI 可以包括多個層次和方面:
表示集成,也稱界面集成。比較原始淺顯但也是最常見的集成方式,將用戶界面作為公共的集成點,把各個系統(tǒng)集成到一個統(tǒng)一的新界面中。比如我們模擬各種系統(tǒng)的接口調(diào)用,然后統(tǒng)一在一起顯示,但實際我們對其它各個系統(tǒng)并不了解,是一種完全黑盒的方式。
數(shù)據(jù)集成,這個主要就是先對數(shù)據(jù)和數(shù)據(jù)庫進行標識并編成目錄,確定整體的數(shù)據(jù)元模型,統(tǒng)一數(shù)據(jù)中心。
控制集成,也稱為功能或應(yīng)用集成,在業(yè)務(wù)邏輯層上對應(yīng)用系統(tǒng)進行集成。如果說表示集成是前端頁面直接調(diào)接口,那么控制集成就是在當前系統(tǒng)的代碼內(nèi)部再去調(diào)用遠程系統(tǒng)的接口,其實和表示集成是比較類似的。不過我們可以對遠程調(diào)用的接口有更好控制,并且能夠封裝一些我們當前系統(tǒng)所需要的新內(nèi)容進來,起一個代理和裝飾的作用。
業(yè)務(wù)流程集成,也稱為過程集成,這種集成必須有統(tǒng)一的信息定義、授權(quán)和管理,會有一個業(yè)務(wù)中心進行數(shù)據(jù)交換,內(nèi)部數(shù)據(jù)之間還會有嚴格的格式定義。
企業(yè)之間的應(yīng)用集成。這個其實最好理解,各個開放平臺的接口,比如說我們開發(fā)的微信、微博登錄功能。一般是什么協(xié)議呢?OAuth2 授權(quán)協(xié)議,RESTFul 接口規(guī)則,JSON/XML 數(shù)據(jù)標準格式。
說了吧,今天的內(nèi)容不多也不復(fù)雜吧,而且真的只有那一個 B/S 和 C/S 的區(qū)別特點是重點內(nèi)容,其它的都做為了解即可。
到此為止,軟件工程這一個大章節(jié)也結(jié)束了,大家還記得我們講過哪些內(nèi)容嗎?沒事的時候還是要多多復(fù)習哦,要不然這些東西過兩天很容易就會忘了。接下來,繼續(xù)沿著我們教材的路徑走下去,下一個會是大家非常感興趣的 新一代信息技術(shù) ,包括有 物聯(lián)網(wǎng)、智慧城市、云計算、大數(shù)據(jù)以及移動互聯(lián)網(wǎng) 相關(guān)的內(nèi)容介紹,另外也會順帶聊兩句人工智能和區(qū)塊鏈,相信你一定不會錯過。
參考資料:
《信息系統(tǒng)項目管理師教程》
《某機構(gòu)培訓(xùn)資料》