2009-01-28 41 views
8

哪一種爲大型軟件提供更多優勢,比如說Photoshop?D3與TDD的最佳實踐

另外對於TDD,我不是說單元測試,因爲你也可以在D3中使用單元測試,這與TDD的方法不一樣。

D3:設計驅動開發

TDD:測試驅動開發

+0

雖然我給你我的答案,但我認爲你需要提供更多關於TDD的信息,因爲你顯然沒有把它排除在DDD之外。 – 2009-01-28 17:49:01

+3

爲了那些不知道這些縮寫詞意思的人的利益,請確定。我認爲TDD是測試驅動設計,但什麼是DDD? Doofus驅動的設計? (如果是這樣,我曾經工作過的一些地方使用它。) – 2009-01-28 17:49:11

+4

DDD代表域驅動設計。我認爲這就是他/她的意思。 – 2009-01-28 17:51:01

回答

11

我也並不認爲他們是相互排斥的,我認爲你可以使用TDD去DDD。

103

DDD =領域驅動設計

TDD意味着你編寫的行爲,任何單位之前,你有這種行爲,只是這種行爲的測試。只有在這些測試失敗之後,你纔會執行這個行爲。在我見過的每一個化身中,TDD都處在方法或類的層面 - 也許是一對夫婦共同工作的。最終的結果是你得到了高度可測試性,因此代碼非常鬆散。最終,雖然TDD是關於創建可以測試的代碼的。

DDD是一個更加抽象的哲學和一組設計模式,它們解決了如何設計一個大的,可擴展的和可維護的系統。最終DDD是關於創建一個代碼生態系統,隱式或明確地捕獲重要的領域知識。

所以你看,它們當然不是相互排斥的。幾乎我認識的每個人都是DDD知識淵博的人,他也是一名硬核TDD愛好者。

15

在編碼之前,TDD既沒有自下而上,也沒有編寫測試。 TDD是關於使用測試來推動開發,目標是在交付之前對代碼進行測試。 它從確保用戶需求被寫入使自動用戶驗收測試成爲可能的形式開始。它通過集成和功能測試繼續到單元測試。單元測試確實形成了最終的最大份額。

測試應該首先寫的原因是因爲當考慮(設計)一個問題的解決方案時,您會自動期望解決方案應該做什麼。任何期望都可以表示爲一種測試,那麼爲什麼不立即記錄期望值,並同時對其進行自動測試以確保解決方案實現該目標?

0

在我看來,當你首先編寫測試(在TDD中)時,你正在設計系統。如果我們不能先寫測試,則表明需求不明確。我們可以在測試前編寫故事,並將其用作已知規格Test As Specification。在通過測試後,我們可以使用測試作爲已知文件Test As Document。當新開發人員加入項目時,他們可以使用這些測試來學習系統業務。

在DDD中,您只是使用story來創建對象之間的關係。在DDD中重要的是你應該只關注域。例如,在編寫域業務邏輯時,您不應該擔心將數據庫實體保存在數據庫中。簡而言之,在編寫業務邏輯時,您不應該考慮域之外的任何事情。