Pytania w tym artykule pojawiły się podczas szkolenia Wzorce projektowe w C# zrealizowanego w dniach 11-12.01.2016r.
Marcin Sulecki
DEVELOPER AND TRAINER
Jaka jest różnica pomiędzy interfejsami IEnumerable, IList i IQueryable?
IEnumerable to interfejs, który zapewnia iterację po elementach kolekcji.
Jeśli klasa go implementuje to możemy użyć instrukcji foreach do przechodzenia po elementach.
Interfejs IList definiuje metody do dodawania i usuwania elementów.
Jeśli klasa go implementuje możliwe jest dodawanie i usuwanie elementów.
Natomiast interfejs IQueryable udostępnia funkcjonalność do analizy zapytań.
Dzięki temu Provider dostaje wyrażenie np. wyrażenie lambda, które tłumaczy na przykład język SQL zależnie od dostawcy.
Która z bibliotek do wstrzykiwania zależności jest najlepsza?
Każda z nich ma swoje wady i zalety dlatego należy dopasować bibliotekę do aktualnego projektu aby osiągnąć najlepsze rozwiązanie.
Przykładowo:
MEF – biblioteka Microsoftu o bardzo dużych możliwościach. Umożliwia wyszukiwanie bibliotek w katalogach.
Wymagania jednak oznaczenia klas atrybutem [Export] pochodzące z tej biblioteki i przez to nasze klasy stają się ściśle związane z MEF’em co ogranicza w przyszłości zastosowanie innej biblioteki.
Unity – również biblioteka Microsoftu, ale nie wymaga stosowania atrybutów. Wstrzykiwanie można konfigurować za pomocą plików konfiguracyjnych lub kodu.
Niestety nie ma automatycznego przeszukiwania bibliotek na dysku, które trzeba zaimplementować samodzielnie.
Nancy – biblioteka OpenSource
Polecam porównanie pod kątem wydajności
http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison
Jakiej biblioteki u używać do testów jednostkowych?
Na początku swojej przygody z testami jednostkowymi najlepiej zacząć od biblioteki wbudowanej w Visual Studio. Później możemy zastosować nUnit xUnit.
Co ciekawe, nie musimy porzucać rozwiązania Microsoftu, lecz łączyć ze sobą powyższe biblioteki. Odsyłam do porównania:
http://stackoverflow.com/questions/261139/nunit-vs-mbunit-vs-mstest-vs-xunit-net”