Spróbuję dowiedzieć się, dlaczego MKOl może nie być dobry z mojej perspektywy.
Podobnie jak w przypadku wszystkich innych elementów, kontener IOC (lub, jak ująłby to Einstein, I = OC ^ 2) to koncepcja, którą musisz sam zdecydować, czy jej potrzebujesz, czy nie w swoim kodzie. Ostatnie oburzenie mody o MKOl to tylko moda. Nie zakochuj się w modzie, to pierwsze. Istnieje mnóstwo koncepcji, które można zaimplementować w kodzie. Przede wszystkim używam wstrzykiwania zależności, odkąd zacząłem programować i sam nauczyłem się tego terminu, kiedy został spopularyzowany pod tą nazwą. Kontrola zależności jest bardzo starym tematem i do tej pory poruszano ją trylionami sposobów, w zależności od tego, co było oddzielone od czego. Oddzielenie wszystkiego od wszystkiego to nonsens. Problem z kontenerem IOC polega na tym, że próbuje być tak przydatny jak Entity Framework lub NHibernate. Podczas gdy pisanie odwzorowania obiektowo-relacyjnego jest po prostu koniecznością, gdy tylko trzeba połączyć dowolną bazę danych z systemem, kontener IOC nie zawsze jest konieczny. Więc kiedy kontener IOC jest przydatny:
- Gdy masz sytuację z wieloma zależnościami, które chcesz zorganizować
- Gdy nie zależy Ci na połączeniu kodu z produktem innej firmy
- Gdy Twoi programiści chcą dowiedzieć się, jak pracować z nowym narzędziem
1: Nie jest tak często, że masz tak wiele zależności w kodzie, albo że znasz je na wczesnym etapie projektowania. Myślenie abstrakcyjne jest przydatne, gdy należy myśleć abstrakcyjnie.
2: Łączenie kodu z kodem innej firmy stanowi problem HuGe. Pracowałem z kodem, który ma ponad 10 lat i podążałem w tym czasie za fantazyjnymi i zaawansowanymi koncepcjami ATL, COM, COM + i tak dalej. Teraz nie można nic zrobić z tym kodem. Mówię o tym, że zaawansowana koncepcja daje wyraźną przewagę, ale na dłuższą metę jest ona anulowana z samą przestarzałą przewagą. Po prostu wszystko to uczyniło droższym.
3: Tworzenie oprogramowania jest wystarczająco trudne. Możesz rozszerzyć go na nierozpoznawalne poziomy, jeśli pozwolisz, aby jakiś zaawansowany pomysł pojawił się w kodzie. Wystąpił problem z IOC2. Chociaż jest to zależność odsprzęgająca, oddziela także przepływ logiczny. Wyobraź sobie, że znalazłeś błąd i musisz zrobić sobie przerwę, aby zbadać sytuację. IOC2, jak każda inna zaawansowana koncepcja, utrudnia to. Naprawienie błędu w ramach koncepcji jest trudniejsze niż naprawienie błędu w prostszym kodzie, ponieważ po naprawieniu błędu należy ponownie zastosować się do koncepcji. (Aby dać przykład, C ++ .NET ciągle zmienia składnię tak bardzo, że musisz się zastanowić, zanim zmienisz wersję starszej wersji .NET.) Więc w czym problem z IOC? Problem polega na rozwiązywaniu zależności. Logika rozwiązywania jest zwykle ukryta w samym IOC2, napisane może w niecodzienny sposób, którego musisz się nauczyć i utrzymać. Czy Twój produkt innej firmy będzie dostępny za 5 lat? Microsoft nie był.
Syndrom „Wiemy jak” jest napisany wszędzie w odniesieniu do IOC2. Jest to podobne do testowania automatyzacji. Fantazyjny termin i idealne rozwiązanie na pierwszy rzut oka, wystarczy, że wszystkie testy wykonasz w nocy i zobaczysz wyniki rano. Naprawdę bolesne jest wyjaśnianie firmie po firmie, co tak naprawdę oznaczają testy automatyczne. Zautomatyzowane testowanie zdecydowanie nie jest szybkim sposobem na zmniejszenie liczby błędów, które możesz wprowadzić z dnia na dzień, aby podnieść jakość swojego produktu. Ale moda sprawia, że to pojęcie jest denerwująco dominujące. IOC2 cierpi na ten sam zespół. Uważa się, że należy go wdrożyć, aby oprogramowanie było dobre. KAŻDY ostatni wywiad Zostałem zapytany, czy wdrażam IOC2 i automatyzację. To znak mody: firma miała część kodu napisanego w MFC, której nie porzuci.
Musisz nauczyć się IOC2 jak każdej innej koncepcji oprogramowania. Decyzja, czy należy użyć IOC2, należy do zespołu i firmy. Jednak przed podjęciem decyzji należy podać przynajmniej WSZYSTKIE powyższe argumenty. Tylko jeśli widzisz, że strona plus przewyższa stronę negatywną, możesz podjąć pozytywną decyzję.
Nie ma nic złego w IOC2, z wyjątkiem tego, że rozwiązuje tylko problemy, które rozwiązuje i wprowadza problemy, które wprowadza. Nic więcej. Jednak przeciwstawianie się modzie jest bardzo trudne, mają usta potu, wyznawców wszystkiego. Dziwne, jak nikogo nie ma, kiedy ujawnia się problem z ich fantazją. Broniono wielu koncepcji w branży oprogramowania, ponieważ generują zysk, powstają książki, odbywają się konferencje, powstają nowe produkty. To moda, zwykle krótkotrwała. Gdy tylko ludzie znajdą coś innego, porzucają to całkowicie. IOC2 jest użyteczny, ale wykazuje te same znaki, co wiele innych zaginionych koncepcji, które widziałem. Nie wiem, czy to przetrwa. Nie ma na to żadnej reguły. Myślisz, że jeśli będzie przydatny, przetrwa. Nie, nie idzie tak. Wystarczy jedna duża, bogata firma, a koncepcja może umrzeć w ciągu kilku tygodni. Zobaczymy. NHibernate przeżył, EF zajął drugie miejsce. Może IOC2 też przetrwa. Nie zapominaj, że większość pojęć w tworzeniu oprogramowania nie jest niczym szczególnym, są one bardzo logiczne, proste i oczywiste, a czasem trudniej jest zapamiętać obecną konwencję nazewnictwa niż zrozumieć samą koncepcję. Czy znajomość IOC2 czyni programistę lepszym programistą? Nie, ponieważ jeśli programista nie byłby w stanie wymyślić koncepcji podobnej do IOC2, wówczas trudno będzie mu zrozumieć, który problem rozwiązuje IOC2, korzystanie z niego będzie wyglądać sztucznie i może zacząć z niego korzystać ze względu na polityczną poprawność. Nie zapominaj, że większość pojęć w tworzeniu oprogramowania nie jest niczym szczególnym, są one bardzo logiczne, proste i oczywiste, a czasem trudniej jest zapamiętać obecną konwencję nazewnictwa niż zrozumieć samą koncepcję. Czy znajomość IOC2 czyni programistę lepszym programistą? Nie, ponieważ jeśli programista nie byłby w stanie wymyślić koncepcji podobnej do IOC2, wówczas trudno będzie mu zrozumieć, który problem rozwiązuje IOC2, korzystanie z niego będzie wyglądać sztucznie i może zacząć z niego korzystać ze względu na polityczną poprawność. Nie zapominaj, że większość pojęć w tworzeniu oprogramowania nie jest niczym szczególnym, są one bardzo logiczne, proste i oczywiste, a czasem trudniej jest zapamiętać obecną konwencję nazewnictwa niż zrozumieć samą koncepcję. Czy znajomość IOC2 czyni programistę lepszym programistą? Nie, ponieważ jeśli programista nie byłby w stanie wymyślić koncepcji podobnej do IOC2, wówczas trudno będzie mu zrozumieć, który problem rozwiązuje IOC2, korzystanie z niego będzie wyglądać sztucznie i może zacząć z niego korzystać ze względu na polityczną poprawność. Czy znajomość IOC2 czyni programistę lepszym programistą? Nie, ponieważ jeśli programista nie byłby w stanie wymyślić koncepcji podobnej do IOC2, wówczas trudno będzie mu zrozumieć, który problem rozwiązuje IOC2, korzystanie z niego będzie wyglądać sztucznie i może zacząć z niego korzystać ze względu na polityczną poprawność. Czy znajomość IOC2 czyni programistę lepszym programistą? Nie, ponieważ jeśli programista nie byłby w stanie wymyślić koncepcji podobnej do IOC2, wówczas trudno będzie mu zrozumieć, który problem rozwiązuje IOC2, korzystanie z niego będzie wyglądać sztucznie i może zacząć z niego korzystać ze względu na polityczną poprawność.