Я трохи не погоджуюся з більш досвідченим розробником з цього питання, і мені цікаво, що про це думають інші; наше середовище - Java, EJB 3, послуги тощо.
Код, який я написав, закликає службу отримати речі та створити речі. Проблема, з якою я зіткнувся, полягала в тому, що я отримав нульові виключення вказівника, які не мали сенсу. Наприклад, коли я прошу службу створити об'єкт, я повертаюсь до нуля; коли я намагаюся шукати об’єкт із відомим дійсним ідентифікатором, я повертаюсь до нуля. Я витратив деякий час, намагаючись з’ясувати, що не так у моєму коді; оскільки я менш досвідчений, я зазвичай припускаю, що я щось зробив не так, але виявляється, що причиною нульового повернення стала безпека. Якщо головний користувач, який користується моєю службою, не мав правильних дозволів для цільової служби, він просто повертає нуль. Більшість інших сервісів тут не дуже добре задокументовані, тому, мабуть, це просто те, що ви повинні знати.
Це досить заплутано як код написання розробника, який взаємодіє зі службою. Для мене було б набагато більше сенсу, якби служба мала виняток, який міг би сказати мені, що користувач не мав належних дозволів завантажувати цю річ або створювати її; Тоді я одразу б зрозумів, чому моя служба працює не так, як очікувалося.
Досвідченіший розробник, який написав сервіс, стверджував, що запит на дані не є умовою помилки, і що винятки слід кидати лише в стані помилки, а не тоді, коли користувач не має доступу до даних. Ці дані часто шукають у графічному інтерфейсі, і для тих користувачів, які не мають потрібних дозволів, ці речі просто "не існують". Отже, коротше: просити не неправильно, отже, не виняток. Отримати методи повернення нульовими, оскільки для тих користувачів ці речі "не існують". Методи створення створюють нульові значення, коли користувачеві не було дозволено створити цю річ.
Це нормальна та / або хороша практика? Я вважаю за краще використовувати винятки, бо мені набагато легше знати, що відбувається. Тому я, наприклад, також вважаю за краще кинути NotFoundException, якщо ви попросили об'єкт з недійсним ідентифікатором, а не повернути null.