[Maple-dev: 61] Re: インジェクションの簡素化

Zurück zum Archiv-Index

TAKAHASHI Kunihiko takah****@knosp*****
2005年 10月 17日 (月) 22:57:17 JST


高橋(kunit)です。

#私もまけずにながーくなりました。
#みなさん、がんばって読んでくださいまし。

On Sun, 16 Oct 2005 22:33:42 +0900
Hawk <w3l_admin****@hawk*****> wrote:

> 1) publicなプロパティに対するインジェクションを認めるか
> 
> 2) setterだけの場合にインジェクションを認めるか(DI2方式)
> 
> 3) publicなプロパティに対するインジェクションは
>  意図しないインジェクションが発生する危険や、
>  DIによって設定された値をリクエストパラメータで
>  上書きしてしまう危険が比較的大きい。どう対処するか
> 
> 先に結論を述べますと、以上の点に対する私の提案は
> 1), 2) をともに認め、かつ 3) に対しては
> 「リクエストパラメータのインジェクションにおいては、
>  対象となるプロパティの値が null の場合のみに限定する(※1)」
> ことで対処しようというものです。
>
ここまで異議なしです。

setterがある場合にプロパティの名前まで見に行く必要は
別にないかと思いますね。(去年の今頃はいると思っていたが
あっさり宗旨替え)

> publicなプロパティに対するインジェクションについて、
> まず異論はないだろうと思われる次の2点を暗黙的に前提としています。
> 4) setterがある場合はsetterを優先する
> 5) 値がオブジェクトの場合は参照を代入する
> 
もう一つ分かりやすいルールということで、guesswork 0.0.1 系で
採用されていた以下のものを提案します。

6) 外部から値をセットされては困るプロパティはアンダースコア(_)ではじめる

これがあれば、基本publicなプロパティをバンバンつくってリクエスト
パラメータやDIContainerからのインジェクションをうけつつ、
受け取った際に合わせて特殊なことをしないといけないときには
setterを準備して、上書きされたくないものをアンダースコアで
よけるという分かりやすいルールになるかなと。

ここまでは、今までの記法を変更・拡張せずに新しくつくるものは楽が
できるようにというアプローチでしたが、記法を拡張するとすると
熊倉さんのブログで提案されていたものもちょっとMixしてみるのは
どうかなと思います。「リクエストパラメータをインジェクションしたいと
いうのを明示することもできるようにする」というものです。
(合わせ業のSessionへも同時書き込みってのはどうしますかね・・・)

#元ねたはこちら ⇒ http://hatotech.org/kumatch/archives/000522.html

例えば、こんな感じ

--- ここから

[Action]
mail = request:m

--- ここまで

何らかの制限下(例えば携帯案件)でリクエストパラメータをそのまま
変数名にしたくない(GETしか使えない状況に追い込まれて、パラメータを
「m」1文字にしないとやばい・・・みたいな)ときには、上記のように
すると「m」を「mail」という真っ当なプロパティに代入できると。

これもあると便利かなと思います。(熊倉さんがそのような修正をされている
のは、まさしく携帯案件でのこういうパターンなんじゃないかと想像しつつ)

#InjectRequestの「foo = 」でとぎれてるものは「foo = request:foo」の
#省略系ってことで・・・

あと(まだあるんかい・・・)、以前ブログでは書いたんですが、
「ref:」表記に関して、受け取るものとDIContainer内の別名が同じ場合は
省略可能にできないかと。つまり「bar = ref:bar」ならば書かなくても
いいってやるとさらに手間がはぶけるかなと。

受け取る変数名とDIContainer内の別名をわざわざ変えたい場合のみ明示する
ってので困ることはないかなと思うんですが、困ることってありますかね?

とりあえず思うことをつらつらと書いてみました。
ご意見あれば、どんどんいただければと思います。

#Maple 3.1はこのインジェクション周りと初期化のdefineたくさんと
#ディレクトリ定義あたりをばっさり変えてリリースかなと思っています
---
TAKAHASHI Kunihiko
KNOSPEAR Inc.




Maple-dev メーリングリストの案内
Zurück zum Archiv-Index