[Seasar-user:11249] Re: 【 DBFlute 】 Behavior と DAO の関係について
佐藤聖
[E-MAIL ADDRESS DELETED]
2007年 10月 24日 (水) 13:57:55 JST
佐藤(聖)です。
お世話になります。
小谷様、久保様
ご返信、ありがとうございます。大変助かりました。
せっかくですのでお言葉に甘えて、もう少しだけ確認・質問
させていただこうと思います。
まず自分の立場(質問意図)ですが
>「Seasar2(DI+AOP+α)としては使ってなく」という言葉には、
>DIコンテナとかの機能は使わないけどDBFlute+S2DAOというO/Rマッパだけ
>利用したい、という思いがあるのではないかと勝手ながら想像します。
>それはそれで一つのニーズだと思います。
>
>先述の通りSeasar2を全く使わずにS2Daoが動作することは無いのですが、
>要は「内部ではSeasar2を使っているけどプログラマは意識する必要がない」
>ということであれば、やりたいことが満たせるのではないかと思います。
でほぼ合っています。
そして、立場的には自分が「もう一踏ん張り」するべき立場です。
(なので、本来はSeasar2の全体像をもっとしっかり把握すべきですし、
これは避けるべきではないですよね)
>Seasar(S2Container)、ということになると思います。
>BehaviorにDAOのsetterが用意されているのは
>基本的にはインジェクション(DIコンテナが自動的にインスタンスをセットする)
>するためです。
>(テストなどで何か臨時のDao実装クラスを作ってセットすることはあるかもしれませんが)
おそらく上記に回答内容は集約されているのだと思いますが、
この場合はつまり、
S2コンテナからBehaviorを取得するタイミングで、
BehaviorにDAOがインジェクションされるという理解で合っていますでしょうか?
(つまりS2コンテナからDAOを直接取得はしない)
>(テストなどで何か臨時のDao実装クラスを作ってセットすることはあるかもしれませんが)
プログラマの方に説明無しでとりあえずサンプルを作ってもらったところ、
明示的にDAO実装クラスをセットする実装だったので、おかしいと思い、
質問をしたというのが直接の流れです。(上記の通りBehavior取得タイミング
でのインジェクションだと思っていた)
>DBFluteに「BFinder」というクラスがいます。
>これを使うと、DIコンテナの存在を意識せずに
>「Behavior/Daoの生成・設定」と「Behaviorの取得」ができます。
こちらのクラスを今回のような目的で使うのは、想定範囲内でしょうか?
正しい使い方であれば飛びつきたいところなのですが、
通常は「コンテナ経由で明示的に取得」であれば、そちらで行おうと
考えています。(あまり隠蔽しすぎると、別のところでつまづいた
時に困りそうなので)
以上、いろいろすみません。よろしくお願いいたします。
2007/10/24 10:19:38 +0900 にkoyak <[E-MAIL ADDRESS DELETED]>さんに頂いた
「[Seasar-user:11236] Re:【DBFlute】BehaviorとDAOの関係について」への返事です。
>佐藤(聖)さん
>
>小谷と申します。
>
>>DAOの生成は誰の責務になりますか?
>Seasar(S2Container)、ということになると思います。
>BehaviorにDAOのsetterが用意されているのは
>基本的にはインジェクション(DIコンテナが自動的にインスタンスをセットする)
>するためです。
>(テストなどで何か臨時のDao実装クラスを作ってセットすることはあるかもしれませんが)
>
>DBFluteでソースコードを自動生成すると
>dbflute.dicon上にBehavior,DAOコンポーネントが記述されるため、
>BehaviorへのDAOのインジェクションが行なわれます。
>
>もっと抽象的なレベルでのご質問でしたらごめんなさい。
>
>07/10/24 に Kiyoshi Sato<[E-MAIL ADDRESS DELETED]> さんは書きました:
>> 佐藤(聖)と申します。
>>
>> 大変に初歩的な質問でお恥ずかしいですが、
>> DBFluteのBehaviorとS2DAO(DBFlute的にはBsDAO、ExDAOパッケージ)
>> の関係でご質問です。
>> (この後実際にSample等を追って確認するつもりなのですが、ちょっと
>> だけショートカットしようとしてまして・・・)
>>
>> DBFluteの役割図、及びS2DAOの役割からすると
>>
>> S2DAO→DBとのアクセスの抽象化
>> Entity→Query結果(というより単にDomainデータ)の抽象化
>> ConditionBean→Queryの拡張
>> Behavior→DAOとのFacade
>>
>> と、雑ですが思っています。
>>
>> BehaviorとDAO、Entity、ConditionBeanは一組のセットだと思うのですが、
>> この際DAOLayer全体の利用オブジェクトから見たときに
>> DAOの生成は誰の責務になりますか?
>> (Behavior or 利用オブジェクトの2択だと思っている)
>>
>> イメージだけだとBehaviorが生成も隠蔽(と書くと言葉悪いですが)している
>> ように考えていましたが、BehaviorにはDAOをセットするメソッドもあり、
>> 悩んでいます。(そして、ちょっと真面目にSampleソースを追う予定です)
>>
>> 多分ハイ、イイエというレベルの質問だと思うのですが、
>> ご教示いただければ助かります。
>>
>> # ちなみにSeasar2(DI+AOP+α)としては使ってなく、DBFlute=S2DAOだけ
>> # 使ってたりします。機会があればいろいろフル適用してみたい・・・。
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
>_______________________________________________
>Seasar-user mailing list
>[E-MAIL ADDRESS DELETED]
>https://ml.seasar.org/mailman/listinfo/seasar-user
========================================================
NEC 公共システム事業部 パッケージ開発第二グループ
佐藤 聖 ([E-MAIL ADDRESS DELETED])
内線番号 8-10-26538 文書メール番号 10-26500
外線番号 (03)3798-2935 FAX 8-10-26509 (03)3798-6781
========================================================
Seasar-user メーリングリストの案内