[PHP-users 30823] Re: ビジネスロジック層とDao層とPagerについて

yonekawa tcgrim @ gmail.com
2006年 11月 29日 (水) 09:41:16 JST


木内 様

yonekawaです。

> いきなり余談ですが、Seasarカンファレンス2006 autumnで
> 「明日からはじめるSeasar.PHP」の講師だったyonekawaさんですよね!
> あの時の講義はとても参考になりました!Seasar、いいですよね:-)
おお、ありがとうございます。
Seasar.PHPをどんどん使ってやってください。

> Daoクラスまで作って、その中にActiveGatewayインスタンスを置いていた事が今
> 更ながら恥ずかしく思えてきました。
ActiveGatewayの前に1個はさむのも悪いことじゃないと思いますよ。
ただロジッククラスがあるということですし、そちらがその役割を担ったほうがシンプルかなと思います。
PHPであまりガチガチやると複雑になりますからDBにアクセスするのはDao層と割り切ったほうがスッキリしますよ。

ところでActiveGatewayってActiveRecordパターンの実装じゃないんですか?
だったらドメインロジックもActiveGatewayに記述できたりしないのかな。
使ったことないのとActiveRecordパターンを勘違いしてる可能性があるのでわかりませんが。

> そうですね、現在僕はPEAR::Pagerを使用しているのですが、すべてロジック層
> +テンプレート内での見た目調整に終始している感じです。
なるほど−。それはそれでページングに専念できるので便利かなと思います。

> けど、理想と言っておいてなんですが、Dao層の返却するDtoがPagerの機能も包
> 括しているというのは、実際どれくらい理にかなった手法なんでしょうか?
そうですね。
ページングはViewに関係の深いものなのでS2Dao.PHP5と連携する意味では
あまりページング機能を持たせたものを返すのはよくなかったりします。
> S2Pager.PHP5の、「Dao層の返却する結果をフィルタリングし、ページ遷移に必
> 要なメタ情報を返却する」というのがなんだか一番いいような気がしてきました。
ちょっと僕が勘違いしてたみたいですが、今検討してるのはこれですね。
LimitとかhasNext程度のメタ情報をデータにくっつけて返す感じです。

> しかし、やはりPage遷移を実現するまでの行程がちょっと長い気がしてしまいま
> した。
> ViewHelperクラスがもうちょっと頑張れないものかというのが素直な感想です。
> うーん、そこらへんはPEAR::Pagerを使った人の意見かもしれないですが。
> やはり、リンクの自動吐き出しは、便利なんだよなあ。。。
リンクの自動吐き出しは確かに便利で一度実装しようと思いました。
ただページャのタグってシステムによってまちまちで、
タグを出力しようとするとどうしても設定や引数が多くなるので挫折しました。
この辺はもうS2Pagerが担うよりはSmartyのプラグインを提供するとか別のアプローチでいいかなというのが僕の意見です。

PEAR::Pagerはこの辺うまくやってるんでしょうか。
簡単にサンプルとかソース見た限りではやっぱり設定する項目の多さが目立った気がするので・・・

--
yonekawa <tcgrim @ gmail.com>
blog: http://d.hatena.ne.jp/yonekawa/

