Nie zgadzam się z bardziej doświadczonym programistą w tej sprawie i zastanawiam się, co sądzą o tym inni; nasze środowisko to Java, EJB 3, usługi itp.
Kod, który napisałem, wywołuje usługę w celu zdobywania rzeczy i tworzenia rzeczy. Problem, na który natrafiłem, polegał na tym, że otrzymałem wyjątki zerowego wskaźnika, które nie miały sensu. Na przykład, kiedy poproszę usługę o utworzenie obiektu, otrzymuję wartość zerową; gdy próbuję wyszukać obiekt o znanym ważnym identyfikatorze, zwracam wartość null. Spędziłem trochę czasu próbując dowiedzieć się, co było nie tak w moim kodzie; ponieważ jestem mniej doświadczony, zwykle zakładam, że zrobiłem coś złego, ale okazuje się, że przyczyną zerowych zwrotów było bezpieczeństwo. Jeśli użytkownik główny korzystający z mojej usługi nie miał odpowiednich uprawnień do usługi docelowej, wówczas po prostu zwraca wartość null. Większość innych usług tutaj również nie jest dobrze udokumentowana, więc najwyraźniej jest to po prostu coś, co musisz wiedzieć.
Jest to dość mylące, ponieważ programista pisze kod, który wchodzi w interakcję z usługą. Byłoby dla mnie o wiele bardziej sensowne, gdyby usługa stanowiła wyjątek, który powiedziałby mi, że użytkownik nie ma odpowiednich uprawnień do załadowania lub utworzenia tej rzeczy; Od razu wiedziałbym, dlaczego moja usługa nie działa zgodnie z oczekiwaniami.
Bardziej doświadczony programista, który napisał usługę, argumentował, że żądanie danych nie jest warunkiem błędu, a wyjątki powinny być zgłaszane tylko w przypadku błędu, a nie wtedy, gdy użytkownik nie ma dostępu do danych. Dane te są często sprawdzane w interfejsie GUI, a dla tych użytkowników bez odpowiednich uprawnień, te rzeczy po prostu „nie istnieją”. Krótko mówiąc: pytanie nie jest złe, stąd nie ma wyjątku. Metody Get zwracają wartość null, ponieważ dla tych użytkowników rzeczy „nie istnieją”. Metody tworzenia zwracają wartość null, gdy użytkownik nie mógł utworzyć tej rzeczy.
Czy to jest normalna i / lub dobra praktyka? Wolę używać wyjątków, ponieważ znacznie łatwiej jest mi wiedzieć, co się dzieje. Wolałbym więc na przykład zgłosić wyjątek NotFoundException, jeśli poprosiłeś o obiekt z niepoprawnym identyfikatorem, zamiast zwracać wartość null.