- 架構(gòu)寶典
- 中生代技術(shù)社區(qū)
- 1305字
- 2019-06-19 15:54:12
1.9 架構(gòu)與軟件開發(fā)(軟件過程)
架構(gòu)與軟件開發(fā)之間是有聯(lián)系的,架構(gòu)師需要思考系統(tǒng)開發(fā)采用何種架構(gòu)模型與軟件開發(fā)模型。微服務(wù)是當(dāng)前主流的架構(gòu)風(fēng)格之一,敏捷是很流行的軟件開發(fā)模型。
我們先來區(qū)分兩個(gè)概念,軟件開發(fā)方法和軟件開發(fā)模型。這兩個(gè)概念在實(shí)踐中常常被混淆。強(qiáng)調(diào)這兩個(gè)概念是很有必要的。
20世紀(jì)60年代中期爆發(fā)了軟件危機(jī),為了克服這一危機(jī),1968年和1969年連續(xù)召開了兩次著名的NATO會(huì)議,會(huì)議上提出了“軟件工程”這一術(shù)語,之后該術(shù)語不斷發(fā)展、完善。與此同時(shí),軟件研究人員也在不斷探索新的軟件開發(fā)方法。我們常用的軟件開發(fā)方法有Parnas方法、SASD結(jié)構(gòu)化方法、面向?qū)ο蠓椒ǖ取?/p>
軟件開發(fā)模型是指軟件開發(fā)的全部過程、活動(dòng)和任務(wù)的結(jié)構(gòu)框架。軟件開發(fā)包括需求、設(shè)計(jì)、編碼和測(cè)試等階段,有時(shí)也包括維護(hù)階段。軟件開發(fā)模型能清晰、直觀地表達(dá)軟件開發(fā)的全過程,明確規(guī)定了要完成的主要活動(dòng)和任務(wù),用來作為軟件項(xiàng)目工作的基礎(chǔ)。
典型的軟件開發(fā)模型有瀑布模型(Waterfall Model)、快速原型模型(Rapid Prototype Model)、增量模型(Incremental Model)、螺旋模型(Spiral Model)、演化模型(Evolution Model)等。
1.9.1 敏捷軟件開發(fā)
敏捷軟件開發(fā)(Agile Software Development),又被稱為敏捷開發(fā),是一種應(yīng)對(duì)快速變化需求的軟件開發(fā)能力。它強(qiáng)調(diào)程序員團(tuán)隊(duì)與業(yè)務(wù)專家之間的緊密協(xié)作和面對(duì)面的溝通(認(rèn)為這樣比書面的文檔更有效),頻繁的新的軟件版本交付,緊湊的自我組織型團(tuán)隊(duì),能夠很好地適應(yīng)需求不斷變化的代碼編寫和團(tuán)隊(duì)組織方法,也更注重軟件開發(fā)過程中人的作用。敏捷軟件開發(fā)是一種軟件開發(fā)模型,與之對(duì)應(yīng)的是瀑布模型、樣機(jī)模型等,不是面向?qū)ο蠓椒ā⒔Y(jié)構(gòu)化方法等軟件開發(fā)方法。
敏捷軟件開發(fā)開發(fā)離不開迭代。使用迭代法進(jìn)行軟件開發(fā),要考慮迭代次數(shù)與效率。迭代和敏捷都是有適用范圍的,不能用于否定傳統(tǒng)方法。
敏捷不等于快,而是更強(qiáng)調(diào)靈活(flexible)。因此對(duì)于有些術(shù)語,不能只看譯文,還要參考原文。其實(shí),將Agile翻譯成機(jī)敏也許更合適,這樣才能體現(xiàn)“靈活”。對(duì)于不同的項(xiàng)目,要選擇適合的方法,而不是把敏捷軟件開發(fā)作為普適良方。對(duì)于需求明確、規(guī)模較大的項(xiàng)目,也應(yīng)該考慮傳統(tǒng)方法。
敏捷軟件開發(fā)支持不斷變化的業(yè)務(wù)需求,通俗來講就是“小步快走”,與之對(duì)應(yīng)的架構(gòu)要具有適應(yīng)變化的能力。
1.9.2 敏捷軟件開發(fā)與微服務(wù)架構(gòu)
審視敏捷軟件開發(fā)的特點(diǎn),會(huì)發(fā)現(xiàn)其傾向于使用小型、松散耦合的組件/服務(wù),并以協(xié)作方式達(dá)成最終目標(biāo)。這種架構(gòu)風(fēng)格能夠從多種角度帶來敏捷的效果。小型、松耦合的組件/服務(wù)可以獨(dú)立進(jìn)行構(gòu)建、修改與測(cè)試,甚至可以根據(jù)要求的變化進(jìn)行調(diào)整或被替換。這類架構(gòu)還能夠很好地提供高靈活性及適應(yīng)性的部署模式,因?yàn)樾滦徒M件及服務(wù)可以隨時(shí)根據(jù)需求進(jìn)行添加/移除與規(guī)模伸縮。
一個(gè)微服務(wù)一般會(huì)完成某個(gè)特定的功能,比如訂單管理、客戶管理等。每個(gè)微服務(wù)都是一個(gè)微型應(yīng)用,包括商業(yè)邏輯和各種接口。有的微服務(wù)通過暴露API被別的微服務(wù)或者應(yīng)用客戶端所使用,有的微服務(wù)則通過網(wǎng)頁UI實(shí)現(xiàn)。在運(yùn)行時(shí),每個(gè)實(shí)例通常是一個(gè)云虛擬機(jī)或者Docker容器。
可見,敏捷軟件開發(fā)和微服務(wù)架構(gòu)有異曲同工之處。微服務(wù)架構(gòu)讓敏捷軟件開發(fā)和復(fù)雜的企業(yè)應(yīng)用交付成為可能[12]。
敏捷軟件開發(fā)與微服務(wù)架構(gòu)圍繞著同一類目標(biāo)存在[13]:在盡可能滿足客戶需求的同時(shí),維持良好的軟件質(zhì)量與系統(tǒng)可用性。
- 大學(xué)計(jì)算機(jī)應(yīng)用基礎(chǔ)實(shí)踐教程
- Monkey Game Development:Beginner's Guide
- 微服務(wù)與事件驅(qū)動(dòng)架構(gòu)
- Raspberry Pi for Secret Agents(Third Edition)
- NumPy Essentials
- Visual Basic程序設(shè)計(jì)與應(yīng)用實(shí)踐教程
- JavaScript動(dòng)態(tài)網(wǎng)頁開發(fā)詳解
- SQL Server 2016數(shù)據(jù)庫應(yīng)用與開發(fā)習(xí)題解答與上機(jī)指導(dǎo)
- Mastering JBoss Enterprise Application Platform 7
- 劍指大數(shù)據(jù):企業(yè)級(jí)數(shù)據(jù)倉庫項(xiàng)目實(shí)戰(zhàn)(在線教育版)
- PHP Microservices
- Processing開發(fā)實(shí)戰(zhàn)
- Learning ROS for Robotics Programming
- Web前端開發(fā)實(shí)戰(zhàn)教程(HTML5+CSS3+JavaScript)(微課版)
- Building an E-Commerce Application with MEAN