WinForms × カプセル化(UIから設計力を学ぶ)
現在の学習段階では、
- クラスとオブジェクト
- メソッド
- static
- 値型と参照型
- List
- Windowsフォームアプリ
まで進んでいます
ここから一段レベルを上げます。
今日のテーマは、
WinFormsはカプセル化の実例そのもの
という話です。
カプセル化とは何か(復習)
カプセル化とは、
データを直接触らせず、ルールを通して扱わせる設計
のことでした。
カプセル化されていない例
消費税計算機を考えます。
int price = int.Parse(textBox1.Text);
問題は何でしょう?
- 空文字で例外
- 数字以外で例外
- マイナス値も入る
- 桁数オーバーもあり得る
UIから「むき出しのデータ」が入ってきます。
これは危険です。
NumericUpDownはなぜ安全か
decimal price = numericUpDown1.Value;
NumericUpDownには、
- Minimum(最小値)
- Maximum(最大値)
- 型保証(decimal)
- 不正入力防止
が最初から組み込まれています。
つまり、
内部でルールを持っている
のです。
これはまさにカプセル化です。
WinFormsコントロールの構造
実はすべてのコントロールは、
- フィールド(内部データ)
- プロパティ(安全な窓口)
- イベント(外部通知)
で構成されています。
例:
button1.Enabled = false;
内部状態は直接触れません。
Enabled というプロパティ経由のみ変更できます。
これがカプセル化です。
TextBoxはなぜ弱いのか
textBox1.Text
→ 何でも入力できる。
つまり、
入力の責任がプログラマー側にある
のです。
設計の強さを比較
| コントロール | 設計の強さ |
|---|---|
| TextBox | 弱い(自由入力) |
| NumericUpDown | 強い(数値制限) |
| ComboBox | 強い(選択制限) |
| CheckBox | 強い(bool保証) |
この違いが、
カプセル化の強さの違い
です。
さらに一段上へ:UIを信用しない設計
本当に強い設計はこうです。
class Price
{
private int value;
public int Value
{
get => value;
set
{
if (value < 0)
this.value = 0;
else
this.value = value;
}
}
}
UI側:
Price price = new Price();
price.Value = int.Parse(textBox1.Text);
UIが壊れても、
クラスが守ります。
これが、
UIとドメインの責任分離
です。
なぜ今これが重要か
皆さんは今、
- オブジェクトをListで扱い
- Windowsフォームでイベントを使い
- 外部入力を受け取っている
段階にいます。
この状態でカプセル化を理解しないと、
アプリは簡単に壊れます。
プロの設計思想
初心者:
画面でチェックすればいい
中級者:
クラスで守る
上級者:
UIは信用しない
WinFormsは、
「完成されたカプセル化されたクラスの集合体」
です。
それを観察することが、
設計力向上への近道です。
まとめ
WinFormsは、
- データを内部に持ち
- ルールを内部に持ち
- 安全な窓口だけ公開する
カプセル化の実例です。
今は、
「クラスを書く段階」から
「クラスを守る段階」へ進むタイミングです。




ディスカッション
コメント一覧
まだ、コメントがありません