[Seasar-user] $B!Z<ALd![(BRulet$B$N(BdoExecute$B%a%=%C%I$K$D$$$F(B

B isid.co.jp Yasuo Higa higa
2003年 11月 12日 (水) 15:43:33 JST


<[E-MAIL ADDRESS DELETED]> の、
   "Re: [Seasar-user] 【質問】RuletのdoExecuteメソッドについて" において、
   "羽生 章洋 <[E-MAIL ADDRESS DELETED]>"さんは書きました:

ひがです。

> こんにちは。ここでははじめまして。羽生です。
> 
> > > Ruletって、doExecuteメソッドは複数定義できないのでしょうか?
> > > 下記のようにRuletを定義して呼び出すとエラーになりました。
> > > 「引数の数が違う!」って叫んでますね。
> > > 
> > 複数定義すると、実行時にどのメソッドを呼び出すのか、
> > 決定するためのオーバーヘッドが生じます。
> > 複数定義したくなることは、あまりないだろうと思っているので、
> > めったにない場合のために、通常の呼び出しにもオーバーヘッドが
> > 生じるのは良くないという考えで、複数定義はできないようにしています。
> 
> 技術的なオーバヘッドもさることながら、もっと本質的な点で
> 複数定義は「?」かな〜とか思ったので、ちょっと私見をば。
> 
> ・・・私の考えとしては、複数定義をするというのは、
> 「異なるルール」に同じ名前を付けてしまえるという点で
> 好ましくないと考えています。
> 
> Ruletの醍醐味は、ビジネスルールの切り分けが明解になって
> 仕様変更に耐えられるアプリケーション構造を実現できる点だと
> 思っています。逆に言えば、プログラミングにおける生産性は
> 必ずしも高いとは思いません。
> 
> # まぁ、書き方次第だと思いますし、ほそ辺りだと生産性は
>     かなり上がってると思うし、一概には決して言えないんですけど。
> 
> ルールへの名付け、という行為は、DB設計におけるドメイン定義
> (項目名の定義ですね)と同等で、ある意味ではビジネスルールの
> 正規化(1つのルールは1つの場所へ:one rule in one place)に
> つながると思うんですね。
> 
> そういう意味で、確かに複数定義できるとコーディングが楽では
> あるんですが、整理されていないという点で、その後の苦労が
> 増えるように思います。
> 
> 急がば回れを各種の制約によって実現しているのが、Nazunaの心だと
> 勝手に私は考えていますが、どないでっしゃろか?>ひがさん
> 
最近、Mほ銀行さんのシステム子会社やSおNYさんに
ルール指向アプローを説明する機会があり、
その中でルール指向3原則としてあげたのが、

・ルールはステートレスにし、状況に依存せずに呼び出せるようにする。
・ルールはできるだけシンプルにし、徹底的にテストする。
・同じようなルールが、複数存在することがないように、
  再利用できるルールは常に再利用する。

なんですが、3番目は、まさしく、one rule in one placeですね。
#ぱくっていいですか。w

ルールのオーバーロード(複数定義)は、シンプルさの原則に
反しているので、効率うんぬんではなく、ルール指向には、
好ましくないということにさせてください。
---
Yasuo Higa <[E-MAIL ADDRESS DELETED]>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.




Seasar-user メーリングリストの案内