Дозвольте передмовити це, сказавши, що це не мій код, ні код моїх колег. Роки тому, коли нашої компанії було менше, у нас були якісь проекти, які нам потрібно було зробити, щоб ми не мали потенціалу, тому вони були передані в аутсорсинг. Зараз я нічого не маю проти аутсорсингу або підрядників взагалі, але створена ними база коду - це маса WTF. За словами, це (в основному) спрацьовує, тож я припускаю, що він входить в топ-10% проектів, котрі я бачив.
По мірі того, як наша компанія зростала, ми намагалися брати більше уваги на розвиток. Цей конкретний проект приземлився в мене на колінах, тому я перебирав його, прибирав його, додавав тести тощо тощо.
Є одна картина, яку я бачу повторюється багато, і це здається настільки жахливо жахливим, що я задумався, чи можливо є причина, і я просто не бачу її. Шаблон - це об'єкт без публічних методів або членів, просто публічний конструктор, який виконує всю роботу об'єкта.
Наприклад, (код є в Java, якщо це має значення, але я сподіваюся, що це буде більш загальне питання):
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
}
}
Якщо вам цікаво, цей тип коду часто називають таким чином:
for(File f : someListOfFiles) {
new Foo(f);
}
Зараз мене давно вчили, що екземплярні об'єкти в циклі, як правило, погана ідея, і що конструктори повинні виконати мінімум роботи. Якщо дивитися на цей код, схоже, було б краще відмовитись від конструктора та опублікувати execute
статичний метод.
Я запитав підрядника, чому це було зроблено таким чином, і я отримав відповідь: "Ми можемо змінити це, якщо захочете". Що було не дуже корисно.
У будь-якому випадку, коли-небудь є причина робити щось подібне на будь-якій мові програмування, чи це лише чергове подання до Daily WTF?
public static void main(string[] args)
і які чули про об'єкти, а потім намагалися їх збити.