Я недавно узнал о Presenter First и читать их технические документы и блоги, и т.д.В Presenter Сначала почему метод SubscribeSomeEvent на интерфейсе предпочитает простые старые события?
В большинстве примеров, которые я нашел, что события не объявляются непосредственно на границе, а в качестве способа для него. Например,
public interface IPuzzleView
{
void SubscribeMoveRequest(PointDelegate listener);
// vs
event PointDelegate MoveRequest;
}
Я не совсем понимаю, почему. Мне показалось, что где-то я видел бумагу/статью/блог, объясняющий причины этого, но я больше не могу его найти. В указанном тексте также содержатся фрагменты кода модульного тестирования - я знаю это, потому что я помню, как говорил себе, что один из модульных тестов был неправильным.
UPDATE:
Ниже приведен пример для сравнения:
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>();
Подписаться Стиль:
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();
против событий:
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, стиль события выше не будет работать, так как ApplicationPresenter сразу же получает сборку мусора, и проводка никогда не происходит.
Я хотел бы связаться с людьми над атомным объектом, поскольку они содержат большую часть информации по этому вопросу, и большая часть исследований была выполнена ими. Они могут указать вам на бумагу, которую вы помните, читаете. –