Jak korzystasz z Managed Extensibility Framework?

10

Pracuję z MEF od około 2 tygodni. Zacząłem myśleć o tym, do czego służy MEF, badając, jak korzystać z MEF, i wreszcie wdrożyłem Host z 3 modułami. Kontrakty okazują się łatwe do zrozumienia, a modułami można łatwo zarządzać.

Chociaż MEF ma bardzo praktyczne zastosowanie, zastanawiam się w jakim stopniu? Mam na myśli, czy wszyscy będą przepisywać istniejące aplikacje w celu rozszerzenia?

Tak, to brzmi i jest niesamowicie niepraktyczne. Retorycznie rzecz biorąc:

  • jak MEF wpływa na obecne trendy w programowaniu?

  • zacząłeś szukać możliwości korzystania z MEF?

  • Czy zacząłeś planować poważny przepis na istniejącej aplikacji, która może zyskać na rozszerzalności?

To powiedziawszy, moje pytania brzmią:
skąd mam wiedzieć, kiedy powinienem zaplanować nowy projekt z możliwością rozszerzenia?
skąd będę wiedział, czy istniejący projekt wymaga przepisania w celu rozszerzenia?

Czy ktoś używa MEF?

IAbstract
źródło

Odpowiedzi:

8

Czy ktoś używa MEF?

Pracuję nad projektem Silverlight przy użyciu wzorca MVVM. Zaczęliśmy od połączenia wszystkich maszyn wirtualnych ze sobą w razie potrzeby za pomocą interfejsów i ręcznego wstrzyknięcia zależności (albo wstrzyknięcia konstruktora, albo właściwości w zależności od potrzeb). Zaczęło być bolesne i zaczęliśmy używać MEF jako podstawy do wstrzykiwania zależności, aby eksportować niektóre usługi używane w modelach widoków i importować je do modeli widoków, które ich potrzebują. Działa idealnie i przy bardzo małym kodzie.

Tak, istnieje kilku purystów, którzy powiedzą, że MEF nie jest przeznaczony do wstrzykiwania zależności, a rzeczywista struktura wstrzykiwania zależności będzie działać znacznie lepiej. Jednak MEF jest wprowadzany bezpośrednio do .NET, co jest dużym plusem i wystarczyło, aby zaspokoić nasze potrzeby.

skąd mam wiedzieć, kiedy powinienem zaplanować nowy projekt z możliwością rozszerzenia? skąd będę wiedział, czy istniejący projekt wymaga przepisania w celu rozszerzenia?

IMO, zawsze powinieneś odpowiednio rozdzielać obawy i używać interfejsów, aby umożliwić niezależne zmiany różnych modułów. Jeśli zrobisz to dobrze, to kiedy znajdziesz potrzebę rozszerzenia, MEF powinno być łatwe do dodania. Ale nie rozpocznę projektu, który nie ma wymagań dotyczących rozszerzalności, i na wszelki wypadek postawiłbym MEF. Poczekam, aż będzie taka potrzeba. W przypadku istniejących projektów, jeśli zajdzie taka potrzeba, oceniłbym wysiłek przeprojektowania projektu w celu użycia MEF w porównaniu z alternatywnymi rozwiązaniami zamiast nie robienia niczego, i zobaczę, które wygrane.

RationalGeek
źródło
6

Błąd, który popełniają ludzie i myślę, że to z powodu nazewnictwa (Managed Extensibility Framework) polega na założeniu, że MEF jest praktyczny tylko dla rozszerzalności. MEF naprawdę zajmuje się trzema kluczowymi kwestiami: rozszerzalnością, wykrywaniem i metadanymi. Dwa ostatnie są bardzo wydajne nawet dla aplikacji, które nigdy nie zobaczą żadnej wtyczki ani rozszerzenia.

To jest artykuł, który napisałem o jego możliwości odkrywania jako kontenera MKOl: http://www.informit.com/articles/article.aspx?p=1635818

Używam MEF w większości aplikacji biznesowych dla przedsiębiorstw, ponieważ pozwala to na szybsze i łatwiejsze budowanie i utrzymanie aplikacji modułowych w Silverlight.

Jeremy Likness
źródło
Przeczytałem twój artykuł - przynajmniej dwa razy;)
IAbstract
4

Obecnie używam MEF w kilku projektach, które zawierają wzorzec repozytorium.

Jeden używa różnych typów repozytoriów podczas testów jednostkowych, drugi używa lokalnych (prosto do DB), zdalnych (WCF) i testujących repozytoria.

Oba projekty mogą zmieniać typy repozytoriów za pomocą kodu lub konfiguracji i są oparte na metadanych MEF / typach Lazy.

Do tej pory oba projekty przebiegają niezwykle dobrze.

Kieron
źródło