為什麼我推薦功能驅動的軟體設計方法? - khalilstemmler
功能feature代表了軟體設計的基本複雜性。這是無法避免的複雜性。其他所有內容(語言,工具,模式等)都是意外複雜性的一種形式。因此,要編寫最簡單的程式碼(無論我們在堆疊的哪一側),都應該採用功能驅動feature-driven的方法。它影響我們構造專案,編寫測試,封裝模組和設計功能的方式。
偶然的複雜性
在大多數主流程式語言中,都存在狀態和序列的概念。根據本·莫斯利(Ben Moseley)的說法,狀態和序列是 意外複雜性的兩個主要原因:
- 狀態:“您是否嘗試過將其關閉然後再次開啟?” 以前有沒有人對你這麼說過?當系統最終處於非法狀態時,就會發生這種情況。維持狀態很難。我們必須跟蹤變數,例項等。
- 順序:首先,我們執行這個操作,然後才需要執行那個操作,但前提是發生這種情況”。我們大多數人都使用支援過程和條件的語言編寫。當我們必須確保事物按特定順序發生時,我們還將引入表面積,這樣就提高了複雜性。
偶然的複雜性是指我們面臨的複雜性實際上與問題的複雜性無關(例如基本問題-功能)。相反,意外的複雜性與我們解決問題的方式有關。
這意味著包含狀態和序列的語言或正規化會無意間引入意外的複雜性。
好吧,我們可以編寫沒有狀態和序列的程式碼嗎?
事實證明,我們可以。
透過函數語言程式設計減輕意外的複雜性
這是(純粹地)函數語言程式設計的亮點。Scott Wlaschin的《領域建模的功能》一書描述了一種透過使用最少的狀態或序列來對功能/用例(他稱為工作流)進行建模來儘可能接近基本複雜性的方法。
這是一種非常徹底的方法。我認為這太神奇了。但是,真正的純鐵上下的函數語言程式設計是不適合心臟虛弱。這是一些嚴格的程式設計。透過從頭開始對整個域建模,類似於我們從第一原理建立數學方程式的方法,這確實是使非法狀態無法表示的方法。
結構與開發人員的經驗-FP很難
在軟體設計中,需要在結構Structure和程式設計師經驗之間平衡。90年代的OOP員工發現了一種很棒的功能優先方式,可以始終如一,可靠且自信地編寫包含狀態和序列的程式碼。
使用功能優先的TDD馴服(狀態和序列)複雜性
測試驅動開發不僅僅是對React元件和類進行單元測試。
透過找出一種繼續新增和更改程式碼的方式,並確保我們應用程式的功能仍然有效,可以獲得最佳的投資回報。這就是我們大多數努力的地方-因為這些功能畢竟是必不可少的複雜性。
執行TDD的“功能優先”方法是執行Double Loop TDD。
功能優先的集合
我發現的一些最佳技術可以幫助我們與當前問題的本質保持一致,並消除噪音(技術堆疊,語言,範例等),這些技巧如下:
- 事件風暴
- 事件建模
- 用例驅動設計
- 驗收測試驅動開發(也稱為雙迴圈TDD)
- ...還有更多,待續
您可以在前端和後端體系結構上以功能驅動的方式工作。看看DDDForum的程式碼,DDDForum是我們在solidbook.io中構建的應用程式。後端遵循按用例組織的功能優先專案結構。
相關文章
- CRM移動軟體有什麼功能?
- 為什麼推薦好用的企業CRM軟體?
- 軟體公司為什麼用笨程式設計師程式設計師
- 請教:域驅動設計和模型驅動設計是什麼樣的關係模型
- [技術討論]什麼是最好的軟體設計方法
- 向量繪圖UI設計用什麼軟體好?ui設計工具推薦~繪圖UI
- 為什麼軟體會被稱為“軟體”
- 我的DB2驅動程式,為什麼不支援createStatement方法?DB2
- 軟考–軟體設計師薦
- 為什麼程式設計師反而是最痛恨軟體的人?程式設計師
- 在複雜領域中設計軟體:領域驅動設計 - levelup
- 為什麼GetHashCode方法需要如此設計?
- [軟體人生]什麼是程式設計師程式設計師
- 銷售移動辦公CRM軟體有什麼功能?
- 領域驅動設計對軟體複雜度的應對複雜度
- 驅動總裁是什麼軟體 驅動總裁解除安裝了有影響嗎
- 為什麼糟糕的軟體成功了
- 軟體工程--為什麼軟體開發方法論讓你覺得糟糕軟體工程
- 為什麼說精益方法是數字轉型的核心驅動力?
- 什麼是DDD領域驅動設計的統一語言?
- 為什麼要學習設計模式(Design Patterns) - 軟體設計大師之路 (轉)設計模式
- 為什麼要學習設計模式(Design Patterns) - 怎樣成為軟體設計大師 (轉)設計模式
- 為什麼軟體程式設計師的價值總是被嚴重的低估程式設計師
- 什麼是軟體架構設計?- Grady架構
- 為什麼事件驅動伺服器這麼火事件伺服器
- Java程式設計:軟體最大的追求是什麼?(轉)Java程式設計
- 設計師為什麼要學程式設計,開發者為什麼要學設計?程式設計
- axure是什麼軟體幹什麼的 axure怎麼用有哪些功能
- 軟體工程——程式導向的軟體設計方法軟體工程
- 為什麼為什麼為什麼為什麼為什麼你要做一名程式設計師?程式設計師
- 為什麼拙劣的軟體也會成功?
- Facebook為什麼要養號?有Facebook養號軟體推薦嗎?
- 為什麼微服務應該是事件驅動?微服務事件
- 為什麼軟體開發方法論讓你覺得糟糕
- 免費的CRM軟體有哪些?功能是什麼?
- 軟體安全測試為什麼重要?出具專業測試報告的軟體測試公司推薦測試報告
- 領域驅動設計與模型驅動設計的關係模型
- 軟體設計是怎樣煉成的(1)——什麼是優秀的設計?