Programowanie dotyczy pracy
Myślę, że najłatwiejszym sposobem na to jest zrozumienie postępu, jaki OOP poczyniło przez lata. Wszystko, co zostało zrobione w OOP (i większość paradygmatów programowania, jeśli o to chodzi) jest modelowane wokół konieczności wykonania pracy .
Za każdym razem, gdy wywoływana jest metoda, dzwoniący mówi: „Nie wiem, jak wykonać tę pracę, ale wiesz, jak to zrobić, więc zrób to dla mnie”.
Stwarza to trudność: co się dzieje, gdy wywoływana metoda ogólnie wie, jak wykonać pracę, ale nie zawsze? Potrzebowaliśmy sposobu komunikowania się „Chciałem ci pomóc, naprawdę to zrobiłem, ale po prostu nie mogę tego zrobić”.
Wczesną metodyką informowania o tym było po prostu zwrócenie wartości „śmieci”. Być może oczekujesz dodatniej liczby całkowitej, więc wywoływana metoda zwraca liczbę ujemną. Innym sposobem na osiągnięcie tego było ustawienie gdzieś wartości błędu. Niestety, oba sposoby doprowadziły do tego, że sprawdziłem kod koszerności „pozwól mi sprawdzić” tutaj, aby upewnić się, że wszystko jest koszerne . Gdy sprawy stają się coraz bardziej skomplikowane, ten system się rozpada.
Wyjątkowa analogia
Powiedzmy, że masz cieśli, hydraulika i elektryka. Chcesz hydraulika naprawić zlew, więc on na to patrzy. Nie jest to zbyt przydatne, jeśli mówi tylko tobie: „Przepraszam, nie mogę tego naprawić. Jest zepsuty”. Do diabła, jest jeszcze gorzej, jeśli spojrzy, odejdzie i wyśle ci list z informacją, że nie może tego naprawić. Teraz musisz sprawdzić swoją pocztę, zanim nawet zorientujesz się, że nie zrobił tego, co chciałeś.
Wolałbyś, żeby powiedział ci: „Słuchaj, nie mogłem tego naprawić, bo wygląda na to, że Twoja pompa nie działa”.
Dzięki tym informacjom możesz stwierdzić, że chcesz, aby elektryk spojrzał na problem. Być może elektryk znajdzie coś związanego z stolarzem i będziesz musiał go naprawić.
Cholera, możesz nawet nie wiedzieć, że potrzebujesz elektryka, możesz nie wiedzieć , kogo potrzebujesz. Jesteś tylko średnim kierownictwem w firmie zajmującej się naprawą domów, a twoja uwaga skupia się na hydraulice. Więc mówisz, że jesteś szefem o problemie, a potem on każe elektrykowi go naprawić.
Oto co modelują wyjątki: złożone tryby awarii w odsprzężony sposób. Hydraulik nie musi wiedzieć o elektryku - nie musi nawet wiedzieć, że ktoś w łańcuchu może rozwiązać problem. Po prostu informuje o napotkanym problemie.
Więc ... anty-wzór?
Ok, więc zrozumienie punktu wyjątków jest pierwszym krokiem. Następnym jest zrozumienie, czym jest anty-wzór.
Aby zakwalifikować się jako anty-wzór, musi
- Rozwiąż problem
- mieć zdecydowanie negatywne konsekwencje
Pierwszy punkt jest łatwy do spełnienia - system działał, prawda?
Drugi punkt jest trudniejszy. Podstawowym powodem stosowania wyjątków jako normalnego przepływu sterowania jest zła sytuacja, ponieważ nie jest to ich celem. Każdy element funkcjonalności w programie powinien mieć stosunkowo jasny cel, a kooperacja z tym celem prowadzi do niepotrzebnego zamieszania.
Ale to nie jest ostateczna szkoda. To kiepski sposób na robienie rzeczy i dziwne, ale anty-wzór? Nie. Po prostu ... dziwne.