Wzorce projektowe w C# - 3 pytania i odpowiedzi ze szkolenia (styczeń 2016)

Pytania w tym artykule pojawiły się podczas szkolenia Wzorce projektowe w C# zrealizowanego w dniach 11-12.01.2016r.


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"