ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

オブジェクト指向で、修正による影響をうけにくくする方策その2 - 一貫性。

2008-04-04 12:47:50 | Weblog

 前回書いた、オブジェクト指向で、修正による影響をうけにくくする方策の続き。

 オブジェクト指向はもともと局所差異があるから、修正しやすいはずなんだけど、局所性ゆえに、周りが見えにくくなる。そこで、適切な局所性をするには、
  ・業務プロセスとエンティティを明確に分けて、
  ・エンティティは1事実1箇所で
という話になってくると・・で、「エンティティは1事実1箇所」っていうのは、ER図を作るときのDBとおなじで、これを実現するには、独立性と一貫性を持つ必要があると・・

 で、前回は、独立性の話で、これは
・正規化によりエンティティを分離し、
・業務プロセスで利用するときには、DBのビューのように、使いやすいクラスをつくれば、
 業務プロセス部分の修正に影響を受けない
 という話でした。

 今回は、おかしくなるのを防ぐというより、おかしくなったら、すぐ気づくようにする話
 つまり、おかしなデータが入らないようにチェックする話。

 DBだと、一貫性の話です。




■一貫性を担保する-チェック

 DBで、一貫性は、参照制約とかつけているけど、オブジェクト指向のクラスの場合
・参照制約同様、複数のクラス間に関するもの(親が存在しないといけないとか)
・属性値の問題(受注金額=負の数は不可など)
の大きく2通りが考えられる気がする(もっとある?)

 で、この場合、Javaなら、setterでチェックすれば良いように思うかもしれないけど、
setterは、ふつうvoidで返すので、チェック結果を返せない(まあ、クラス内の属性にerrno
ってとっておいて、それでチェックしてもいいけど・・ま、それはめんどっちい)




■どこで何をチェックするか

 そこで、普通は、追加、削除、編集する際にチェックするということになる。
 なお、検索するときには、エンティティを書き換えていないので、検索できないだけで問題はない・・・はずだが、SQLインジェクションされてしまえば終わりなので、SQLインジェクション対策は必要になる。

 追加、編集は、値チェックと、関連性チェック、削除は関連性チェックになります。

 値チェックは、範囲内か?とか、それこそ、ある1つの値を、正規表現使ってチェックみたいなかんじ。

 関連性チェックは、親が存在するかとか、この値だと、他のオブジェクトがある値のはずだけど
(受注キャンセルできるのは、出荷前のはずで、それ以降は返品処理のはずだけど・・とか)・・
とか、2つ以上(場合によってはそのオブジェクトだけでは、チェックできないことも)のもの
に関してのチェック。

 ってことになる。




■インターフェース部分でチェックするのが、効率的かも・・

 じゃあ、なんでもチェックすればいいか?っていうと、
チェックだらけになってしまう。

 一方、チェックしないと、そのメソッドやクラスの中身を知らないと、
変な値を入れてしまって、おかしな動作させてしまうかもしれない。

 どこでちぇっくするのがいいか・・・

 というと、インターフェースとして、公開しているところ
ということになる。

人とコンピューターのインターフェースは、
 ビューであり、これは、JavaScriptで、画面チェックということになる

サーバーとクライアントというか、業務プロセス(サービス)提供部分は、
 コントローラーのサーブレットでチェック。

業務プロセスとエンティティの関係は、
 エンティティのクラスのところの追加、編集、削除関連メソッド(上記)

って感じになると思う。




とりあえず、ここまで。



この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Ruby1.9、Windowsで-その2... | トップ | 「ウルシステムズとケアブレ... »
最新の画像もっと見る

Weblog」カテゴリの最新記事