Tác động của Thiết kế Chương trình
Đã giới thiệu| English | Ý nghĩa |
|---|---|
| modular/ˈmɒdjʊlə/ | mô-đun hóa |
Hai thiết kế gọn gàng có thể báo cáo các giá trị trung bình khác nhau
- Một bản ghi giả tưởng chứa điểm số 80, vắng mặt và 100. Việc coi sự vắng mặt là zero sẽ cho ra
(80 + 0 + 100) / 3 = 60; việc bỏ qua kết quả vắng mặt sẽ cho ra(80 + 100) / 2 = 90. - Các phương thức riêng biệt có thể tính toán đúng cả hai kết quả. Sự tổ chức không tự chọn chính sách báo cáo: hãy xác định ý nghĩa của sự vắng mặt, ai là người quyết định, và mẫu số nào báo cáo phải hiển thị trước khi sử dụng kết quả.
Các điểm là 80, bị thiếu và 100. Theo chính sách điểm khả dụng, trung bình là bao nhiêu?
Độ khó 2/5 · 140 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Tổng các điểm có mặt là 180 và số lượng điểm có mặt là 2, nên 180/2 = 90.
Chuyển đổi yêu cầu thành hợp đồng
- Xác định xem sự vắng mặt có nghĩa là bài đánh giá chưa làm, bài tập không được giao, hay dữ liệu chưa nhập. Những trường hợp này không nhất thiết phải chia sẻ cùng một quy tắc; ví dụ giả định chỉ minh họa hậu quả và không quy định chính sách chấm điểm của nhà trường.
- Nêu rõ đầu vào chấp nhận được, cách xử lý các giá trị bị thiếu và kết quả. Nếu quy tắc là "trung bình các điểm số khả dụng", một bản ghi toàn bộ bị thiếu sẽ không có trung bình; hãy báo cáo trường hợp này một cách rõ ràng thay vì tự động gán bằng 0 hoặc chia cho 0.
Tách biệt trách nhiệm kiểm tra
- Thiết kế mô-đun tách biệt
readScores,averageAvailablevàprintReport. Phương thức trung bình có thể được kiểm tra bằng các giá trị đã biết mà không cần đọc tệp hay bắt đầu đầu ra có định dạng. - Sự tách biệt giúp ích khi các giao diện vẫn còn rõ ràng. Việc thay đổi ý nghĩa của sự vắng mặt vẫn có thể đòi hỏi thay đổi trong tính toán, báo cáo và kiểm tra; các phương thức nhỏ và tên gọi tốt đơn thuần không ngăn chặn những phụ thuộc đó.
Kiểm tra các trường hợp thông thường và biên
- Đối với chính sách điểm số khả dụng, hãy kiểm tra [80, bị thiếu, 100] cho ra 90, một ⟨80⟩ đơn lẻ cho ra ⟨80⟩, và [bị thiếu, bị thiếu] tạo ra kết quả "không có kết quả" theo thỏa thuận. Đừng chỉ kiểm tra xem chương trình có chạy được hay không.
- Phép tính bên dưới sử dụng
nullcho các giá trị bị thiếu. Nó trả về trung bình kiểu double và từ chối trường hợp tất cả đều bị thiếu. Nó giả định mảng điểm số thông thường không null; việc kiểm tra đầu vào và báo cáo là những trách nhiệm riêng biệt.
public class AverageAvailable {
public static double averageAvailable(Integer[] scores) {
double total = 0;
int present = 0;
for (Integer score : scores) {
if (score != null) {
total += score;
present++;
}
}
if (present == 0) {
throw new IllegalArgumentException("No available scores");
}
return total / present;
}
}
Một thiết kế mô-đun (các thành phần độc lập, đặt tên rõ ràng) chủ yếu dễ dàng hơn để...
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Tính mô-đun hóa làm cho các thay đổi an toàn hơn và các thành phần có thể tái sử dụng.
Khi nhiều đối tượng gọi sử dụng chung một phương thức, việc sửa chữa phương thức đó sẽ có lợi cho tất cả các đối tượng gọi mà không cần chỉnh sửa các bản sao trùng lặp.
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Đúng: các đối tượng gọi tái sử dụng phần thực hiện. Hợp đồng của nó và các hệ quả của sự thay đổi vẫn cần được xem xét lại.
Thiên kiến trong dữ liệu hoặc logic của một chương trình có thể tạo ra kết quả bất công ở quy mô lớn.
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Lựa chọn thiết kế ảnh hưởng đến con người thực — hãy xem xét ai bị tác động.
Để kiểm tra phép tính trung bình độc lập với dữ liệu đầu vào và kết quả in ra, thiết kế nào tốt nhất để tách biệt trách nhiệm này?
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Việc tách riêng phần tính toán khỏi đầu vào và đầu ra cho phép kiểm tra điểm đã biết mà không cần các thao tác khác. Chỉ có các phương thức nhỏ không đảm bảo tính đúng đắn.
Thiết kế chương trình chỉ là trang trí bề ngoài và không ảnh hưởng đến việc mã có thể thay đổi an toàn như thế nào.
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Thiết kế quyết định mức độ an toàn khi một chương trình có thể được sửa đổi.
Phương thức availableAvailable được hiển thị trả về 0 cho mảng hoàn toàn bị thiếu điểm.
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Sai: nó từ chối trường hợp này bằng IllegalArgumentException vì không có điểm khả dụng nào xác định trung bình.
Báo cáo hậu quả cho người dùng liên quan
- Một báo cáo về 90 nên nêu rõ rằng nó tính trung bình hai điểm số khả dụng trong ba bản ghi, với một kết quả bị thiếu bị loại bỏ. Chỉ báo cáo 90 sẽ che giấu thông tin mà người đọc cần để so sánh các kết quả.
- Xem xét những ai có thể bị ảnh hưởng bởi dữ liệu và chính sách. Một phép tính nhất quán vẫn có thể xử lý không phù hợp các loại vắng mặt khác nhau; hãy thử nghiệm các yêu cầu đã thỏa thuận và đảm bảo kết quả dễ hiểu đối với người dùng.
Tính mô-đun hóa làm cho chính sách dễ kiểm tra và thử nghiệm hơn; nhưng nó không làm cho chính sách đó công bằng hay thích hợp. Các giá trị trung bình 60 và 90 sử dụng các mẫu số khác nhau. Hãy chọn và công khai quy tắc thay vì âm thầm chọn bất kỳ kết quả nào trông tốt hơn.
Thiết kế tốt hay kém?
Các lựa chọn thiết kế có hậu quả thực tế. Sắp xếp từng kết quả.
Truyền một thay đổi chính sách qua thiết kế
- Nếu yêu cầu được phép thay đổi để tính một nhiệm vụ chưa thực hiện là không, hãy cập nhật mẫu số, các ví dụ liên quan, các kiểm tra và văn bản báo cáo. Tái sử dụng một phương thức chỉ hữu ích khi hợp đồng của nó khớp với nhiệm vụ mới.
- Đánh giá khả năng kiểm thử, tính đúng đắn và sự hiểu biết của người dùng riêng biệt. Các ranh giới rõ ràng giúp giảm bớt một số rủi ro thay đổi, nhưng người gọi và các giả định chung vẫn phải được kiểm tra khi hợp đồng của một phương thức thay đổi.
Thiết kế chương trình ảnh hưởng đến khả năng bảo trì và con người. Tách biệt trách nhiệm để hành vi có thể được kiểm tra, xác định chính sách dữ liệu thiếu, kiểm thử các trường hợp biên của nó và công bố mẫu số. Phép toán chính xác và cấu trúc gọn gàng không tự thân thiết lập ra một chính sách phù hợp.
Match the change to the issue it addresses.
Độ khó 2/5 · 140 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
A modular structure enables checking but cannot choose the right policy by itself.