Đầu tiên tôi phải khẳng định rằng duplicate code và multiple purposes cả hai đều là những cách tiếp cận nên tránh trong lập trình, nhưng trong những tình huống cụ thể, bạn không có sự lựa chọn và bắt buộc chọn một trong hai, nên chọn cái nào?
Giả định rằng bạn đã biết về các nguyên tắc (luôn đúng và không cần chứng minh) trong lập trình như: SOLID; DRY và KISS. Duplicate code và Multiple purposes là 2 cách tiếp cận để giải quyết vấn đề mang tính tạm bợ và đều vi phạm các nguyên tắc về SOLID; DRY và KISS.
Duplicate code: một khối mã (code fragment) bị lặp đi lặp lại nhiều lần, điều này vi phạm nguyên tắc DRY (Don’t repeat yourself)
Multiple purposes: một hàm/phương thức/class làm nhiều nhiệm vụ hơn những gì nó nên làm, vi phạm nguyên tắc KISS (Keep It Simple Stupid) và Single responsibility principle trong SOLID)
Như đã đề cập ban đầu, nên chọn vi phạm nguyên tắc nào hơn nếu bắt buộc phải phi phạm các nguyên tắc đã nêu ở trên.
Khi một yêu cầu về tính năng được bổ sung