Java повреждение API

Для навязчивой конфигурации vim посмотрите на https://github.com/jmcantrell/dotfiles-vim

.

6
задан linuxbuild 26 March 2011 в 03:07
поделиться

6 ответов

Да, вы нарушаете контракт интерфейса, генерируя исключение, когда C1 не возникает.

Как показывает практика, чем расплывчатее контракт интерфейса, тем легче его не сломать :) Если интерфейс не определен в терминах явного C1, а в более общих терминах, это дает намного больше гибкости.

7
ответ дан 8 December 2019 в 13:48
поделиться

Это во многом зависит от того, что такое c2. Находится ли это в логических рамках ранее существовавшего контракта? Если это так, вы выполняете контракт, создавая MyException. Если нет, то, возможно, вам нужно сгенерировать новый тип исключения.

Я должен отметить, что я не большой поклонник проверенных исключений. В конечном счете, принуждение кого-то работать с исключением не обязательно делает его код лучше или безопаснее (на самом деле это может иметь противоположный эффект, поскольку они могут небрежно проглатывать ложные исключения).

1
ответ дан 8 December 2019 в 13:48
поделиться

Я бы сказал «нет», никаких сбоев API, если MyException не является RuntimeException. Тогда это так.

В любом случае, я бы создал подкласс MyException для условия C2

И оба условия C1 и C2 должны быть «исключительными». ИМХО, я бы не стал генерировать исключения

1
ответ дан 8 December 2019 в 13:48
поделиться

Это поломка. Не имеет значения, обеспечивается ли API-интерфейс языковыми конструкциями или просто документирован.

Вызывает ли этот сбой проблему для клиентского кода - это другой вопрос. Возможно, вы устраняете дефект и вам нужно закрыть корпус C2 таким образом, чтобы исправить это. В связи с этим разработчики клиентского кода могут быть счастливы, что вы внесли это изменение (при условии, что они в настоящее время не работают над устранением дефекта таким образом, чтобы это могло сломаться при изменении!)

1
ответ дан 8 December 2019 в 13:48
поделиться

Я считаю, что вы не должны изменять контракт, определенный API в документации. Если вам нужно новое поведение, вы должны либо а.) Создать новый метод, который может быть вызван клиентом, отражающий это новое поведение, или б.) Обсудить с клиентом необходимость изменения и сообщить ему об этом.

действительно может идти обоими путями, это зависит от вас и ваших клиентов относительно вашего подхода.

6
ответ дан 8 December 2019 в 13:48
поделиться

Я думаю, проблема в том, что вы сделали частью своего интерфейса конкретные условия реализации. Если бы условие «C1» было лишь частью вашей реализации, вы могли бы просто создать новую реализацию, которая генерирует исключение для «C1» или «C2», не нарушая интерфейса.

1
ответ дан 8 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: