TDD (Test Driven Development) 는 디자인이 아닙니다. 디자인에 영향을 미치는 요구 사항입니다. 마치 스레드 안전해야하는 것처럼 디자인이 아닙니다. 다시 한 번, 디자인에 영향을 미치는 요구 사항입니다.
다른 모든 디자인 문제를 유쾌하게 무시하고 종교적으로 TDD 규칙을 지키면 코드가 허물어 질 때 TDD를 비난하지 않습니다. 테스트 가능한 쓰레기이지만 쓰레기가 될 것입니다.
테스트 가능한 쓰레기에 대한 한 가지 좋은 점은 리 팩터 블 쓰레기이기 때문에 일부 사람들에게는 충분하다는 것입니다. 우리는 필요할 때만 화려할 것입니다. 다른 사람들은 이것을 싫어하고 TDD를 비난합니다. 아뇨. 당신이하는 일입니다.
도메인 기반 설계 (DDD) 는 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를 사용하여 디자인을 개발 (단순히 개발 하지는 않음 )하면 디자인 노력을 반영한 디자인을 얻게됩니다. 그것이 당신이 원하는 것이라면. 그러나 그것은 TDD가 의도 한 것이 아닙니다. 이것이 결여되는 것은 확실히 TDD의 잘못이 아닙니다.
TDD는 디자인에 관한 것이 아닙니다. TDD를 사용하도록 설계를 변경해야하는 경우 테스트보다 더 큰 문제가 있습니다.