Tuy nhiên, miễn là bạn tin tưởng rằng Nguyên tắc thay thế của Liskov sẽ được tuân theo, thì tại sao bạn không cho phép nó bị ghi đè?
Ví dụ, vì tôi muốn triển khai bộ xương của thuật toán được sửa lỗi và chỉ cho phép các phần cụ thể được xác định lại bởi các lớp con. Điều này được biết đến rộng rãi là mẫu Phương thức mẫu (nhấn mạnh bên dưới bởi tôi):
Do đó, phương thức mẫu quản lý bức tranh lớn hơn về ngữ nghĩa tác vụ và các chi tiết triển khai được tinh chỉnh hơn về lựa chọn và trình tự các phương thức. Bức tranh lớn hơn này gọi các phương thức trừu tượng và không trừu tượng cho nhiệm vụ trong tầm tay. Các phương thức không trừu tượng được kiểm soát hoàn toàn bởi phương thức mẫu nhưng các phương thức trừu tượng, được triển khai trong các lớp con, cung cấp sức mạnh biểu cảm và mức độ tự do của mẫu. Một số hoặc tất cả các phương thức trừu tượng có thể được chuyên môn hóa trong một lớp con, cho phép người viết của lớp con cung cấp hành vi cụ thể với các sửa đổi tối thiểu cho ngữ nghĩa lớn hơn. Phương thức mẫu (không trừu tượng) vẫn không thay đổi trong mẫu này, đảm bảo rằng các phương thức không trừu tượng phụ và các phương thức trừu tượng được gọi trong chuỗi dự định ban đầu.
Cập nhật
Một số ví dụ cụ thể về các dự án tôi đang thực hiện:
- giao tiếp với hệ thống máy tính lớn kế thừa qua nhiều "màn hình" khác nhau. Mỗi màn hình có một loạt các trường, tên, vị trí và độ dài cố định, chứa các bit dữ liệu cụ thể. Một yêu cầu điền vào các trường nhất định với dữ liệu cụ thể. Một phản hồi trả về dữ liệu trong một hoặc nhiều lĩnh vực khác. Mỗi giao dịch tuân theo logic cơ bản giống nhau, nhưng các chi tiết khác nhau trên mỗi màn hình. Chúng tôi đã sử dụng Phương thức mẫu trong một số dự án khác nhau để triển khai khung cố định của logic xử lý màn hình, đồng thời cho phép các lớp con xác định chi tiết cụ thể của màn hình.
- xuất / nhập dữ liệu cấu hình trong các bảng DB đến / từ các tệp Excel. Một lần nữa, lược đồ cơ bản xử lý tệp Excel và chèn / cập nhật các bản ghi DB hoặc kết xuất các bản ghi vào Excel là giống nhau cho mỗi bảng, nhưng chi tiết của mỗi bảng là khác nhau. Vì vậy, Phương thức mẫu là một lựa chọn rất rõ ràng để loại bỏ trùng lặp mã và làm cho mã dễ hiểu và duy trì hơn.
- Tạo tài liệu PDF. Mỗi tài liệu có cùng cấu trúc, nhưng nội dung của chúng mỗi lần khác nhau, tùy thuộc vào rất nhiều yếu tố. Một lần nữa, Phương thức mẫu giúp dễ dàng tách bộ xương cố định của thuật toán tạo ra khỏi các chi tiết cụ thể, có thể thay đổi theo từng trường hợp. Trong thực tế. nó thậm chí còn áp dụng trên nhiều cấp độ ở đây, vì tài liệu bao gồm một số phần , mỗi phần bao gồm 0 hoặc nhiều trường . Phương pháp mẫu được áp dụng trên 3 cấp độ khác nhau ở đây.
Trong hai trường hợp đầu tiên, việc triển khai di sản ban đầu đã sử dụng Chiến lược , dẫn đến rất nhiều mã trùng lặp, tất nhiên qua nhiều năm đã có sự khác biệt tinh tế ở đây và ở đó, chứa rất nhiều lỗi trùng lặp hoặc hơi khác nhau và rất khó duy trì. Tái cấu trúc thành Phương thức mẫu (và một số cải tiến khác, như sử dụng chú thích Java) đã giảm kích thước mã khoảng 40-70%.
Đây chỉ là những ví dụ gần đây nhất trong tâm trí tôi. Tôi có thể trích dẫn nhiều trường hợp hơn từ hầu hết các dự án tôi đã làm cho đến nay.