Mr.Tの場所

特攻野郎Aチームじゃないよー

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  253  : 記事  0  : コメント  3733  : トラックバック  52

ニュース

  • 性別:男
  • 猫1:まる
  • 猫2:もろ
  • 猫3:にゃん左部郎
  • タバコ:男は黙ってJPS
[わんくま同盟] C#, VB.NET 掲示板

書庫

日記カテゴリ

Mr.Tです、こんにちは。

 

例えば、データの整合性についてのチェックルーチンを書くとき、

 

Private Function チェック1() as Boolean

  整合性パターン1のチェック()

  整合性パターン2のチェック()

  整合性パターン3のチェック()

  整合性パターン4のチェック()

End Function

 

ってかいてるんですが、

もう一つ、別のチェック2、3をかかなくちゃならないとき、

 

Private Function チェック2() as Boolean

  整合性パターン1のチェック()

  整合性パターン2のチェック()

  整合性パターン4のチェック()

End Function

Private Function チェック3() as Boolean

  整合性パターン1のチェック()

  整合性パターン2のチェック()

  整合性パターン5のチェック()

End Function

今のところ、こうやってベタに書いてます。

 

そういうときに、整合性パターン1のチェック、と整合性パターン2のチェック、を一つのFunctionniにまとめてみたりしたこともあったのですが、

そういう場合は、そのFunction名の名前付けに悩みます。

Private Function 整合性パターン1と2() as Boolean

  整合性パターン1のチェック ()

  整合性パターン2のチェック ()

End Function

 

Private Function チェック1() as Boolean

  整合性パターン1と2 ()

  整合性パターン3のチェック()

  整合性パターン4のチェック ()

End Function

Private Function チェック2() as Boolean

  整合性パターン1と2()

  整合性パターン4のチェック()

End Function

Private Function チェック3() as Boolean

  整合性パターン1と2()

  整合性パターン5のチェック()

End Function

なにしろ、そのまとめ方というのは、単なる同じ記述だから、というだけのもので、くくりだすにしても、適当な名前がつけられるものでは

ないからです。(連番なんてのはポイだ)

 

整合性パターンのチェック1と2は、互いに関係があるものではなく、単純に処理が一緒だから、まとめたというだけです。

 

まとめる=ソースの量を減らせる

ではあるんですが、ある程度大きくなったソースになれば関係ないように思うんです。

 

それよりも大切なのは、Function名がいかに適切な名前であるかです。

くくりだすことで、チェック1~3の可読性が低くなるなら、それはやめたほうがよいのだろうと思ってます。

先ほどのようにくくりだした場合、その名前から処理が判断できそうか、というと、そんな名前がつけられるのであれば苦労はしないです。

仮につけたとしても、名前から判断できるものをつけられたためしがない。

 

また、チェック1~3をまとめたりするのは、あるかと思います

 

Private Enum Pattern

   チェック1
   チェック2
   チェック3

end Enum

Private Function チェック(byval pattern as Pattern) as Boolean

  整合性パターン1 ()

  整合性パターン2 ()

   select case pattern

      case Pattern.チェック1

     整合性パターン3のチェック()

     整合性パターン4のチェック ()

     case Pattern.チェック2

     整合性パターン1と2()

     整合性パターン4のチェック()

     case Pattern.チェック3

     整合性パターン5のチェック()

     End Case

End Function

 

ただし、チェックという名前にしてしまうとなんのチェックなのかわからなくなってしまうケースがあることと、

一つのルーチンそのものが、長くなり一覧性が失われるってところです。

とはいえ、ここの判断はケースバイケースですし、好みもあるんじゃないかと。

私なら、チェック1という名前自体に直接結びつくメソッドがあるなら、統一しません。

 

例えば、

更新処理()というメソッドがあるなら、更新処理用チェック()をつくってしまいます。

そこには更新処理用のチェック処理しかないので、その処理を追うときには、それ以外のことを考える必要がないからです。

 

チェックという大きなルーチンをつかってしまったりすると、その部分を変更したときに、他のチェック2,3を行う

フローに影響がないかテストしなくてはならないから、ですね。

専用ルーチンなら、そんなことはありません。専用ルーチンだけをテストすればよいわけです。

 

が、他のチェック内容とほぼ一緒で、数行しか違わないとかいうパターンなら、まとめてしまいます。

 

なので、ケースバイケースです。

 

 

蛇足ですが、チェックルーチン内で、「~の値をセット」とかいう別のことをしたらいけません。

#意味的に処理の分割ができなかったりすると、チェックルーチンと一緒に値のセットとか、プロパティ値のクリアとか
#ごちゃまぜにしてしまうのですが、それは処理を追いきれなくなります。

チェックルーチンは判断するだけにしておくことが必須だと思ってます。

 

なんか、すんごいベーシックな話ですが...

投稿日時 : 2008年2月29日 18:27

コメント

# re: チェックルーチンの書き方? 2008/02/29 23:23 myugaru
うーん。私だとチェックの方じゃなくて整合性パターンの方をenumにすると思います。VBの書き方がわからないのでC#ですが、
bool チェック1()
{
チェック(整合性1|整合性2|整合性3|整合性4);
}
とかいうのを実装すると取り合えず見た目のコード量は抑えられて”まとめてる感”は高まるかと思います。(チェックメソッドの方はご想像願います^^)でも私は素直にべたで書いてもいいとは思います。上記なら整合性1と整合性2の間に何か確認コードを追加したい場合に、チェック1とチェック2同時に追加したいかというと一概には言えないと思います。あえて同じコードが別々にあるほうがより多くの要求を満たすと思います。特にデバッグ系コードでは一時的に対象性が崩れる事はよくありがちです。その崩れるたびにメソッドでまとめていたコードをまたばらばらにしなきゃならないなんてのは本末転倒になるかもしれません。

# re: チェックルーチンの書き方? 2008/03/01 10:10 Mr.T
ありがとうございます。
なるほど、整合性のパターンをEnumにするんですか。
そうなると、確かに一つルーチンでまとめられますし、便利かも。

参考になりました。



Post Feedback

タイトル
名前
Url:
コメント