Jakie jest zastosowanie struktury IoC w aplikacji MVC? [Zamknięte]

Próbuję zrozumieć użycie struktury IoC, takiej jak StructureMap, ale nie mogę przestać myśleć, że te „wzorce projektowe” są po prostu nonsensem, powodując, że kod jest bardziej złożony.

Zacznę od przykładu, w którym myślę, że IoC jest nieco przydatne.

Myślę, że IoC może być przydatne, gdy mamy do czynienia z tworzeniem instancji klas kontrolera w strukturze MVC. W tym przypadku myślę o frameworku .NET MVC.

Normalnie instancja klasy kontrolera jest obsługiwana przez framework. Oznacza to, że nie możesz przekazać żadnych parametrów konstruktorowi klasy kontrolera. W tym miejscu może przydać się struktura IoC. Gdzieś w kontenerze IoC określasz, która klasa powinna zostać utworzona i przekazana do kontrolerówconstructor kiedy wywoływana jest klasa kontrolera.

Jest to również przydatne, gdy chcesz przetestować kontroler, ponieważ możesz prześladować przekazywany obiekt.

Ale tak jak powiedziałem, mogę nieco zrozumieć, dlaczego ludzie chcą używać go do swoich klas kontrolerów. Ale nie poza tym. Od tego momentu możesz po prostu zrobić normalneZastrzyk uzależnienia.

Ale dlaczego nie zrobić tego po prostu tak:

public class SomeController
{
    public SomeController() : this( new SomeObj() ) 
    {
    }

    publiv SomeController(SomeObj obj)
    {
        this.obj = obj;
    }
}

Teraz nie musisz korzystać z żadnego zewnętrznego środowiska IoC, co oznacza również mniejszą krzywą uczenia się. Ponieważ nie musisz także wchodzić w specyfikacje tego szkieletu.

Nadal możesz drwić z obiektu w testach jednostkowych. Więc nie ma problemu.

Jedyne, co możesz powiedzieć, to „ale teraz twoja klasa jestściśle powiązane doSomeObj". To prawda. Ale kogo to obchodzi !? To klasa kontrolera! Nie zamierzam używać tej klasy, nigdy. Dlaczego więc, dlaczego, u licha, powinienem się martwić o to ciasne połączenie ...? przekazałem to. To jedyna ważna rzecz.

Dlaczego więc miałbym się przejmować korzystaniem z IoC? Czy NAPRAWDĘ brakuje mi punktu ...? Dla mnie wzorzec IoC jest po prostu jakimś przereklamowanym wzorem. Dodawanie kolejnych złożonych warstw do aplikacji ...

questionAnswers(3)

yourAnswerToTheQuestion