Позвольте мне предвосхитить это, сказав, что это не мой код или код моих коллег. Несколько лет назад, когда наша компания была меньше, у нас было несколько проектов, в которых мы нуждались, которых у нас не было, поэтому они были переданы на аутсорсинг. Теперь я ничего не имею против аутсорсинга или подрядчиков в целом, но кодовая база, которую они создали, - это масса 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)
объектах и слышали о них, а затем пытались их объединить.