第7回 リソースを使ったマルチ・リンガルなVBアプリケーション「連載:VB 6ユーザーのための これならマスターできるVB 2005超入門」より:
まぁ、いちゃもんレベルかもしれませんが。
3ページ目。なんで Public ReadOnly Property English() As Boolean なんだろう?これ、「英語に設定されているか?」を取り出すんでしょ?だったら IsEnglish じゃない?
というか。。。たとえば、「日本語」「英語」「中国語」を分けるとき、これを真似したら、IsJapanese, IsEnglish, IsChinese を実装するんですか?
し か も、とってきたものを、呼び出した側が、判断するんですか?
だったら Public Function GetCultureString() As String の方が良くない?これだったら、対応する言語が増えても、ダイアログを直すだけだよ?
' 元のコードだと、こんな風
Private Sub showOption(...) Handles btnOption.Click
dlgOption.Location = New Point(...)
If dlgOption.ShowDialog() = Windows.Forms.DialogResult.OK Then
' 対応言語が増えると、ここを増やさなければならない
If dlgOption.English = True Then
My.Application.ChangeUICulture("en")
Else If dlgOption.Chinese = True Then
My.Application.ChangeUICulture("zn")
Else ' しかも、直し忘れのバグを仕込む可能性!!
' 英語でも中国語でもない。でも、フランス語の可能性は?!
My.Application.ChangeUICulture("")
End If
lblMessage.Text = My.Resources.Msg1
End If
End Sub
' こうしたらすっきり
Private Sub showOption(...) Handles btnOption.Click
dlgOption.Location = New Point(...)
If dlgOption.ShowDialog() = DialogResult.OK Then
' 対応言語が増えようが、こうしたら変更の必要なし
' 万が一、カルチャ文字列が変わっても、直すのは一カ所
My.Application.ChangeUICulture(dlgOption.GetCultureString())
lblMessage.Text = My.Resources.Msg1
End If
End Sub
ついでに、オブジェクト指向では、こういう「クラスの切り分け」が必要なんですね。修正が入りやすそうなところを見つけて、それに対する修正ができるだけ少ない範囲ですむように考える。これも、「ちょっと気の利いた機能」です。
投稿日時 : 2007年3月21日 0:32