MEF kontra pryzmat. Co za różnica? Co będzie wspierane w przyszłości?

Chcę stworzyć aplikację Silverlight z kilkoma zakładkami / modułami, które będą oddzielnymi bibliotekami DLL.

Widzę, że PRISM ma koncepcje powłoki / modułu, które wydają się skierowane do robienia UI i znajduję ładne demo(pokazujące jak szukać digg / twitter).

Ale wygląda na to, że MEF zostanie włączony do VS2010, więc chciałbym skorzystać z tej opcji.

Czy ktoś może jakoś jasno wyjaśnić różnice? (Nie jestem zaawansowanym programistą)

 16
Author: Robert Harvey, 2009-10-20

4 answers

MEF i Prism służą dwóm bardzo różnym celom.

Prism to zasadniczo wskazówki do projektowania aplikacji kompozytowych-gdzie masz powłokę i" regiony", które są dynamicznie przypisane i zintegrowane. Zawiera pojemnik IoC (Unity), którego używa do wstrzykiwania.

MEF jest frameworkiem dependency injection - jego głównym celem jest "wypełnienie" depedencji w czasie wykonywania aplikacji. Pod tym względem wypełnia ten sam cel, co jedność w pryzmacie (a w rzeczywistości, można całkiem łatwo przerobić Prism używać MEF zamiast Unity).

Prism wypełnia szerszy zakres, pod pewnymi względami, ale jest również naprawdę ograniczony do aplikacji GUI. MEF robi tylko jedną rzecz (Dep. Wtrysku), ale nastawione na bardziej ogólne zastosowanie, do każdego rodzaju aplikacji.


Co do żywotności tych produktów -nie ma tu odpowiedzi, ale tak się je rozwija:

Prism został opracowany przez zespół Patterns and Practices. Cel nie musi tworzyć oprogramowania, ale dostarczać wskazówek. Jako takie aktualizują (choć dość rzadko) bibliotekę Prism i sample, ale Prism nie jest podstawową częścią frameworka dostarczanego przez Microsoft. To naprawdę biblioteka innej firmy(mimo że MS finansuje dużo, większość ludzi z P & P nie jest MS EPC).

MEF, z wpisów na blogu, wygląda na to, że ma być zintegrowany z frameworkiem i być używany bezpośrednio wewnątrz MS projects. W związku z tym, robi się ciężkie rozwoju, bezpośrednio od Microsoftu, i są wykorzystywane w ich produktach.

Ja osobiście przeczytałem dokumentację pryzmatu (i mam książkę) i przejrzałem próbki. Bardzo pomocne jest zrozumienie, jak rozbijać aplikację, ale tak naprawdę jest to bardziej poradnik niż kompletny, użyteczny framework. Próbki są bardzo dobre w robieniu tego, do czego są przeznaczone - kształcą architekta w zakresie projektowania aplikacji kompozytowych.

Jeśli twoim celem jest tylko zachowaj czysty rozdział obaw w aplikacji silverlight, skupiłbym się bardziej na nauce MVVM niż koniecznie tylko za pomocą Prism.

Jeśli chcesz użyć MEF, są inne dobre opcje. Na przykład, WPF Application Framework to cały framework MVVM zbudowany na bazie MEF i dość ładny.

 22
Author: Reed Copsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-30 17:45:23

Zasadniczo MEF jest frameworkiem rozszerzalności ogólnego przeznaczenia:

Jeśli budujesz rozszerzalne aplikacje, rozszerzalne frameworki i rozszerzenia aplikacji, to MEF jest dla Ciebie.

Natomiast pryzmat służy głównie do budowania GUI:

Composite Client Application Guidance ma na celu ułatwienie tworzenia modułowych aplikacji klienckich Windows Presentation Foundation (WPF) i Silverlight.

 4
Author: Anton Gogolev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-20 15:30:35
Więc MEF i Unity są w zasadzie takie same...
Nie do końca. MEF jest bardziej skoncentrowany na rozszerzeniach, które nie są znane w czasie kompilacji, podczas gdy kontenery IOC generalnie skupiają się na zależnościach, które są znane w czasie kompilacji. Najlepsza odpowiedź na to pytanie daje dobre wyjaśnienie różnic.
 4
Author: Daniel Plaisted,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:09:02
 2
Author: Glenn Block,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-22 18:19:39