私UserControl
は実際には派手な単純なものを実装していTextBox
ます。その機能の 1 つは、書式設定の仕様を設定できることです。この書式設定はコンテンツに自動的に適用されます。たとえば、書式指定を に設定し"000"
、内容が"42"
の場合、 then"042"
が表示されます。
UserControl
MVPパターンに従ってこれを実装しています。実装はこれに似ています: winforms mvp パターンでユーザーコントロールを実装する方法? . また、この質問を確認してください:パッシブビューと表示ロジック
アプローチ #1
の私のTitle
プロパティは次のView
ようになります。
private string title;
public string Title {
get { return title; }
set { title = value; titleTextBox.Text = presenter.Format(title); }
}
この実装により不要なカップリングが追加されているように感じます。たとえば、Presenter
のFormat
メソッドを変更すると、すべてView
の を調べて call ステートメントを適切に変更する必要があります。
アプローチ #2
の私のTitle
プロパティは次のView
ようになります。
public string Title {
get { return presenter.Title; }
set { presenter.Title = value; }
}
の私のTitle
プロパティは次のPresenter
ようになります。
private string title;
public string Title {
get { return title; }
set { _view.SetTitle(this.Format(value); }
}
ここで、インターフェイスと実装にSetTitle
メソッドを追加する必要があります。View
View
public void SetTitle(string title) {
titleTextBox.Text = title;
}
したがって、このアプローチでは、この醜いSetTitle
Java のようなメソッドが得られます。
アプローチ #3
呼び出す代わりにSetTitle
、新しいプロパティを作成しRealTitle
てView
設定します。このReal
プレフィックスでは醜いままです。
あなたのアプローチ
もっと良い方法を考えられますか?
使用事例
は次のUserControl
ように使用する必要があります。
var c = new FancyTextBox();
c.Format = "000";
c.Text = "42";
Controls.Add(c);
このスニペット"042"
はUserControl
.
大きな絵
Form FancyTextBoxView FancyTextBoxPresenter
| | |
| ftb.Text = "42" | |
|-------------------->| |
| | |
| | A |
| |----------------------------->|
| | |
| | B |
| |<-----------------------------|
AアクションとBアクションとは?書式設定されたテキストを UI に表示したい。書式設定コードはPresenter
. View
にはtitleTextBox
、UI にテキストを保持する があります。