MVVM Light e PRISM offrono messenger per implementare il sistema degli eventi.
l'interfaccia approssimativa è simile alla seguente:
interface Messanger
{
void Subscribe<TMessageParam>(Action<TMessageParam> action);
void Unsubscribe<TMessageParam>(Action<TMessageParam> action);
void Unsubscribe<TMessageParam>(objec actionOwner);
void Notify<TMessageParam>(TMessageParam param);
}
Ora questo modello sembra vantaggioso rispetto agli eventi classici .net. Funziona bene con l'iniezione di dipendenza. Le azioni vengono memorizzate come riferimenti deboli, pertanto le perdite di memoria vengono avviate e l'annullamento dell'iscrizione non è obbligatorio. L'unico fastidio è la necessità di dichiarare il nuovo TMessageParam per ogni messaggio specifico. Ma tutto ha un costo. E quello che mi preoccupa davvero è che non vedo difetti di questo approccio.
Qual è stata l'esperienza di alcuni problemi con questo modello di progettazione?
Aggiorna
L'abbiamo provato e la cosa più sgradevole con i messaggi è la loro implicita dal punto di vista dell'interfaccia. I messaggi contrari agli eventi non vengono esplicitamente esposti nell'interfaccia, pertanto è necessario fornire ulteriore documentazione.
Come diceva Laurent in basso, l'accoppiamento molto lento ha un costo di indeterminatezza.