Tôi chắc chắn có một tên cho mô hình chống này ở đâu đó; tuy nhiên tôi không đủ quen thuộc với các tài liệu chống mẫu để biết nó.
Hãy xem xét kịch bản sau đây:
or0
là một hàm thành viên trong một lớp. Dù tốt hay xấu, nó phụ thuộc rất nhiều vào các biến thành viên của lớp. Lập trình viên A xuất hiện và cần chức năng như or0
nhưng thay vì gọi or0
, Lập trình viên A sao chép và đổi tên toàn bộ lớp. Tôi đoán rằng cô ấy không gọi or0
bởi vì, như tôi nói, nó phụ thuộc rất nhiều vào các biến thành viên cho chức năng của nó. Hoặc có thể cô ấy là một lập trình viên cơ sở và không biết cách gọi nó từ mã khác. Vì vậy, bây giờ chúng tôi đã có or0
và c0
(c cho bản sao). Tôi không thể hoàn toàn có lỗi với Lập trình viên A cho cách tiếp cận này - tất cả chúng ta đều có thời hạn chặt chẽ và chúng tôi hack mã để hoàn thành công việc.
Một số lập trình viên duy trì or0
để bây giờ là phiên bản orN
. c0
bây giờ là phiên bản cN
. Thật không may, hầu hết các lập trình viên duy trì lớp chứa or0
dường như hoàn toàn không biết c0
- đây là một trong những lập luận mạnh mẽ nhất mà tôi có thể nghĩ về sự khôn ngoan của nguyên tắc DRY. Và cũng có thể có sự duy trì độc lập của mã trong c
. Dù bằng cách nào nó cũng xuất hiện or0
và c0
được duy trì độc lập với nhau. Và, niềm vui và hạnh phúc, một lỗi xảy ra trong cN
đó không xảy ra orN
.
Vì vậy, tôi có một vài câu hỏi:
1.) Có một tên cho mô hình chống này? Tôi đã thấy điều này xảy ra thường xuyên. Tôi cảm thấy khó tin rằng đây không phải là một kiểu chống tên.
2.) Tôi có thể thấy một vài lựa chọn thay thế:
a.) Khắc phục orN
để lấy tham số chỉ định giá trị của tất cả các biến thành viên cần. Sau đó sửa đổi cN
để gọi orN
với tất cả các tham số cần thiết được truyền vào.
b.) Cố gắng sửa lỗi cổng thủ công từ orN
đến cN
. (Hãy nhớ rằng tôi không muốn làm điều này nhưng đó là một khả năng thực tế.)
c.) Recopy orN
to cN
--again, yuck nhưng tôi liệt kê nó để hoàn thiện.
d.) Cố gắng tìm ra nơi cN
bị hỏng và sau đó sửa chữa nó một cách độc lập orN
.
Thay thế một có vẻ như việc sửa chữa tốt nhất trong thời gian dài nhưng tôi nghi ngờ khách hàng sẽ cho tôi thực hiện nó. Không bao giờ thời gian hay tiền bạc để sửa chữa mọi thứ đúng nhưng luôn luôn có thời gian và tiền bạc để sửa chữa cùng một vấn đề 40 hoặc 50 lần, phải không?
Bất cứ ai có thể đề nghị các phương pháp khác tôi có thể không xem xét?