我正在尝试将 WindowsForm 重构为 MVP 模式。该应用程序是一个磁贴编辑器。表单有一个自定义控件,我在其中显示 tilemap (TileDisplay)。从文件加载地图后,我调用名为“AdjustHScrollBar”的方法将水平滚动条重新调整为 tilemap 大小。我不是 100% 确定如何根据 MVP 拆分方法。首先是原始的none MVP方法:
private void AdjustHScrollBar()
{
if (tileMap.GetWidthInPixels() > tileDisplay.Width)
{
hTileScrollBar.Visible = true;
hTileScrollBar.Minimum = 0;
hTileScrollBar.Maximum = tileMap.GetWidth();
}
else
{
hTileScrollBar.Visible = false;
}
}
这是在presenter中使用MVP后的方法:
private void AdjustHScrollBar()
{
if (mainFormModel.TileMap.GetWidthInPixels() > mainFormView.GetTileDisplayWidth())
{
mainFormView.EnableHScrollBar(mainFormModel.TileMap.GetWidth());
}
else
{
mainFormView.DisableHScrollBar();
}
}
视图不知道演示者。我的问题是演示者是否应该知道视图的控件。在我的实现中它没有——这就是 GetTileDisplayWidth、EnableHScrollBar 和 DisableHScrollBar 方法的原因。Afaik 这是正确的方法,但是如果我必须从视图中为我需要的每个属性创建一个方法,这似乎变成了很多工作。例如,对于垂直滚动条,我基本上有“相同”的代码(所以这是重新调整滚动条的 6 种方法)。