Tôi đang cố gắng xoay quanh TDD, đặc biệt là phần phát triển. Tôi đã xem một số cuốn sách, nhưng những cuốn tôi tìm thấy chủ yếu giải quyết phần thử nghiệm - Lịch sử của NUnit, tại sao thử nghiệm lại tốt, Red / Green / Refactor và cách tạo Máy tính Chuỗi.
Thứ tốt, nhưng đó là "chỉ" Kiểm tra đơn vị, không phải TDD. Cụ thể, tôi không hiểu làm thế nào TDD giúp tôi có được một thiết kế tốt nếu tôi cần một Thiết kế để bắt đầu thử nghiệm nó.
Để minh họa, hãy tưởng tượng 3 yêu cầu sau:
- Một danh mục cần phải có một danh sách các sản phẩm
- Danh mục cần nhớ những sản phẩm mà người dùng đã xem
- Người dùng sẽ có thể tìm kiếm một sản phẩm
Tại thời điểm này, nhiều cuốn sách kéo một con thỏ ma thuật ra khỏi mũ và lao vào "Thử nghiệm Dịch vụ Sản phẩm", nhưng họ không giải thích làm thế nào họ đưa ra kết luận rằng có Dịch vụ Sản phẩm ở nơi đầu tiên. Đó là phần "Phát triển" trong TDD mà tôi đang cố gắng hiểu.
Cần phải có một thiết kế hiện có, nhưng những thứ bên ngoài các dịch vụ thực thể (nghĩa là: Có một Sản phẩm, do đó cần phải có một Dịch vụ Sản phẩm) (ví dụ, yêu cầu thứ hai yêu cầu tôi phải có một số khái niệm về một Người dùng, nhưng tôi sẽ đặt chức năng này ở đâu để nhắc nhở? Và Tìm kiếm là một tính năng của ProductService hoặc SearchService riêng? Làm sao tôi biết nên chọn cái nào?)
Theo RẮN , tôi sẽ cần một Dịch vụ người dùng, nhưng nếu tôi thiết kế một hệ thống không có TDD, tôi có thể sẽ có một loạt các Dịch vụ Phương thức đơn. Không phải TDD có ý định khiến tôi khám phá thiết kế của mình ngay từ đầu sao?
Tôi là nhà phát triển .net, nhưng tài nguyên Java cũng sẽ hoạt động. Tôi cảm thấy rằng dường như không có một ứng dụng mẫu thực sự hoặc cuốn sách nào liên quan đến một dòng ứng dụng kinh doanh thực sự. Ai đó có thể cung cấp một ví dụ rõ ràng minh họa quá trình tạo ra một thiết kế bằng TDD không?