Кога трябва да използвам манипулатор на събития вместо агрегатор на събития?

Кога трябва да използвам манипулатор на събития срещу агрегатор на събития?

В моя код имам два ViewModels, които се контролират от родителски ViewModel, опитвам се да реша дали трябва просто да използвам манипулатор на събития, за да говоря между тях? Или да използвате агрегатор на събития? Това ще бъде просто извикване на метод, не изисквам параметри да се предават между тях.


person Bob.    schedule 26.11.2012    source източник


Отговори (2)


Начинът, по който аз го виждам, EventAggregator обикновено е тежкият пистолет, използван, когато искате да публикувате събитие в цялото приложение и по-конкретно - когато не знаете кой точно слуша.

Във вашия сценарий това всъщност не е така, имате 2 модела на изглед, които искат да комуникират, но и двамата се познават. Така че няма истинска причина да не можете да използвате events.

Само ще спомена, че ако искате да го запазите малко по-свободно свързано - направете интерфейс за всеки от моделите на изглед, който излага събитието. По този начин всяка виртуална машина ще използва интерфейса на другата виртуална машина вместо конкретен екземпляр.

person Blachshma    schedule 26.11.2012
comment
Можете ли да обясните последния раздел с пример? - person Bob.; 26.11.2012
comment
Последният ми раздел е най-вече подходящ, ако използвате някакъв вид IoC като MEF, в който не знаете конкретно кой имплементира конкретен интерфейс, познавате само самия интерфейс. Така че в този пример ще имате 2 интерфейса IVM1 и IVM2, всеки от които ще има събитие. VM1 (който имплементира IVM1) не знае VM2, той знае само IVM2, но тъй като събитието е декларирано на IVM2, това е достатъчно. - person Blachshma; 26.11.2012
comment
Не е необходимо и двата модела да се познават. - person dthal; 14.05.2019

Ето връзка с добра информация (която е актуална към 5/2019)... https://docs.microsoft.com/en-us/previous-versions/windows/apps/xx130639(v%3Dwin.10) (Microsoft , призма)

Разделът Вземане на ключови решения описва кога да го използвате.

Събитията в .NET прилагат модела публикуване-абониране. Животът на издателя и абоната е свързан чрез препратки към обекти един към друг и типът абонат трябва да има препратка към типа издател.

Агрегирането на събития е модел на проектиране, който позволява комуникация между класове, които са неудобни за свързване чрез препратки към обекти и типове. Този механизъм позволява на издателите и абонатите да комуникират, без да имат връзка помежду си. Следователно .NET събитията трябва да се използват за комуникация между компоненти, които вече имат референтни връзки към обекти (като контрола и страницата, която я съдържа), като агрегирането на събития се използва за комуникация между слабо свързани компоненти (като два отделни модела за изглед на страница в приложение). За повече информация вижте Агрегиране на събития.

Грубо виждам това като предполагащо, че C# събитията са добри за слоеве (UI, слушащ логиката на шината) или родител/дете (инструмент, слушащ съдържащите се в него устройства), а агрегирането на събития е добро за братя и сестри (напр. братски UI панели или комуникация от устройство към устройство ).

person dthal    schedule 14.05.2019