分割に関する論議はあちこちで見かけるが、もっと現場的な意見として、 次の点に注目したい。
機能分割のコツがまだ掴めていないうちに、 見様見真似でやってみたという感じの分割の仕方をよく見る。 分からないなら、始めのうちは Main 一発でかまわないと思う。
技術的な先輩がきちんと指導できていないのはほとんどの現場の実情だが、 考え方だけを口走って、かっこいい幻想を後輩に抱かせると、 必要であるかないかを考えずに技術を追うようになると私は考えている。
実例を挙げた方がよいだろうか。次の VB ソースはほぼ実在のものである。 ある画面モジュールの初期処理の部分である。
Private Const FORM_HEIGHT = 1000 ' 高さ
Private Const FORM_WIDTH = 1000 ' 幅
Public Sub Form_Load()
Dim nHeight As Integer
Dim nWidth As Integer
' 初期処理
InitForm(nHeight, nWidth)
' 画面の位置を決める
Me.Left = 10
Me.Top = 10
End Sub
' 画面の初期処理
Private InitForm(nHeight As Integer, nWidth As Integer)
' 大きさを決める
nHeight = FORM_HEIGHT
nWidth = FORM_WIDTH
End Sub
これは以下のように書けば終わりである。
' 画面モジュール生成時の初期処理
Public Sub Form_Load()
' 画面はこの位置、この大きさ
Me.Top = 10
Me.Left = 10
Me.Height = 1000
Me.Width = 1000
End Sub
本当は画面の初期情報は画面をデザインするところで決めてしまえばいいことで、 ソースにコードとして書く必要すらないが、 あくまでコードで書くとしたらの例である。
この例で何がまずかったかというと、 便利そうな知識(プロシージャに分けてみる、定数定義をする、 プロシージャの中で引数をいじる)を得たので使ってみた、というところである。 もちろん、そういった知識は必要であるが、 今その場面で適用するのが適当かどうかが判断できなかったわけである。 そのために機能のまとまりを無視して、 どこか使えそうなところで使ってみたのだろう。
冒頭にも書いた通り、分割に関することを言い出すと、 きりがない上に宗教じみた原則論が横行しかねないので、 あくまで、初心者を抱えた現場ではどのような段階を踏めばよいか、 に注目しながら進めていきたい。ということは、このシリーズは続くわけである。
†: 今回のソースについて VB 固有の情報