為什麼我推薦功能驅動的軟體設計方法? - khalilstemmler
功能feature代表了軟體設計的基本複雜性。這是無法避免的複雜性。其他所有內容(語言,工具,模式等)都是意外複雜性的一種形式。因此,要編寫最簡單的程式碼(無論我們在堆疊的哪一側),都應該採用功能驅動feature-driven的方法。它影響我們構造專案,編寫測試,封裝模組和設計功能的方式。
偶然的複雜性
在大多數主流程式語言中,都存在狀態和序列的概念。根據本·莫斯利(Ben Moseley)的說法,狀態和序列是 意外複雜性的兩個主要原因:
- 狀態:“您是否嘗試過將其關閉然後再次開啟?” 以前有沒有人對你這麼說過?當系統最終處於非法狀態時,就會發生這種情況。維持狀態很難。我們必須跟蹤變數,例項等。
- 順序:首先,我們執行這個操作,然後才需要執行那個操作,但前提是發生這種情況”。我們大多數人都使用支援過程和條件的語言編寫。當我們必須確保事物按特定順序發生時,我們還將引入表面積,這樣就提高了複雜性。
偶然的複雜性是指我們面臨的複雜性實際上與問題的複雜性無關(例如基本問題-功能)。相反,意外的複雜性與我們解決問題的方式有關。
這意味著包含狀態和序列的語言或正規化會無意間引入意外的複雜性。
好吧,我們可以編寫沒有狀態和序列的程式碼嗎?
事實證明,我們可以。
通過函數語言程式設計減輕意外的複雜性
這是(純粹地)函數語言程式設計的亮點。Scott Wlaschin的《領域建模的功能》一書描述了一種通過使用最少的狀態或序列來對功能/用例(他稱為工作流)進行建模來儘可能接近基本複雜性的方法。
這是一種非常徹底的方法。我認為這太神奇了。但是,真正的純鐵上下的函數語言程式設計是不適合心臟虛弱。這是一些嚴格的程式設計。通過從頭開始對整個域建模,類似於我們從第一原理建立數學方程式的方法,這確實是使非法狀態無法表示的方法。
結構與開發人員的經驗-FP很難
在軟體設計中,需要在結構Structure和程式設計師經驗之間平衡。90年代的OOP員工發現了一種很棒的功能優先方式,可以始終如一,可靠且自信地編寫包含狀態和序列的程式碼。
使用功能優先的TDD馴服(狀態和序列)複雜性
測試驅動開發不僅僅是對React元件和類進行單元測試。
通過找出一種繼續新增和更改程式碼的方式,並確保我們應用程式的功能仍然有效,可以獲得最佳的投資回報。這就是我們大多數努力的地方-因為這些功能畢竟是必不可少的複雜性。
執行TDD的“功能優先”方法是執行Double Loop TDD。
功能優先的集合
我發現的一些最佳技術可以幫助我們與當前問題的本質保持一致,並消除噪音(技術堆疊,語言,範例等),這些技巧如下:
- 事件風暴
- 事件建模
- 用例驅動設計
- 驗收測試驅動開發(也稱為雙迴圈TDD)
- ...還有更多,待續
您可以在前端和後端體系結構上以功能驅動的方式工作。看看DDDForum的程式碼,DDDForum是我們在solidbook.io中構建的應用程式。後端遵循按用例組織的功能優先專案結構。
相關文章
- 為什麼推薦好用的企業CRM軟體?
- 我為什麼不再推薦RxJavaRxJava
- 向量繪圖UI設計用什麼軟體好?ui設計工具推薦~繪圖UI
- 為什麼我不再推薦Julia? - yuri
- 我為什麼推薦Nuxt3UX
- 【肥朝】看原始碼,我為什麼推薦IDEA?原始碼Idea
- 為什麼我推薦你使用 systemd timer 替代 cronjob?
- 【吐血推薦】領域驅動設計學習輸出
- Facebook為什麼要養號?有Facebook養號軟體推薦嗎?
- 為什麼要進行領域驅動設計? - Vincent
- 為什麼我推薦Nginx作為後端伺服器代理Nginx後端伺服器
- CRM移動軟體有什麼功能?
- 有什麼比較好用的遠端軟體值得推薦?
- 轉行學程式設計推薦學什麼?程式設計
- 家居景觀設計軟體推薦DreamPlan Plus for MacMac
- 不容錯過!什麼是領域驅動設計?為什麼落地這麼難?
- 軟體安全測試為什麼重要?出具專業測試報告的軟體測試公司推薦測試報告
- 我為什麼要推薦《JavaScript 忍者祕籍(第2版)》JavaScript
- 我為什麼不推薦使用BeanUtils屬性轉換工具Bean
- Python一般用什麼軟體?Python工具推薦Python
- 推薦5個我常用的軟體,簡單高效
- 什麼是DDD領域驅動設計的戰略設計?
- 什麼是DDD領域驅動設計的戰術設計?
- react router為什麼推薦使用browserHistory而不推薦hashHistory?React
- 我為什麼推薦Prettier來統一程式碼風格
- 什麼Jupyter框架?為什麼學Python推薦Jupyter?框架Python
- 為什麼我不推薦鮑勃叔叔的清晰架構這本書?架構
- 什麼是領域驅動設計(DDD)?- mathias
- Windows軟體推薦Windows
- 為大家推薦六款實用軟體
- 強烈推薦的軟體
- 為什麼GetHashCode方法需要如此設計?
- 我們為什麼設計不出好的遊戲?遊戲
- 學Java有什麼技巧和方法推薦?Java
- 為什麼有人不推薦使用spring官方推薦的@Transactional宣告式註解Spring
- 在複雜領域中設計軟體:領域驅動設計 - levelup
- 為什麼Spring官方不推薦使用 @Autowired?Spring
- 為什麼IDEA不推薦你使用@Autowired ?Idea