WindowsFormをMVPパターンにリファクタリングしようとしています。アプリはタイルエディタです。フォームには、タイルマップ(TileDisplay)を表示するカスタムコントロールがあります。ファイルからマップをロードした後、「AdjustHScrollBar」という名前のメソッドを呼び出して、水平スクロールバーをタイルマップサイズに再調整します。MVPに従ってメソッドを分割する方法が100%わかりません。まず、元のnone MVPメソッド:
private void AdjustHScrollBar()
{
if (tileMap.GetWidthInPixels() > tileDisplay.Width)
{
hTileScrollBar.Visible = true;
hTileScrollBar.Minimum = 0;
hTileScrollBar.Maximum = tileMap.GetWidth();
}
else
{
hTileScrollBar.Visible = false;
}
}
これは、プレゼンターでMVPを使用した後の方法です。
private void AdjustHScrollBar()
{
if (mainFormModel.TileMap.GetWidthInPixels() > mainFormView.GetTileDisplayWidth())
{
mainFormView.EnableHScrollBar(mainFormModel.TileMap.GetWidth());
}
else
{
mainFormView.DisableHScrollBar();
}
}
ビューはプレゼンターを知りません。私の質問は、プレゼンターがビューのコントロールを知っている必要があるかどうかです。私の実装では、GetTileDisplayWidth、EnableHScrollBar、DisableHScrollBarの各メソッドはそうではありません。Afaikは正しい方法ですが、ビューから必要なすべてのプロパティのメソッドを作成する必要がある場合、これは大変な作業になるようです。私は基本的に、たとえば垂直スクロールバーの「同じ」コードを持っています(つまり、スクロールバーを再調整するための6つの方法です)。