Sau nhiều tháng thất vọng và dành thời gian để chèn kim trong búp bê voodoo của các nhà phát triển trước, tôi quyết định cố gắng tái cấu trúc mã cũ hơn.UnitTesting một lớp học trả về một tập dữ liệu phức tạp
Tôi đã đặt hàng Micheal Feather's book, tôi vào Fowler's refactoring và tôi đã thực hiện một số dự án mẫu với DUnit.
Vì vậy, ngay cả khi tôi không nắm vững chủ đề, tôi cảm thấy đã đến lúc hành động và đưa một số ý tưởng vào thực tế.
Gần như 100% mã tôi làm việc có logic nghiệp vụ bị mắc kẹt trong giao diện người dùng, hơn nữa tất cả là lập trình thủ tục (với một vài ngoại lệ). Ứng dụng bắt đầu nhanh như & bẩn và tiếp tục như vậy.
Bây giờ viết các bài kiểm tra cho tất cả các ứng dụng là một nhiệm vụ vô nghĩa trong trường hợp của tôi, nhưng tôi muốn cố gắng unittest một cái gì đó mà tôi cần phải refactor.
Một trong những nhiệm vụ phức tạp mà một "lớp logic kinh doanh TForm" lớn thực hiện là đọc dữ liệu DB, thực hiện một số tính toán và điền vào một thành phần lập lịch biểu. Tôi muốn loại bỏ dữ liệu đọc DB và phần tính toán và gán cho một lớp mới nhiệm vụ này. Tất nhiên đây là một cách để cải thiện thiết kế hiện tại, nó không phải là cách tốt nhất để bắt đầu từ đầu, nhưng tôi muốn làm điều này vì dữ liệu được trả về bởi lớp mới này cũng hữu ích theo những cách khác, ví dụ bây giờ tôi đã được yêu cầu gửi thông báo e-mail của dữ liệu lịch biểu.
Vì vậy, để tránh thao tác sao chép và dán lớn, tôi cần lớp mới.
Bây giờ trình lên lịch được điền từ tập dữ liệu khổng lồ (kích thước lớn và số trường), có thể bước tái cấu trúc đầu tiên có thể lấy tập dữ liệu từ lớp mới. Nhưng sau đó trong tương lai tôi nên sử dụng một lớp mới (như TSchedulerData hoặc một số tên khác ít ràng buộc để lên lịch) để quản lý dữ liệu, và thay vì có một tập dữ liệu như là kết quả tôi có thể có một đối tượng TSchedulerData.
Kể từ khi trình tái cấu trúc xảy ra ở các bước nhỏ và cần thử nghiệm để cấu trúc lại tốt hơn, tôi hơi bối rối về cách tiến hành.
Các điểm sau không rõ ràng đối với tôi:
1) cách kiểm tra tập dữ liệu phức tạp? Tôi có nên chạy ứng dụng đang hoạt động, lưu một tập kết quả thành xml và viết một bài kiểm tra nơi tôi sử dụng một TClientDataSet chứa dữ liệu xml đó không?
2) Tôi phải quan tâm đến TSchedulerData bao nhiêu? Tôi có nghĩa là tôi không chắc chắn 100% tôi sẽ sử dụng TSchedulerData, có thể tôi sẽ gắn bó với Dataset, dù sao thì nghĩ đến việc tạo ra các thử nghiệm phức tạp sẽ bị loại bỏ trong 2 tuần không hấp dẫn đối với DUnitNewbee. Dù sao có lẽ đây là cách nó hoạt động. Tôi không thể tưởng tượng số lượng lỗi mà tôi sẽ phải đối mặt mà không có một thử nghiệm.
Lưu ý cuối cùng: Tôi biết ai đó nghĩ rằng viết lại từ đầu là một lựa chọn tốt hơn, nhưng đây không phải là một lựa chọn. "Ứng dụng là rất lớn và nó được bán ngày hôm nay và các tính năng mới được yêu cầu ngày hôm nay không để có được ra khỏi kinh doanh". Đây là những gì tôi đã được nói, dù sao việc tái cấu trúc có thể cứu mạng tôi và kéo dài tuổi thọ của ứng dụng.
Ok cảm ơn. Nỗi sợ hãi mà tôi có là các bài kiểm tra viết sẽ mất rất nhiều thời gian, bởi vì dữ liệu phức tạp. File dumps rất phức tạp, do đó, đây là lần đầu tiên tôi thực hiện cuộc sống không thực hiện được, tôi sợ mất một tuần và kết thúc với các bài kiểm tra không thành công. Dù sao tôi không có nơi nào khác để bắt đầu, ý tôi là, tôi cần phải thay đổi MÃ NÀY và vì vậy tôi nên bắt đầu từ đây. – LaBracca