LoginSignup
1
4

More than 5 years have passed since last update.

イベント駆動型言語での開発時のコーディング規約指針

Posted at

初めに

VB.netでの新規開発の後、OracleFormsでマイグレーションとかをやってたのですが、
レガシーシステムのコードは触るだけでストレスが溜まってしまうので、「せめてこうしろよ」という感じの内容を書きます

1.イベントハンドラに処理を書くな!

イベントハンドラでは処理を書くのではなく、単にメソッドのコールだけを記載するようにしましょう。
イベントハンドラに処理を書いてしまうと、処理が長くなった時に「放置する(可読性が下がる)」か「複数のイベントハンドラに分割する(実行順序が保証されない)」が発生します。
もちろん、AddHandlerなどを使って制御することはできますが、無駄なコードを書かないようなルールにする方が建設的です。

同じイベントで複数のメソッドを書いてはいけない(どちらから処理が実行されるかという保証がない)

Private Sub Hogehoge(sender As Object, e As EventArgs) Handles Button1.Click
    処理1
End Sub

Private Sub Hogehoge2(sender As Object, e As EventArgs) Handles Button1.Click
    処理2
End Sub

一つのイベントにダラダラと処理を書いてはいけない。(可読性が低下する)

Private Sub Hogehoge(sender As Object, e As EventArgs) Handles Button1.Click
    長い処理
End Sub

イベントハンドラにはメソッドの呼び出しのみ記述する

Private Sub hogeHoge(sender As Object, e As EventArgs) Handles Button1.Click
    clickProcedure1(0)
    clickProcedure2(0)
End Sub

Private Sub clickProcedure1(ByVal hoge As Integer)
    処理1
End Sub

Private Sub clickProcedure2(ByVal fuga As Integer)
    処理2
End Sub

2.コントロールへの参照は渡さない

これは賛否両論かもしれませんが、私としてはコレをオススメします。
VBで言えば、「Formインスタンスが直接持つメソッド以外はそのフォームの持つコントロールの参照を持てない」とすべきです。
もし、他のFormインスタンスのコントロールを見たい場合、そのコントロールをもつFormのメソッドを経由するようにすべきです。
これは、カプセル化からの要請でもあります。

3.コントローラーを用意する。

MVCモデルでいう所のコントローラーを用意します。
こんな感じです

Private Sub hogeHoge(sender As Object, e As EventArgs) Handles Button1.Click
    clickProcedure1(0) 'イベントハンドラではメソッドのコールだけ行います
End Sub

Private Sub clickProcedure1(ByVal hoge As Integer)
    Dim Arg As Boolean
    Arg = Controler()  '処理を行う上で必要な情報をコントローラーを経由して取得します
    clickProcedureNext(Arg) 'コントローラーから取得した情報を元に処理を実行します
End Sub

Private Function Controler() As Boolean
    Return Button1.Enabled  'コントローラーは、情報を集めて返します
End Function

Private Sub clickProcedureNext(ByVal Arg1 As Boolean)
    適当な処理  '実際の処理を行います
End Sub

このようにすることで、「コントロールへの参照を持つレイヤ」を限定することが出来ます。
これは、2の内容とも共通していることです。
OracleFormsなんかだと、コントロールの名称を文字列として渡すだけでゴチャゴチャっと触れてしまうので、オブジェクト指向脳としては切れそうになるのを何とかこらえている状態です

おわり

以上、リハビリがてら書いた記事なので、内容は薄いです。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4