Test Driven Development (TDD)ไม่ใช่การออกแบบ มันเป็นข้อกำหนดที่ส่งผลกระทบต่อการออกแบบของคุณ ราวกับว่าคุณจำเป็นต้องมีความปลอดภัยต่อเกลียวนั่นไม่ใช่การออกแบบ มันเป็นข้อกำหนดที่ส่งผลต่อการออกแบบของคุณอีกครั้ง
หากคุณเพิกเฉยต่อข้อกังวลการออกแบบอื่น ๆ ทั้งหมดและยึดมั่นในกฎ TDD อย่างเคร่งครัดอย่าตำหนิ TDD เมื่อรหัสของคุณกลายเป็นเรื่องไร้สาระ มันจะเป็นอึที่ทดสอบได้ แต่มันจะเป็นอึ
สิ่งหนึ่งที่ดีเกี่ยวกับอึที่ทดสอบได้คือมันเป็นอึที่สามารถปรับเปลี่ยนได้ดังนั้นสำหรับบางคนที่ดีพอ เราจะได้รับแฟนซีเมื่อจำเป็นเท่านั้น คนอื่นเกลียดสิ่งนี้และตำหนิ TDD ไม่นี่คือสิ่งที่คุณทำ
การออกแบบโดเมนขับเคลื่อน (DDD)เป็นสิ่งที่คุณทำก่อนวัฏจักร refactor สีเขียวสีแดงของ TDD
DDD เป็นความพยายามในการสร้างและรักษาพื้นที่ในรหัสที่ผู้เชี่ยวชาญด้านโดเมนซึ่งส่วนใหญ่ไม่สนใจรายละเอียดของระบบสามารถเข้าใจวิธีการควบคุมระบบ สิ่งนี้ทำโดยนามธรรมและการสร้างแบบจำลองโดเมนปัญหาในลักษณะที่คุ้นเคย
ระบบ DDD สามารถมีสถาปัตยกรรมที่มีลักษณะดังนี้:
สถาปัตยกรรม DDD นี้มีหลายชื่อ: Clean , Onion , Hexagonal , ฯลฯ
นี่คือการปลดการเชื่อมต่อที่ฉันเห็นหลายคนมีเมื่อพวกเขาดูการออกแบบนี้ นี่ไม่ใช่รูปธรรม ฉันสามารถติดตามการออกแบบนี้และไม่เคยเขียนอะไรที่คุณเห็นไดอะแกรมที่นี่ ฉันเห็นคนอื่นยืนยันว่าจะต้องมีวัตถุกรณีการใช้งานหรือชั้นเรียนนิติบุคคล สิ่งเหล่านี้คือชุดของกฎที่บอกคุณว่าคุณสามารถพูดคุยกับใครและอย่างไร
แค่นั้นแหละ. ปฏิบัติตามกฎของการออกแบบนี้และคุณสามารถ TDD ใจเล็ก ๆ ของคุณออกมา TDD ไม่สนใจว่าคุณจะคุยกับใคร มันใส่ใจว่าทุกอย่างที่ทำบางสิ่งสามารถพิสูจน์ได้ว่าทำงานได้หรือไม่เพียงแค่คลิกปุ่ม ไม่บางสิ่งบางอย่างเสีย มันบอกคุณว่ามีอะไรแตกหัก
ยังคลุมเครือ ดูที่Controler
- Use Case Interactor
- Presenter
แผนภาพที่มุมขวาล่าง ต่อไปนี้เป็นสิ่งที่เป็นรูปธรรมสามประการที่สื่อสารกัน แน่ใจว่านี่คือ DDD แต่คุณจะเพิ่ม TDD ที่นี่ได้อย่างไร เพียงแค่เลียนแบบสิ่งที่เป็นรูปธรรม ผู้นำเสนอต้องได้รับข้อมูล PresenterMock
ชั้นจะเป็นวิธีที่ดีที่จะตรวจสอบว่าได้รับสิ่งที่คุณคาดหวังที่จะได้รับ ยื่นมือเข้าUse Case Interactor
มาPresenterMock
และขับUse Case Interactor
ราวกับว่าคุณเป็นController
และคุณมีวิธีที่ดีในการทดสอบหน่วยUse Case Interactor
เนื่องจากการเยาะเย้ยจะบอกคุณว่ามันได้สิ่งที่คุณคาดหวังว่าจะได้รับ
ดูนั่นสิ TDD พอใจและเราไม่ต้องไปเจรจากับการออกแบบ DDD ของเรา มันเกิดขึ้นได้อย่างไร? เราเริ่มต้นด้วยการออกแบบที่แยกออกจากกัน
หากคุณใช้ TDD ในการออกแบบไดรฟ์ (ไม่ใช่แค่Evelopment D ) คุณจะได้รับการออกแบบที่สะท้อนถึงความพยายามที่คุณใส่เข้าไป ถ้านั่นคือสิ่งที่คุณต้องการ แต่นั่นไม่ใช่สิ่งที่ TDD มีความหมาย สิ่งนี้กลายเป็นสิ่งที่ขาดไปไม่ใช่ความผิดของ TDD
TDD ไม่ได้เกี่ยวกับการออกแบบ หากคุณต้องทำการเปลี่ยนแปลงการออกแบบเพื่อใช้ TDD คุณมีปัญหาใหญ่กว่าการทดสอบ