2011-08-12 10 views
6

Niedawno przeszedłem od zespołu używającego programu Ninject w ASP.Net MVC do wstrzyknięcia zależności do zespołu, który nic nie wie o rozwiązaniach IoC poza wzorcem modelu dostawcy, który został wprowadzony w ASP.Net 2.0.Dlaczego korzystanie z modelu dostawcy w aplikacji ASP.Net MVC działającej od zera działa wstecz?

Próbowałem znaleźć dobry przepływ pracy do pracy z modelem dostawcy, ale za każdym razem, gdy naprawdę dostaję kodowanie, to głównie wydaje mi się, że wzorzec przeszkadza i wydaje mi się, że rozpraszam się przy rozwiązywaniu problemów konfiguracyjnych i pukania razem copypasta statyczne fasady, gdy będę mógł zamiast tego robić pracę.

Teraz rozpoczynam mały projekt greenfield ASP.Net MVC i znajdowanie oporu ze strony niektórych członków zespołu w celu przyjęcia schematu DI.

Wiem, że ramy DI czują się szybciej i łatwiej niż pisanie na modelu dostawcy, ale utknąć w szczegółach za każdym razem, gdy próbuję wyrazić, dlaczego.

Czy ktokolwiek może opisać obiektywne różnice między tymi dwoma podejściami i dlaczego pisanie na modelu dostawcy w środowisku, w którym kontener mógłby się łatwo załadować, wydaje się po prostu dziwne?

+0

co projekt Greenfield, po prostu ciekawy –

+0

Greenfield oznacza nowy projekt z niczego stworzył. –

+2

Co masz na myśli mówiąc "pisząc przeciwko modelowi dostawcy"? Zrobiłem .NET od pierwszego dnia i nigdy nie "napisałem przeciwko modelowi dostawcy" według mojej najlepszej wiedzy. –

Odpowiedz

2

The Provider idiom is, at best, a design smell. Najlepiej tego unikać.

Injection Dependency Injection jest po prostu the most efficient way to enable loose coupling. Jeśli chcesz napisać możliwy do utrzymania kod, jest to jeden z najskuteczniejszych sposobów na osiągnięcie tego celu.

Jednak większość ludzi wykazuje tendencję do przeciwstawiania się DI, ponieważ "czuje się" wstecz, ale to naprawdę coś, co po prostu musi się przedostać.

1

Myślę, że sposobem na ustawienie go może być to, że jeśli chcesz móc przetestować swój kod, musisz wyodrębnić wszystkie zależności z tego, co testujesz. Możesz to zrobić za pomocą modelu dostawcy, ale oznacza to o wiele więcej potrzeb, aby przejść przez dostawców niż prawdopodobnie chcesz sobie poradzić.

Powiedzmy, że masz aplikację, która wywołuje zewnętrzne usługi innych firm, ale ma też lokalną bazę danych. Kontrolery czasami nazywają "dostawcę" (dla usług zewnętrznych), ale czasami wywołują "repozytorium" dla lokalnej bazy danych. W jaki sposób zamierzasz przetestować metody wywołujące repozytorium? Myślę, że musisz wyodrębnić całą lokalną bazę danych przez dostawców. W takim przypadku skończysz z jednym lub dwoma dużymi implementacjami providerów (zły projekt ma zbyt wiele metod na klasę), lub skończysz z wieloma małymi dostawcami (koszmar konfiguracyjny).

Dzięki pojemnikowi z IOC można wykonać większość okablowania w samym kodzie. Używanie szyderczego szkieletu ułatwia testowanie jednostek. Więc jeśli naprawdę chcesz, możesz użyć dostawców dla "połączeń zewnętrznych" i IOC dla "połączeń wewnętrznych".

Jestem właśnie w trakcie myślenia o tym, ponieważ mamy dużo starszego kodu u dostawców i myślę o odejściu od nich i po prostu używając prostej IOC. Uważam, że kontenery IOC, takie jak AutoFac, mogą replikować ten wymóg, aby móc "podłączyć" inną implementację poprzez konfigurację, tak więc nie tracisz niczego.

Czytaj więcej na moim blogu - miejmy nadzieję, że blog będzie trochę dobrych komentarzy o tym zbyt: http://healthedev.blogspot.com/2011/12/making-custom-built-applications.html

Powiązane problemy