Я немного не согласен с более опытным разработчиком по этому вопросу, и мне интересно, что другие думают об этом; наша среда - Java, EJB 3, сервисы и т. д.
Код, который я написал, вызывает службу для получения и создания вещей. Проблема, с которой я столкнулся, заключалась в том, что я получил исключения с нулевым указателем, которые не имели смысла. Например, когда я прошу службу создать объект, я получаю нулевое значение; когда я пытаюсь найти объект с известным действительным идентификатором, я получаю нулевое значение. Я потратил некоторое время, пытаясь выяснить, что не так в моем коде; поскольку я менее опытен, я обычно предполагаю, что сделал что-то не так, но оказывается, что причиной нулевого возврата была безопасность. Если у пользователя, использующего мой сервис, не было необходимых прав для целевой службы, он просто возвращает ноль. Большинство других сервисов здесь не очень хорошо документированы, поэтому, очевидно, это то, что вы должны знать.
Это довольно запутанно, поскольку разработчик пишет код, который взаимодействует со службой. Для меня было бы гораздо больше смысла, если бы сервис предоставил исключение, которое сообщило бы мне, что у пользователя нет необходимых разрешений для загрузки этой вещи или ее создания; Тогда я бы сразу узнал, почему мой сервис не работает должным образом.
Более опытный разработчик, написавший сервис, утверждал, что запрос данных не является условием ошибки и что исключения должны создаваться только в состоянии ошибки, а не тогда, когда пользователь не имеет доступа к данным. Эти данные часто ищутся в графическом интерфейсе, и для тех пользователей, у которых нет необходимых разрешений, эти вещи просто «не существуют». Итак, вкратце: спрашивать не неправильно, следовательно, не исключение. Методы get возвращают ноль, потому что этим пользователям эти вещи «не существуют». Методы создания возвращают ноль, когда пользователю не разрешено создавать эту вещь.
Это нормальная и / или хорошая практика? Я предпочитаю использовать исключения, потому что мне гораздо легче узнать, что происходит. Так что я бы, например, также предпочел бы генерировать исключение NotFoundException, если вы запрашивали объект с недопустимым идентификатором, а не возвращали ноль.