[Buổi 31][Củng cố OOP nâng cao][ADV] Bài 1: Plugin Metric Pipeline có fallback
Plugin Metric Pipeline có fallback
Bối cảnh
Một pipeline đánh giá record (id,a,b) chạy qua một plugin metric được chọn khi runtime:
SUM: score=a+b.RATIO: score=a/b; nếu b=0 némruntime_error.DIFF: score=abs(a-b).WEIGHTED: score=2a+3b.
Mỗi plugin kế thừa abstract MetricPlugin với score(a,b) và name(). Pipeline cần:
- Với từng record, chạy plugin; nếu plugin ném lỗi thì dùng fallback score=0 và tăng
fallbackCount. - Lưu kết quả bằng generic
Result<T>gồm id, score, pluginName. - Xếp result theo score giảm; tie ID tăng.
- In top k
id:score, tổng score và fallbackCount.
Bài Hard mô phỏng kiến trúc plugin: core pipeline không đổi khi thêm metric mới, lỗi của một record không dừng batch, và generic result object tách representation kết quả khỏi loại plugin. Đây là bài tổng hợp cuối Module 08 trước Final Design Review.
B31 là phần tích hợp, nên bài toán cần thể hiện trách nhiệm giữa nhiều abstraction thay vì chỉ ghép cú pháp. Polymorphism chịu trách nhiệm thay behavior; template chịu trách nhiệm reuse theo type; exception chịu trách nhiệm recovery khi input/state bất hợp lệ. Core workflow phải tiếp tục giữ invariant dù một record hoặc command bị lỗi.
B31 là phần tích hợp, nên bài toán cần thể hiện trách nhiệm giữa nhiều abstraction thay vì chỉ ghép cú pháp. Polymorphism chịu trách nhiệm thay behavior; template chịu trách nhiệm reuse theo type; exception chịu trách nhiệm recovery khi input/state bất hợp lệ. Core workflow phải tiếp tục giữ invariant dù một record hoặc command bị lỗi.
Yêu cầu
- Abstract MetricPlugin + 4 derived.
- Runtime plugin chọn một lần cho toàn batch.
- Exception per record có fallback.
- Template Result<double>.
- TOP k + TOTAL + FALLBACKS.
Input
Dòng 1 plugin n k; n dòng id a b.
Output
Ba dòng TOP, TOTAL, FALLBACKS.
Ràng buộc
1≤n≤5000, a,b trong |1e9|.
Ví dụ 1
Input
RATIO 4 3
A 10 2
B 5 0
C 9 3
D -4 2
Output
TOP A:5.00 C:3.00 B:0.00
TOTAL 6.00
FALLBACKS 1
Giải thích
RATIO: A=5, B lỗi b=0 nên fallback0, C=3, D=-2. Ranking A5,C3,B0,D-2; TOP3 A,C,B. Total6, fallbackCount1.
Mẫu này kiểm tra pipeline ở mức tích hợp: input đi qua validation, chọn runtime behavior, cập nhật aggregate rồi mới sinh output. Nếu một bước thất bại, fallback/ERROR phải đúng contract và các summary phía sau không được tính nhầm dữ liệu lỗi. Vì vậy trace mẫu chính là kiểm tra invariant xuyên suốt workflow.
Ví dụ 2
Input
SUM 3 5
A 1 2
B 3 4
C -1 1
Output
TOP B:7.00 A:3.00 C:0.00
TOTAL 10.00
FALLBACKS 0
Giải thích
SUM scores A3,B7,C0. k5 nhưng chỉ có3 record, ranking B7,A3,C0. Không plugin error nên FALLBACKS0 và total10.
Mẫu này kiểm tra pipeline ở mức tích hợp: input đi qua validation, chọn runtime behavior, cập nhật aggregate rồi mới sinh output. Nếu một bước thất bại, fallback/ERROR phải đúng contract và các summary phía sau không được tính nhầm dữ liệu lỗi. Vì vậy trace mẫu chính là kiểm tra invariant xuyên suốt workflow.
Thông tin học tập
- Module: M08
- Buổi: B31
- Loại bài: ADVANCED
- Độ khó: Hard
- Concepts: plugin polymorphism, template result, exceptions, ranking, extensible pipeline
- Giới hạn kiến thức: B01-B31
- Time limit: 2 second(s)
- Memory limit: 256 MB
- Point: 100
Comments