Vor kurzem fand ich über Presenter First und lesen ihre White Papers und Blogs etc.In Presenter Zuerst, warum ist die SubscribeSomeEvent-Methode auf einer Schnittstelle gegenüber einfachen alten Ereignissen bevorzugt?
In den meisten der Beispiele, die ich gefunden, werden die Ereignisse nicht direkt an der Schnittstelle deklariert, sondern als Methode dafür. Zum Beispiel
public interface IPuzzleView
{
void SubscribeMoveRequest(PointDelegate listener);
// vs
event PointDelegate MoveRequest;
}
Ich verstehe nicht genau warum. Ich dachte, ich hätte irgendwo eine Zeitung/Artikel/Blog gesehen, die die Gründe dafür erklären, aber ich kann sie nicht mehr finden. Der Text enthielt auch Auszüge aus Unit-Test-Code - ich weiß das, weil ich mich erinnere, mir selbst gesagt zu haben, dass einer der Unit-Tests falsch war.
UPDATE:
Das Folgende ist ein Beispiel zum Vergleich:
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>();
Abonnieren Stil:
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. Ereignis:
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, der obige Event-Stil wird nicht so funktionieren, wie es ist, da ApplicationPresenter sofort Müll sammelt und die Verkabelung nie passiert.
Ich würde die Leute über atomobject kontaktieren, da sie die meisten Informationen zu diesem Thema hosten und ein großer Teil der Forschung wurde von ihnen durchgeführt. Sie können Sie vielleicht auf das Papier verweisen, an das Sie sich erinnern. –