Вы можете объявить, что ваш метод (works()
в данном случае) throws
исключение, даже если он не выбрасывает его.
Причина в том, что это позволило бы подклассам, переопределяющим ваш метод, генерировать это исключение (или любой подкласс этого исключения).
С другой стороны, в блоке try-catch, если вы попытаетесь перехватить исключение, которое не может быть сгенерировано блоком try, ваш блок catch станет мертвым кодом (т. Е. Кодом, который никогда не будет достигнут), и компилятором не позволяет этого.
Как далеко мой опыт программирования, затронут, если я собираюсь существенно изменить что-то, что предотвратит прошлые входящие данные, которые будут использоваться правильно, я должен создать уровень абстракции для старых данных, где это может быть преобразовано для использования в новом формате.
В основном я установил "улучшенный" путь по умолчанию и удостоверяюсь через преобразователь, он может считать данные старого формата, но сохранить или хранить данные как новый формат.
Я думаю, что большой вещью здесь является тест, тест, тест. Назад совместимость не должна препятствовать вперед прогрессу.
Это - просто мой 2c
Разработка разделения в два ответвления, то, которое поддерживает назад совместимость и один для новой главной версии, где Вы проясняете, что назад совместимость повреждается.
Вы могли alawys искать инновационные способы поддержать назад совместимость.
Критический вопрос, который необходимо задать, состоит в том, хотят ли клиенты/нуждаются это "улучшение", даже если Вы чувствуете его, поскольку Ваши клиенты не могли бы. После того как определенный способ сделать вещи был установлен, изменив рабочий процесс, очень "дорогая" операция. В зависимости от компьютера savyness Ваших пользователей некоторым могло бы потребоваться долгое время для корректировки к изменению в UI.
Если Вы имеете дело с клиентскими инновациями для пользы инноваций, не всегда хорошая вещь как забава, как это могло бы быть, чтобы Вы разработали эти улучшения.