Hãy để tôi mở đầu điều này bằng cách nói rằng đây không phải là mã của tôi cũng không phải mã của đồng nghiệp. Nhiều năm trước, khi công ty của chúng tôi nhỏ hơn, chúng tôi đã có một số dự án chúng tôi cần thực hiện mà chúng tôi không có năng lực, vì vậy họ đã thuê ngoài. Bây giờ, tôi không có gì chống lại việc thuê ngoài hoặc các nhà thầu nói chung, nhưng cơ sở mã họ sản xuất là một khối WTF. Điều đó đang được nói, nó (hầu hết) hoạt động, vì vậy tôi cho rằng nó nằm trong top 10% các dự án thuê ngoài mà tôi đã thấy.
Khi công ty của chúng tôi phát triển, chúng tôi đã cố gắng phát triển hơn nữa. Dự án đặc biệt này đã nằm trong lòng tôi vì vậy tôi đã trải qua nó, dọn dẹp, thêm các bài kiểm tra, v.v.
Có một mô hình tôi thấy lặp đi lặp lại rất nhiều và dường như rất kinh khủng đến nỗi tôi tự hỏi liệu có thể có một lý do và tôi chỉ không nhìn thấy nó. Mẫu này là một đối tượng không có các phương thức hoặc thành viên công khai, chỉ là một hàm tạo công khai thực hiện tất cả công việc của đối tượng.
Ví dụ: (mã là trong Java, nếu điều đó quan trọng, nhưng tôi hy vọng đây sẽ là một câu hỏi tổng quát hơn):
public class Foo {
private int bar;
private String baz;
public Foo(File f) {
execute(f);
}
private void execute(File f) {
// FTP the file to some hardcoded location,
// or parse the file and commit to the database, or whatever
}
}
Nếu bạn đang tự hỏi, loại mã này thường được gọi theo cách sau:
for(File f : someListOfFiles) {
new Foo(f);
}
Bây giờ, tôi đã được dạy từ lâu rằng các đối tượng khởi tạo trong một vòng lặp thường là một ý tưởng tồi và các nhà xây dựng nên thực hiện tối thiểu công việc. Nhìn vào mã này, có vẻ như sẽ tốt hơn nếu bỏ hàm tạo và tạo execute
một phương thức tĩnh công khai.
Tôi đã hỏi nhà thầu tại sao nó được thực hiện theo cách này và câu trả lời tôi nhận được là "Chúng tôi có thể thay đổi nếu bạn muốn". Điều đó không thực sự hữu ích.
Dù sao, có bao giờ một lý do để làm một cái gì đó như thế này, trong bất kỳ ngôn ngữ lập trình, hoặc đây chỉ là một đệ trình khác cho Daily WTF?
public static void main(string[] args)
và đã nghe về các vật thể, sau đó cố gắng trộn chúng lại với nhau.