混合開發:TDD、DDD和BDD交集的值

目錄

測試驅動開發(TDD)是一種開發軟件的過程,其中在編寫代碼以前先編寫測試。一旦完成,開發人員將努力編寫足夠的代碼以經過測試,而後開始重構。程序員

在這裏插入圖片描述

域驅動設計(DDD)是一種將實現與不斷髮展的模型聯繫在一塊兒的開發方法。將項目的重點放在覈心領域(知識領域),背後的邏輯上,並迫使技術和非技術方面之間進行協做以改進模型。
在這裏插入圖片描述
行爲驅動開發(BDD)是對TDD和DDD的改進,旨在經過縮小溝通差距,增進對客戶的瞭解並實現持續溝通來簡化開發。簡而言之,BDD是將業務需求與代碼結合在一塊兒的一種方式,使您可以從業務/最終用戶的角度瞭解系統的行爲。編程

在這裏插入圖片描述

Hybrid Practice混合實踐
在這裏插入圖片描述架構

TDD

Test-driven development,即測試驅動開發。一種開發過程當中應用方法。其思想爲先根據需求抽象接口,先編寫測試用例,而後在開始編寫開發代碼。TDD的本意就是經過測試來推進整個開發的進行。框架

TDD說白了就是先寫一小段功能的測試代碼,測試失敗後再寫實現代碼,測試成功後接着迭代下一個功能。編程語言

TDD的優勢:ide

  • 提升功能的可測性
  • 測試比較靈活
  • 測試用例覆蓋率比較高

缺點:工具

  • 因爲是單元測試代碼驗證,非技術人員看不懂代碼,比較難驗證功能是否貼合需求
  • 先寫單元測試代碼,測試用例須要常常調整,增長了開發人員的工做量和下降了開發效率

BDD

Behavior-driven development,即行爲驅動開發。其目的是鼓勵軟件項目中的開發者、QA和非技術人員或商業參與者之間的協做。是從用戶的需求出發,強調系統行爲。經過用天然語言書寫非程序員可讀的測試用例擴展了測試驅動開發方法,使用混合了領域中統一的語言的母語語言來描述他們的代碼的目的,讓開發者得以把精力集中在代碼應該怎麼寫,而不是技術細節上,並且也最大程度的減小了將代碼編寫者的技術語言與商業客戶、用戶、利益相關者、項目管理者等的領域語言之間來回翻譯的代價.單元測試

目前主流的BDD測試框架爲Cucumber ,支持多種編程語言。測試

cucumber支持的關鍵字:ui

feature | "功能" |
background | "背景" |
scenario | "場景", "劇本" |
scenario outline | "場景大綱", "劇本大綱" |
examples | "例子" |
given | "* ", "假如", "假設", "假定" |
when | "* ", "當" |
then | "* ", "那麼" |
and | "* ", "並且", "而且", "同時" |
but | "* ", "可是" |
given (code) | "假如", "假設", "假定" |
when (code) | "當" |
then (code) | "那麼" |
and (code) | "並且", "而且", "同時" |
but (code) | "可是" |

編程是經過使用以上的關鍵字來描述應用的功能,使非開發人員能快速便捷的瞭解代碼的功能。

DDD

Domain-drive Design,領域驅動設計。其目的是以一種領域專家、設計人員、開發人員都能理解的通用語言做爲相互交流的工具,在交流的過程當中發現領域概念,而後將這些概念設計成一個領域模型,再有該模型驅動軟件設計和開發。

領域模型

  • 領域模型是是對具備某個邊界的領域的一個抽象,反映了領域內用戶需求的本質
  • 領域模型只反映業務,和技術無關
  • 領域模型能夠反映領域中的實體和過程
  • 領域模型確保業務邏輯都在一個模型中,有助於提升應用的維護性和可重用性
  • 領域模型可讓開發人員相對平滑地將業務知識轉換爲軟件架構
  • 領域模型貫穿軟件分析、設計,以及開發的整個過程
  • 創建正確的領域模型須要領域專家、設計、開發人員積極溝通共同努力,是你們對領域內的業務不斷深刻,從而不斷細化和完善領域模型
  • 領域模型的表達方式有多種
  • 領域模型是整個軟件的核心,設計足夠精良且符合業務需求的領域模型可以更快速的響應需求變化

領域驅動設計的分紅架構

  • 用戶界面/表現層
  • 應用層
  • 領域層 - 表達業務概念,業務信息和業務規則
  • 基礎設施層

業務對象的職責和策略:

  • 實體(Entities):具有惟一ID,可以被持久化,具有業務邏輯,對應業務對象
  • 值對象(Value objects):不具備惟一ID,由對象的屬性描述,通常爲內存中的臨時對象,能夠用來傳遞參數或對實體進行補充描述。
  • 工廠(Factories):主要用來建立實體,目前架構實踐中通常採用IOC容器來實現工廠的功能
  • 倉庫(Repositories):用來管理實體的集合,封裝持久化框架
  • 服務(Services):爲上層建築提供可操做的接口,負責對領域對象進行調度和封裝,同時能夠對外提供各類形式的服務

DDD對構建企業級應用開發平臺和大型核心業務系統的做用是至關大的,不管是在產品的穩定性、擴展性、可維護性、生命週期等方面都有良好的表現

參考
The Value at the Intersection of TDD, DDD, and BDD
Hybrid Development: The Value at the Intersection of TDD, DDD, and BDD
BDD vs TDD vs ATDD : Key Differences
Differences between TDD, ATDD and BDD

相關文章
相關標籤/搜索