Я добавил комментарий, что использование goto никогда не стоит того дерьма, которое вы возьмете за его использование (даже если это потрясающее, идеальное использование) - слишком много программистов учат что-то и никогда не могут оторваться от своего мозга.
Я не собирался публиковать ответ, но я не думаю, что он достаточно ясно прояснен, что все решение, которое вы подразумеваете, является просто неправильным.Я предполагал, что это просто для того, чтобы подчеркнуть вашу точку зрения, но это должно быть ясно: будьте очень осторожны с шаблонами в коде - это так же плохо, как копировать / вставлять код (на самом деле, это код копирования / вставки).
У вас должна быть просто коллекция объектов, каждый с кодом обновления и номером версии.
Вы просто перебираете эту коллекцию, пока номер версии <вашей целевой версии, и вызываете обновлениекод этого объекта для каждого.Таким образом, чтобы создать новый уровень обновления, вы просто создаете один объект «Обновление» и помещаете его в коллекцию. </p>
Ваша цепочка объектов обновления может быть перемещена как назад, так и вперед с добавлениемотмена и очень тривиальное добавление кода к контроллеру - то, что станет кошмаром для использования с примером кода.