Hãy bắt đầu với một ví dụ.
Giả sử, tôi có một phương thức được gọi export
phụ thuộc rất nhiều vào lược đồ DB. Và bởi phụ thuộc rất nhiều, tôi có nghĩa là tôi biết rằng việc thêm một cột mới vào một bảng nhất định thường xuyên (rất thường xuyên) dẫn đến export
thay đổi phương thức tương ứng (thông thường bạn cũng nên thêm trường mới vào dữ liệu xuất).
Các lập trình viên thường quên thay đổi export
phương thức vì nó không thực sự rõ ràng, bạn thậm chí nên nhìn vào điều này. Mục tiêu của tôi là buộc lập trình viên đưa ra quyết định rõ ràng để xác định liệu anh ta quên xem export
phương thức hay chỉ không muốn thêm một trường vào dữ liệu xuất. Và tôi đang tìm giải pháp thiết kế cho vấn đề này.
Tôi có hai ý tưởng, nhưng cả hai đều có sai sót.
Thông minh đọc tất cả các gói bọc
Tôi có thể tạo trình bao bọc thông minh để đảm bảo tất cả dữ liệu được đọc rõ ràng.
Một cái gì đó như thế này:
def export():
checker = AllReadChecker.new(table_row)
name = checker.get('name')
surname = checker.get('surname')
checker.ignore('age') # explicitly ignore the "age" field
result = [name, surname] # or whatever
checker.check_now() # check all is read
return result
Vì vậy, checker
khẳng định nếu table_row
có chứa các trường khác không được đọc. Nhưng tất cả những thứ này có vẻ nặng và (có thể) ảnh hưởng đến sự hoàn hảo.
Kiểm tra phương pháp đó
Tôi chỉ có thể tạo một số nhỏ nhất nhớ lại lược đồ bảng cuối cùng và thất bại mỗi khi bảng được thay đổi. Trong trường hợp đó, lập trình viên sẽ thấy một cái gì đó giống như đừng quên kiểm tra export
phương thức. Để ẩn người lập trình cảnh báo sẽ (hoặc sẽ không - đó là một vấn đề) kiểm tra export
và thủ công (đó là một vấn đề khác) khắc phục kiểm tra bằng cách thêm các trường mới vào đó.
Tôi có một vài ý tưởng khác nhưng chúng quá rắc rối để thực hiện hoặc quá khó hiểu (và tôi không muốn dự án trở thành một câu đố).
Vấn đề trên chỉ là một ví dụ về loại vấn đề rộng hơn mà tôi gặp phải theo thời gian. Tôi muốn liên kết một số đoạn mã và / hoặc cơ sở hạ tầng để thay đổi một trong số chúng ngay lập tức cảnh báo lập trình viên để kiểm tra mã khác. Thông thường bạn có một số công cụ đơn giản như trích xuất logic thông thường hoặc viết không đáng tin cậy, nhưng tôi đang tìm kiếm công cụ cho các trường hợp phức tạp hơn: có thể một số mẫu thiết kế mà bây giờ tôi biết.
export
có tất cả mọi thứ bạn thực sự cần không?
export
dựa trên Schema không?