Pewien aspirujący aktor dostał się na przesłuchanie do wielkiej sztuki. Jest podekscytowany, że może wziąć w nim udział. Przygotowywał się do tej chwili przez całe życie. Pomyślał: “Mój amerykański sen w końcu się ziści!”. 🌟 Ubrał się w najlepszą koszulę, wyszczotkował zęby i wyszedł. Oczywiście na miejscu był przed czasem, gdzie zastał ogromną ilość innych pretendentów do głównej roli. Uznał, że niepotrzebnie się trudnili, bo to na pewno on dostanie tę posadę. W końcu przyszła pora na niego. Stanął na wielkiej scenie i dał z siebie 110%! Wstrzymując oddech czekał na werdykt. Usłyszał jednak takie słowa: “Niech Pan do nas nie dzwoni. To my zadzwonimy do Pana.” ☎️
Przedstawiając tą krótką historię chciałem zaprezentować zasadę Hollywood, która świetnie odzwierciedla ideę Inversion of Control (IoC), czyli Odwrócenia Zależności w programowaniu.
Klasyczne podejście
W klasycznym podejściu kodowania to programista ma całkowitą kontrolę nad przebiegiem programu. Wywołuje on w dowolnej kolejności zewnętrzne biblioteki jak mu się tylko podoba.
1
2
3
4
5
6
7
Scanner scan = new Scanner(System.in);
System.out.println("What’s your email?");
String email = scanner.nextLine();
System.out.println("What’s your phone number?");
String phoneNumber = scanner.nextLine();
validateEmail(email);
validatePhoneNumber(phoneNumber);
Odwrócenie zależności w akcji
Natomiast w przypadku IoC programista oddaje kontrolę nad swoim programem zewnętrznemu frameworkowi.
1
2
3
4
ValidatorFramework framework = new ValidatorFramework();
framework.setEmailToValidate(email);
framework.setPhoneNumberToValidate(phoneNumber);
framework.validate();
Widać tutaj znaczną różnicę. To framework waliduje za nas podane dane. My nawet nie musimy wiedzieć w jaki sposób on to dokładnie robi. Ten sposób projektowania został wykorzystany do stworzenia wzorca projektowego Metoda szablonowa. Naszym zadaniem, w tym wzorcu, jest napisanie własnej logiki w implementowanych metodach, a ich wywołaniem zajmuje się konkretna metoda w klasie abstrakcyjnej.
Każdy kij ma dwa końce
Jak zwykle należy mieć na uwadze, aby używać każdego dobrodziejstwa z umiarem. Gdy będziemy zbyt często korzystać z IoC to efekt może być przeciwny w stosunku do tego co zakładaliśmy. Kod może stać się bardziej zagmatwany i cięższy w utrzymaniu. Warto przytoczyć tutaj wypowiedź Uncle Bob’a:
“IoC is a good idea. Like all good ideas, it should be used with moderation.”
Uncle Bob Martin
W ten sposób przedstawia się jeden z paradygmatów programowania będącym narzędziem wykorzystywanym w takich rozwiązaniach jak Spring. W następnym artykule chciałbym przybliżyć ideę Dependency Injection, które bywa mylone z Inversion Of Control. Zgadzasz się z takim rozumieniem tego zagadnienia? Zostaw komentarz bądź wyślij do mnie wiadomość mailową. Czekam!