06/11/28 に 木内智史<samurai @ don-quijote.jp> さんは書きました:
> yonekawa 様
>
> ご返事ありがとうございます。
> いきなり余談ですが、Seasarカンファレンス2006 autumnで
> 「明日からはじめるSeasar.PHP」の講師だったyonekawaさんですよね!
> あの時の講義はとても参考になりました!Seasar、いいですよね:-)
> と、余談は置いておいて、
>
> >> Dao層については色々意見があると思いますが、
> >> O/RマッパーはれっきとしたDao層だと思われます。
> >> モデル層をロジックとDaoに切り分けたのであれば、
> >> 重要なのはSQLを記述するかどうかではなく、
> >> データストアへのアクセスをDao層が担うことだと思います。
> >> #S2Dao.PHP5は2Way SQLで他のO/Rマッパーと違ってSQLを
> >> 別で書くこともできますが。
>
> やっぱり、そうですよね。。。
> Daoクラスまで作って、その中にActiveGatewayインスタンスを置いていた事が今
> 更ながら恥ずかしく思えてきました。
> 「まわりくどいなあ」なんてぼやいていたんですが、やはりまわりくどかったと、
> これからは、"O/Rマッパー = Dao"という認識でコーディングをしていける
> ことにほっとしています。
>
> >> PEAR::PagerとかだとDao層から受け取ったデータの
> >> フィルタリングもロジックやコントローラになるんでしょうか?
>
> そうですね、現在僕はPEAR::Pagerを使用しているのですが、すべてロジック層
> +テンプレート内での見た目調整に終始している感じです。
> ただ、やはりこの形だとPEAR::Pagerに依存する部分が大きく、データ取得部分
> に絡めることが一切できないために、いちいち、TotalRowsのセットなど、
> 「さっき取得したんだからわかってよね!」という不便感がいなめません。
>
> >> S2PagerがS2Dao.PHP5の結果をフィルタリングして、
> >> ページングに必要最低限なデータは返してくれるので、
> >> これをロジックとかコントローラで加工すれば十分だと思います。
>
> そうですね、僕も同じような意見なんです。
> だから、PEAR::Pagerを使用しながら、どうしてこんなめんどくさい事せにゃな
> らなんのだと、そしてリンクまではき出してくれる便利さに逆に、そこまでして
> もらんでも…、なんて思ってたりしてました。
>
> >> > 理想としましては、Dao層の返却するDTO自体が、Pagerの機能を包括しているこ
> >> > となのですが、
> >> 一応これは検討中です。
>
> 期待してます!
> けど、理想と言っておいてなんですが、Dao層の返却するDtoがPagerの機能も包
> 括しているというのは、実際どれくらい理にかなった手法なんでしょうか?
> このメールを書きながらも考えたのですが、アプローチの仕方としては、
> S2Pager.PHP5の、「Dao層の返却する結果をフィルタリングし、ページ遷移に必
> 要なメタ情報を返却する」というのがなんだか一番いいような気がしてきました。
> そこらへん、皆様どうお思いでしょうか?
>
> >> S2Pagerとの連携もサンプルが公開されているので
> >> 一度ご覧になってみてはいかがでしょうか?
> >> http://wiki.s2php5.jp/s2base.php5/s2pager.php5_withsmarty
>
> ありがとうございます:-)
> これは、かなり参考になりました!
> しかし、やはりPage遷移を実現するまでの行程がちょっと長い気がしてしまいま
> した。
> ViewHelperクラスがもうちょっと頑張れないものかというのが素直な感想です。
> うーん、そこらへんはPEAR::Pagerを使った人の意見かもしれないですが。
> やはり、リンクの自動吐き出しは、便利なんだよなあ。。。
>
>
> ============================================================
> <<<Original Message>>>
> [From] : yonekawa <tcgrim @ gmail.com>
> [Time] : 2006-11-27 20:08:57
> [件名] : [PHP-users 30809] Re: ビジネスロジック層とDao層とPagerについて
> > はじめまして、yonekawaと申します。
> >
> > > SQL発行などはすべてActiveGatewayがおこなってくれるために、Dao層自体にSQL
> > > の記述が一切ありません。こういった状況下においてDao層は果たして有効なの
> > > でしょうか?それとも、O/RマッパーをDao層と定義してもよろしいのでしょうか?
> > Dao層については色々意見があると思いますが、O/RマッパーはれっきとしたDao層だと思われます。
> > モデル層をロジックとDaoに切り分けたのであれば、重要なのはSQLを記述するかどうかではなく、
> > データストアへのアクセスをDao層が担うことだと思います。
> > #S2Dao.PHP5は2Way SQLで他のO/Rマッパーと違ってSQLを別で書くこともできますが。
> >
> >
> > > そしてもう一つの質問はDao層にどのようにPagerをからませるべきかです。
> > Dao層とPagerの位置づけはなかなか悩みどころですね。
> >
> > 僕はそれほどきっちりとする必要はないと思っていて、
> > S2PagerがS2Dao.PHP5の結果をフィルタリングして、ページングに必要最低限なデータは返してくれるので、
> > これをロジックとかコントローラで加工すれば十分だと思います。
> > 最低限のデータで不便なときはPagerViewHelperというクラスに便利なメソッドも用意されているのでそこまで困ったことはないです。
> >
> > PEAR::PagerとかだとDao層から受け取ったデータのフィルタリングもロジックやコントローラになるんでしょうか?
> > そっちはあまり詳しくないです。
> >
> > > 理想としましては、Dao層の返却するDTO自体が、Pagerの機能を包括しているこ
> > > となのですが、
> > 一応これは検討中です。
> > S2Dao.PHP5はデータをJsonやYamlで返すことができるので、そのフィルタのひとつにPagerをなんとか組み込めないかなーと妄想してます。
> >
> >
> > ModelをDao層とロジックに分離するということですが、S2Base.PHP5というプロダクトにちょうど同じような構成の実例があります。
> > モデルにS2Dao.PHP5、Service(Logic)はPure PHP、ViewにSmartyが使われています。
> >
> > S2Pagerとの連携もサンプルが公開されているので一度ご覧になってみてはいかがでしょうか?
> > http://wiki.s2php5.jp/s2base.php5/s2pager.php5_withsmarty
> >
> > --
> > yonekawa <tcgrim @ gmail.com>
> > blog: http://d.hatena.ne.jp/yonekawa/
> >
> > 06/11/27 に 木内智史<samurai @ don-quijote.jp> さんは書きました:
> > > いつもお世話になっております。木内と申します。
> > > 普段はやりとりを覗いているだけなのですが、今回コーディング中に悩んでしまっ
> > > て、初の投稿をさせていただきます。よろしくお願いいたします。
> > >
> > > 今回質問させていただきたいことは、
> > > 各コーディング層(?)の切り分けを皆さんどのように行っているのでしょうか?
> > > という事です。
> > > 現在フレームワークなどによって、「MVCの切り分け」が重要とされていますが、
> > > M(モデル)層においてさらに、
> > >
> > > ・ロジック層
> > > ・データアクセス層
> > >
> > > の二つに切り分ける事が可能だと思います。
> > > そこで僕は「よし、分けよう」と思い、例えば一つの機能のコンポーネントを用
> > > 意する場合、
> > >
> > > ・Component_Logic
> > > ・Component_Dao
> > >
> > > という二つのクラスを作成し、SQL発行などは全てDao層において集中することを
> > > 心がけています。
> > > ここで、1つめの悩みがでてきます。
> > > 僕はフレームワークMapleを使用して開発を行っているのですが、Mapleには
> > > ActiveGatewayという優れたO/Rマッパーが付属(?)しています。
> > > SQL発行などはすべてActiveGatewayがおこなってくれるために、Dao層自体にSQL
> > > の記述が一切ありません。こういった状況下においてDao層は果たして有効なの
> > > でしょうか?それとも、O/RマッパーをDao層と定義してもよろしいのでしょうか?
> > > S2Dao.PHP5はO/Rマッパーだと思いますので、そういう意味ではやはり、
> > > O/Rマッパー = Dao
> > > という認識を持つのですが、誤りはないでしょうか?
> > >
> > >
> > > そしてもう一つの質問はDao層にどのようにPagerをからませるべきかです。
> > > これに関しては、S2Pager.PHP5とS2Dao.PHP5の絡みに詳しい方がいらっしゃった
> > > なら解説いただけると嬉しいです。
> > > 理想としましては、Dao層の返却するDTO自体が、Pagerの機能を包括しているこ
> > > となのですが、皆さんはどのうにDao層とPagerを絡めておりますでしょうか?
> > > Pagerに使用するクラス(自作、PEAR::Pager、S2Pager.PHP5など)も同時に教え
> > > ていただけると嬉しいです。
> > >
> > > 以上、ちょっと質問が長くなりましたが、よろしくお願いいたします。
> > >
> > > --
> > > 木内智史 <samurai @ don-quijote.jp>
> > >
> > > _______________________________________________
> > > PHP-users mailing list  PHP-users @ php.gr.jp
> > > http://ml.php.gr.jp/mailman/listinfo/php-users
> > > PHP初心者のためのページ - 質問する前にはこちらをお読みください
> > > http://www.php.gr.jp/php/novice.php3
> > >
> > _______________________________________________
> > PHP-users mailing list  PHP-users @ php.gr.jp
> > http://ml.php.gr.jp/mailman/listinfo/php-users
> > PHP初心者のためのページ - 質問する前にはこちらをお読みください
> > http://www.php.gr.jp/php/novice.php3
>
> ============================================================
>
> --
> 木内智史 <samurai @ don-quijote.jp>
>
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
>


PHP-users メーリングリストの案内