Próbuję zrozumieć użycie ram IoC takich jak StructureMap, ale nie mogę przestać myśleć, że te "wzorce projektowe" są po prostu nonsensem, czyniąc kod bardziej złożonym.Jakie jest zastosowanie ram IoC w aplikacji MVC?
Pozwól mi zacząć od przykładu, w którym myślę, że IoC jest nieco przydatny.
Myślę, że IoC może być przydatny, gdy mamy do czynienia z tworzeniem klas kontrolerów w środowisku MVC. W tym przypadku myślę o środowisku .NET MVC.
Zwykle instancja klasy kontrolera jest obsługiwana przez framework. Oznacza to, że naprawdę nie można przekazać żadnych parametrów do konstruktora klasy kontrolera. Tutaj może się przydać struktura IoC. Gdzieś w kontenerze IoC określasz, która klasa powinna być tworzona i przekazywana do kontrolerów constructor
, gdy klasa kontrolera jest wywoływana.
Jest to również przydatne, gdy chcesz przetestować kontroler, ponieważ możesz kpić z obiektu, który jest do niego przekazywany.
Ale jak powiedziałem, mogę nieco zrozumieć, dlaczego ludzie chcą używać go do swoich klas kontrolerów. Ale nie poza tym. Stamtąd możesz po prostu zrobić normalny Dependency Injection.
Ale dlaczego nie po prostu zrobić to tak:
public class SomeController
{
public SomeController() : this(new SomeObj())
{
}
publiv SomeController(SomeObj obj)
{
this.obj = obj;
}
}
Teraz nie trzeba używać żadnych 3rd party IoC ram co oznacza również niższą krzywą uczenia się. Ponieważ nie musisz także wchodzić w specyfikacje tego schematu.
Nadal można kpić z obiektu podczas testów jednostkowych. Więc też nie ma problemu.
Jedyne, co możesz powiedzieć, to "ale teraz twoja klasa to ściśle sprzężona z SomeObj
". To prawda. Ale kogo to obchodzi!? To klasa kontrolerów! Nie wykorzystam tej klasy, nigdy ... Dlaczego więc, na litość, powinienem się martwić tym mocnym sprzężeniem ...? Mogę wyśmiać obiekt, który jest do niego przekazywany. To jedyna ważna rzecz.
Dlaczego więc powinienem zawracać sobie głowę używaniem IoC? Czy NAPRAWDĘ brakuje mi punktu ...? Dla mnie wzór IoC jest po prostu przereklamowanym wzorem. Dodawanie bardziej złożonych warstw do aplikacji ...
@HenkHolterman Niekoniecznie, gdy ktoś przychodzi z dobrym argumentem, dlaczego moje podejście jest złe iw jakiej sytuacji. Nie zamierzam z nikim dyskutować. Po prostu szukasz porady w tej sprawie. – w00
możliwy duplikat [Dlaczego potrzebuję kontenera IoC w przeciwieństwie do prostego kodu DI?] (Http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-mopposed -do-prostego-di-kodu) –