Niedawno dowiedziałem się o Presenter First i czytać ich whitepapers i blogów itdW Presenter First, dlaczego metoda SubscribeSomeEvent na interfejsie jest preferowana do zwykłych starych zdarzeń?
W większości przykładów znalazłem, zdarzenia nie są zgłaszane bezpośrednio w interfejsie, lecz raczej jako sposób na niego. Na przykład:
public interface IPuzzleView
{
void SubscribeMoveRequest(PointDelegate listener);
// vs
event PointDelegate MoveRequest;
}
Nie rozumiem dokładnie, dlaczego. Wydawało mi się, że widziałem gdzieś papier/artykuł/blog, który wyjaśnia uzasadnienie, ale nie mogę go już znaleźć. Wspomniany tekst zawierał również fragmenty kodu testowania jednostkowego - wiem to, ponieważ pamiętam, że powiedziałem sobie, że jeden z testów jednostkowych był niepoprawny.
UPDATE:
Poniżej jest przykład dla porównania:
public class Collect
{
public static CollectAction<T> Argument<T>(int index,
CollectAction<T>.Collect collectDelegate)
{
CollectAction<T> collect = new CollectAction<T>(index, collectDelegate);
return collect;
}
}
public interface IApplicationView
{
event EventHandler Load;
// or
void SubscribeLoad(Action action);
}
Mockery mockery = new Mockery();
IApplicationView view = mockery.NewMock<IApplicationView>();
IApplicationModel model = mockery.NewMock<IApplicationModel>();
Zapisz styl:
Action savedAction = null;
Expect.Once.On(view).Method("SubscribeLoad").Will(
Collect.Argument<Action>(0,
delegate(Action action) { savedAction = action; }));
Expect.Once.On(model).Method("LoadModules");
new ApplicationPresenter(view, model);
savedAction();
mockery.VerifyAllExpectationsHaveBeenMet();
vs. zdarzenia:
Expect.Once.On(view).EventAdd("Load", Is.Anything);
Expect.Once.On(model).Method("LoadModules");
new ApplicationPresenter(view, model);
Fire.Event("Load").On(view);
mockery.VerifyAllExpectationsHaveBeenMet();
FYI, powyższy styl zdarzeń nie zadziała tak, jak jest, ponieważ ApplicationPresenter od razu zbiera śmieci i okablowanie nigdy się nie dzieje.
Chciałbym skontaktować się z ludźmi w atomicobject, ponieważ zawierają one większość informacji na ten temat i większość badań została wykonana przez nich. Mogą być w stanie wskazać ci papier, który pamiętasz. –