Tôi sẽ nói không bắt đầu với TDD. Đưa ra quyết định sáng suốt khi bạn dành nhiều thời gian hơn để học các chiến lược kiến trúc nói chung. TDD sẽ không cho phép bạn bỏ qua bài tập về nhà đó mặc dù bạn có thể bắt đầu tin vào điều đó.
Đây là vấn đề của tôi với nó. Khi bạn nói có vẻ như rất nhiều thời gian lãng phí vào những thứ sẽ không bao giờ phá vỡ TDDers nói rằng bạn sẽ đánh giá cao điều đó khi một điều mà bạn không lường trước được trong một chuỗi phụ thuộc khổng lồ bị phá vỡ. Khi bạn chỉ ra rằng không thể dự đoán những điều như vậy trước khi bạn viết ứng dụng của mình, đó là ... tại sao chúng tôi kiểm tra, họ nói với bạn rằng đó thực sự là về thiết kế và không thử nghiệm mặc dù việc kiểm tra có ích.
Nhưng không phải chuỗi khổng lồ của sự phụ thuộc liên kết không thể đoán trước là sản phẩm của thiết kế nhảm nhí?
Vậy đó là cái gì?
Đây là một suy nghĩ. Trước tiên, chúng ta không có chuỗi phụ thuộc phức tạp lớn bằng cách xem xét hai nguyên tắc sau đây của thiết kế hướng đối tượng từ Mẫu thiết kế:
"Chương trình cho một giao diện, không phải là một triển khai"
Điều đó có nghĩa là, các đối tượng của bạn không nên quan tâm ai đang thực hiện cuộc gọi hoặc cách chúng được thực hiện. Chỉ có các đối số thích hợp được đưa vào và các phương thức mà họ gọi từ các đối tượng khác mà họ được hướng dẫn để làm việc như mong đợi. Chuỗi phụ thuộc của bạn trong hầu hết các trường hợp nên ở một điểm liên kết, cuộc gọi phương thức trên một phần của người gọi và vị trí nơi các đối số được đưa vào phương thức của bạn. Đó là nơi bạn đăng nhập và xác thực và gửi các thông báo hữu ích để gỡ lỗi khi mọi thứ tào lao.
Và:
"Thành phần đối tượng ủng hộ kế thừa lớp"
Ai là hình nộm? Anh chàng đã làm một cái gì đó cho một lớp trong một kế hoạch thừa kế xếp tầng phức tạp liên quan đến như 30 lớp dẫn đến phá vỡ trường hợp rìa, hoặc nhà phát triển đã đưa ra kiến trúc đó ngay từ đầu? TDD có thể giúp bạn đi đến tận cùng của các vấn đề bên trong tòa tháp nghiêng lớp Pisa sớm hơn bạn có thể có nhưng điều đó có làm giảm bớt đau đớn khi cố gắng sửa đổi một trong những điểm cuối của thảm họa mã đó vào lần tới không?
Và đó là nơi tôi có được thứ khiến tôi phiền lòng. TDD có thực sự giúp thiết kế hay nó cho phép kiến trúc xấu? Đối với tôi có vẻ như nó có tiềm năng trở thành một chiến lược tự hoàn thành. Nhóm của bạn càng không phải chịu trách nhiệm về kiến trúc kém, các thành phần thử nghiệm chi tiết đó dường như trở nên hữu ích hơn, nhưng cuối cùng, ứng dụng của bạn trở thành một PITA ngày càng lớn hơn để làm việc (giả sử trước tiên họ không bao giờ nghĩ đến kiến trúc địa điểm). Và việc không thừa nhận hậu quả của điều đó là điều tất yếu, luôn là lỗi đắt nhất bạn có thể mắc phải khi làm việc trên một ứng dụng có nghĩa là phải nâng cấp và sửa đổi theo thời gian.