Я недавно видел код, похожий на тот, что описан ниже.
public void someMethod() {
Lecture lect = createLecture();
...
lect.getLectureSeries().delete();
}
public Lecture createLecture() {
LectureSeries series = new Series();
Lecture lect = new Lecture(series);
...
return lect;
}
Дело в том, что какой-то объект (в данном случае LectureSeries), который необходимо удалить в конце вызова someMethod (), фактически создается при вызове другого метода. Я пытаюсь объяснить, почему он должен быть создан в той же области, в которой он будет удален. т.е.
public void someMethod() {
LectureSeries series = new Series();
Lecture lect = createLecture(series);
...
series.delete();
}
public Lecture createLecture(LectureSeries series) {
Lecture lect = new Lecture(series);
...
return lect;
}
Исходный код вызвал некоторые сложности, приводящие в порядок вещи, когда что-то не работает, так что, надеюсь, преимущества будут очевидны, но есть ли у кого-нибудь идеи, как я могу объяснить более общий принцип, лежащий в основе этого рефакторинга? или кто-нибудь хочет объяснить мне, почему я не прав?
== Редактировать ==
Рассматриваемый случай был тестовым методом, поэтому очистка всего, что было создано во время выполнения теста, было важно. Тем не менее, я думаю, что нежелательный побочный эффект LectureSeries, созданного в результате вызова createLecture (), в большинстве случаев все же стоит избегать.