[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 06/03 19:27 / Filesize : 221 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【PHP】フレームワークについて語るスレ【総合】



1 名前:nobodyさん [2005/08/10(水) 02:21:08 ID:CBjrwwHd]
※フレームワーク
Phrame本家
phrame.sourceforge.net/
Mojavi Project
www.mojavi.org/
mojavijapan
mojavi.p0t.jp/
Agavi本家
agavi.org/
Agavi.JP
agavi.jp/
[ 日本発 ] Maple Project
kunit.jp/maple/
[ 日本発 ] Ethna -PHPウェブアプリケーションフレームワーク-
ethna.jp/ethna-tutorial-startup-practice1.html

※関連スレ
【PHP】フレームワークMapleに舌鼓
pc8.2ch.net/test/read.cgi/php/1122105465/
【PHPフレームワーク】Ethna【スケルトン自動作成】
pc8.2ch.net/test/read.cgi/php/1123070439/
PHPでオブジェクト指向プログラミング
pc8.2ch.net/test/read.cgi/php/1113724557/

その他>>2-5参照汁

777 名前:nobodyさん mailto:sage [2005/12/13(火) 01:56:13 ID:???]
俺もactionでrequest派。
最初はmodelでやっていたが
そうなると、起点となるactionを見ただけでは
どんなパラメータをいじっているのかが分からず、
流れを把握しにくくなったから。
またリクエストパラメータはどちらかといえば
プレゼンテーション層に属するものなので
プレゼンテーション層であるactionで受け取るのが理にかなっている
とも思う。
バリデーションやコンバートはactionでやってるんだから
ノータッチでmodelに渡していても疎結合とは言えないのでは?
むしろactionで受け取ってmodelに渡すというレイヤパターンにした
方が疎結合といえる気がする。

778 名前:nobodyさん mailto:sage [2005/12/13(火) 10:18:09 ID:???]
model で request 処理すると,model の unit test がやり辛くなると思う
それって context と request の両方を外部に依存することになるし

action で request を処理しちゃえば model は request の「値」のみに依存することになり
より疎結合になる

# なんてことを周囲に喋ると「日本語喋れ」とか言われる罠w

779 名前:nobodyさん mailto:sage [2005/12/13(火) 11:29:59 ID:???]
記述が楽=疎結合じゃないんだよね
プロトコルを増やすわけだからむしろ記述は面倒くさくなりがち

780 名前:nobodyさん mailto:sage [2005/12/13(火) 14:13:53 ID:???]
>>773
フレームワークが許容しているのと、理想的な設計との間には
隔たりがあるってことを理解するべき。

元の質問は
> どっちがmvc的に正しいですか?
‥なので、MVC 的には action に依存しない方が理想だろうね。

>>778 のいう「unit test がやり辛い」ってのは、model がフレームワークと
密接に結合していて使い勝手が悪い証拠。結合度が高いので、再利用しずらい
(再利用する時に、間接的にフレームワークにも依存することになる)。

model と action を分離しておけば、例えば、Web アプリとは別に DB に対する
バッチ処理を PHP で書く必要がでてきた時に model を流用できる。

ただ、理想的な設計が、即座に現場で適用されるべきかというと、それは
また別問題だけどな。


781 名前:nobodyさん mailto:sage [2005/12/13(火) 18:51:28 ID:???]
>>780
いや、疎結合とかはlib側で考えるもんなんじゃないの?
>フレームワークが許容しているのと、理想的な設計との間には
>隔たりがあるってことを理解するべき。
許容じゃなくて、意図的に実装してるんだとおもうんだけど。
modelは明らかにactionと密接な連携を取るためのものだと思うし。

>model と action を分離しておけば、例えば、Web アプリとは別に DB に対する
>バッチ処理を PHP で書く必要がでてきた時に model を流用できる。
その流用はlibでつくったもののがやりやすいよね。

782 名前:nobodyさん mailto:sage [2005/12/13(火) 18:54:29 ID:???]
>>777
自分は逆にactionはどんなmodelを使ってるかの道しるべとして使ってるから
流れ把握は全然困らない。てかむしろしやすい。


783 名前:nobodyさん mailto:sage [2005/12/13(火) 18:59:51 ID:???]
てか、そもそもlibの存在忘れて疎結合とか言ってない?

784 名前:nobodyさん mailto:sage [2005/12/13(火) 19:08:07 ID:???]
libって何さ、ライブラリ?

785 名前:nobodyさん mailto:sage [2005/12/13(火) 19:10:01 ID:???]
なにこの流れ。
スゴいお勉強になるんだけお。



786 名前:nobodyさん mailto:sage [2005/12/13(火) 19:11:38 ID:???]
>>780の言う「許容」ってのはModel内で$this->getContext()->getRequest()できちゃうって話だよね?
>>781と微妙に噛み合ってないみたいだけど。
つーかMojaviに関して言えばContextに一貫性を持たせようとした結果、たまたまModelの中でもRequestが取得できてしまうとも見れると思う。
その意味ではMojaviの欠点の一つかもしれんな。
まあ>>773から反論がない限りはgetRequestはActionでやるべきってのは満場一致でしょ。
その結論に至る思考プロセスが個々人いろいろなのがおもしろいなw

787 名前:nobodyさん mailto:sage [2005/12/13(火) 19:18:52 ID:???]
>>786
ん?かみ合ってないのか?
>つーかMojaviに関して言えばContextに一貫性を持たせようとした結果、たまたまModelの中でもRequestが取得できてしまうとも見れると思う。
つまり、Requestだけはmodelでやるべきではないってこと?getControllerやgetUserはありで?
だったらかみ合ってないてのはわかるんだけど。

>>784
いや、libはautoloadで定義するやつよ。
こいつにこそ疎結合を求めるもんだとおもうんだけど…

788 名前:nobodyさん mailto:sage [2005/12/13(火) 19:21:40 ID:???]
>>786
ちなみにlibとmodelはどう区切ってる?

789 名前:nobodyさん mailto:sage [2005/12/13(火) 19:34:56 ID:???]
M2のactionChainがなくなったのも、デコレータだけじゃなくgetModelが
追加されたからなんだと思うし…

790 名前:786 mailto:sage [2005/12/13(火) 19:40:45 ID:???]
>>787
いや、「かみ合ってない」って言葉が気に障ったなら気にしないでくれ。
疎結合の話に対してではなく、request云々の方で感じたこと。
> 許容じゃなくて、意図的に実装してるんだとおもうんだけど。
の部分ね。

modelとlibのどちらに疎結合を求めるかってのにはノーコメント。
俺の場合はlibにフレームワークのコンポーネントから外れた自分クラスとかは入れないんで。
多くはModelで、あとはSmartyの実装が微妙だったころに改造したViewとか。(最新バージョンがどうなってるのかはチェックしてない)。

> つまり、Requestだけはmodelでやるべきではないってこと?getControllerやgetUserはありで?
まあそういう風に見るとrequestとuserの非対称性が浮き彫りになるが、俺の場合は結果的にはそういう方針でやってるよ。
Modelの中でgetRequestを呼び出すのはせいぜいsetErrorするときだけだな。

>>788
前述の通り、俺的には「区切ってる」っていう感覚ではあまりない。
共通して使うものをlibに入れるだけ。

791 名前:nobodyさん mailto:sage [2005/12/13(火) 19:51:24 ID:???]
フレームワークだから
ある程度の自由度を残してるのは当然ともいえるし
どっちもアリっちゃアリだな。

792 名前:nobodyさん mailto:sage [2005/12/13(火) 19:54:09 ID:???]
>>790
なるほど、そういうことね。確かに勘違いだわ。
でも、
>まあそういう風に見るとrequestとuserの非対称性が浮き彫りになるが、俺の場合は結果的にはそういう方針でやってるよ。
getUserもmodel内で使ってるんだ?
ますますわからんくなってきた…

ちなみに
forum.mojavi.org/index.php?showtopic=1280&hl=getmodel

ここにあるようなソースはアリなんだよね?


793 名前:nobodyさん mailto:sage [2005/12/13(火) 19:56:03 ID:???]
context自体を渡すことがおかしいって言ってるのかと勘違いしてた。


794 名前:nobodyさん mailto:sage [2005/12/13(火) 19:59:28 ID:???]
どっちにしても、自分の場合、actionはアダプタじゃなくてmodelで、
action内が複雑になりそうなときmodelに助けを求めるって感じでやってるから。
例えmodel内でgetRequestしても自然なつもりなんだけどなぁ

795 名前:768 mailto:sage [2005/12/13(火) 20:11:31 ID:???]
じつはagaviでした。
agaviだとみんな食いついてくれないと思ったので.
結果予想以上に皆さんの意見が聞けてよかった。



796 名前:nobodyさん mailto:sage [2005/12/13(火) 20:13:34 ID:???]
>>792
うーん、そこのソースのマズイ部分ってとりあえずどこ?w
つーかgetUserをModelでやるのっておかしいかな?言われてみると少し迷うな。
ログインの処理をする専用のModelとかそのままsetAuthenticatedしてるのと、あとはaddCredentialみたいなのもModelの中でちらほらやってしまっている。
もろにビジネスロジックかと思うんだが。

>>794
まあどういう風にやっても間違いってことはないと思う。
Actionにビジネスロジックを書いても結果的には「ロジックとデザインの分離」っていう大元の目的は達成されてるわけだし。

797 名前:nobodyさん mailto:sage [2005/12/13(火) 20:28:15 ID:???]
>>795
みなさんというか、2、3人だと思うけどね。自分含めてw


798 名前:nobodyさん mailto:sage [2005/12/13(火) 20:31:02 ID:???]
>>797
まーこの板はそういうとこだよなw

799 名前:nobodyさん mailto:sage [2005/12/13(火) 20:34:29 ID:???]
>>796
>うーん、そこのソースのマズイ部分ってとりあえずどこ?w
その感想自体が答えですw さんきゅw

>ログインの処理をする専用のModelとかそのままsetAuthenticatedしてるのと、あとはaddCredentialみたいなのもModelの中でちらほらやってしまっている。
まぁたしかにgetUserはその辺の機能があるからね。言われれば気持ちはわかる。

ちなみに開発人数はどれくらい?
自分のとこの場合人数が5人で中途半端だから、下手に縛り設けようにもうまく機能しないことが多いんだよね…
フレームワークで許されている権利は使ってよしってことにしてるからってのもあるかも。


800 名前:nobodyさん mailto:sage [2005/12/13(火) 20:35:06 ID:???]
userをmodelでいじるのは全然おかしくないと思う
つまるところセッションだし。
requestはブラウザから直接送られてくるデータだから、
いきなりmodelにいじらせるには生々しすぎる感じがするな。

801 名前:nobodyさん mailto:sage [2005/12/13(火) 20:40:49 ID:???]
>>800
いや、それだと話がループする…

802 名前:nobodyさん mailto:sage [2005/12/13(火) 20:42:35 ID:???]
>>800
そこはmodelで疎結合かどうかの話でしょ?

803 名前:nobodyさん mailto:sage [2005/12/13(火) 20:45:33 ID:???]
>>800
>requestはブラウザから直接送られてくるデータだから、
おいおい大事なget,setAttributeはどこいった?

804 名前:nobodyさん mailto:sage [2005/12/13(火) 20:53:12 ID:???]
ひょっとして、getRequest=ブラウザからのデータで話進められてたの?


805 名前:nobodyさん mailto:sage [2005/12/13(火) 21:18:59 ID:???]
ああ、attribute忘れてたw
内部パラメータとしてのattributeならmodelでいじってもおかしくはないよね
viewに渡すためのコンテナとしてなら、
modelから受け取ってactionでこめこめするのがいいと思う



806 名前:nobodyさん mailto:sage [2005/12/13(火) 21:31:18 ID:???]
modelでごにょごにょしたものはactionにいくのか?
それともviewか?

807 名前:nobodyさん mailto:sage [2005/12/13(火) 21:38:24 ID:???]
>>792-793
model に context が渡ってること自体が気に入らない。理由は >>796 の人が
述べてる理由が近いかな。

>>805
attribute も model じゃ触らない。ビジネスロジックはコントローラに封じ込
めるべきってのは大体の人が賛成してくれると思うけど、attribute を
ビジネスロジックに一切関係ない使用例を見たことがない。もしあるなら
示してくれると、すごく嬉しい。

一般的(≒ Java の世界)にはそういう流れになってない?
モデルは POJO (getter/setter だけのオブジェクト) にして、必要に応じて
AOP でDAO や O/R マッピングしなさい、と。


808 名前:nobodyさん mailto:sage [2005/12/13(火) 21:51:40 ID:???]
Javaとは言語仕様も実際の使われ方も違うのに、StrutsやIBMのホワイトペーパーと無理にあわせてもしょうがない。

809 名前:nobodyさん mailto:sage [2005/12/13(火) 21:55:50 ID:???]
>>807
>model に context が渡ってること自体が気に入らない。
えぇ?なんで気に入らないのに
>>796の人と同意なの?
根本的におかしいぞそれ。

810 名前:nobodyさん mailto:sage [2005/12/13(火) 21:56:59 ID:???]
>>807
つまり、>>792のソースもおかしいってことだよね?

811 名前:nobodyさん mailto:sage [2005/12/13(火) 21:58:05 ID:???]
>>806
actionにいってからviewじゃない?
直接viewにいくのはなんか気持ち悪いな
>>807
Model=POPOなの?
そこまで疎結合にするならModelをextendsする意味がないような…
俺はModel≒ビジネスロジックという認識だった。

812 名前:nobodyさん mailto:sage [2005/12/13(火) 22:00:37 ID:???]
一般的ではなくm3やagaviで開発する上での話をしているので、
>>807の話はお門違いなわけだが


813 名前:nobodyさん mailto:sage [2005/12/13(火) 22:04:25 ID:???]
mvc的に正しいのはって聞いてるんだから御門違いじゃないだろう

814 名前:nobodyさん mailto:sage [2005/12/13(火) 22:05:40 ID:???]
まぁ、お門違いじゃないにしてもおかしなこと言ってるのは確かだな

815 名前:nobodyさん mailto:sage [2005/12/13(火) 22:17:24 ID:???]
807は
モデルはフレームワーク自体からも疎結合である方がいいって意味だよね。
考え方は分からないでもないけど
そこまで疎にする必要がはたしてあるのか…
そもそもフレームワークを採用する時点で
全面的な依存を選択しているわけで、
モデルだけを疎結合することにどれほどの意味があるのか



816 名前:nobodyさん mailto:sage [2005/12/13(火) 22:17:28 ID:???]
javaが一般的ってのも今は大分微妙になってるけどなぁ

817 名前:nobodyさん mailto:sage [2005/12/13(火) 22:19:09 ID:???]
そもそもMVCモデルってそれぞれが密接に関連してるよなぁ
疎を考えるんなら777の言うようにレイヤーパターンで考えたほうが良いと思う
MVCパターンをレイヤーパターンに置き換えると
VCがプレゼンテーション層
Mがドメイン層とデータソース層
それぞれの層は独立していて別の層を知らないのが理想
actionはドメイン層とプレゼンテーション層の中間層かな?
だからactionは
プレゼンテーションからの入力(リクエストパラメータ)を受け取る
ドメインロジックを呼び出す
パラメータをドメインロジックに渡す
ドメインロジックでゴニョゴニョした結果をプレゼンテーションロジックに渡す
こんな流れがいいんじゃないかなぁ
結論、mojaviのModelクラスはイラネ

818 名前:nobodyさん mailto:sage [2005/12/13(火) 22:19:56 ID:???]
>>815
あぁ、激しく同意…
多分agaviも>>815みたいな思想があってああいう設計になってるんだと思う。

819 名前:nobodyさん mailto:sage [2005/12/13(火) 22:23:54 ID:???]
>>817
それだとactionがちょっとややこしくなっちゃわない?

820 名前:nobodyさん mailto:sage [2005/12/13(火) 22:33:04 ID:???]
>>815
>>817
おまいらユニットテストしないんですか?
>>819
むしろすっきりする
actionにロジック書くわけじゃないからね
あくまでAPIを呼び出して使うだけ
mojavi的にはこんな感じ
$id = $request->getParameter('id');
$service = new HogeService();
$hoge = $service->getHoge($id);
$request->setAttribute('hoge', $hoge);

821 名前:nobodyさん mailto:sage [2005/12/13(火) 22:34:10 ID:???]
>>817
最後の結論だけ良く分からない
Model=ドメインロジックで問題なくね?

822 名前:nobodyさん mailto:sage [2005/12/13(火) 22:36:37 ID:???]
>>820
autoload.iniが大変なことになりそうだ。


823 名前:nobodyさん mailto:sage [2005/12/13(火) 22:49:29 ID:???]
>>820
それってデータベースコネクションはどこでどうやって呼出してんの?


824 名前:nobodyさん mailto:sage [2005/12/13(火) 23:00:01 ID:???]
autoload.iniの項目が多いとやっぱり遅くなるの?
おれはできるだけ使わんやつは消しとるよ。

825 名前:nobodyさん mailto:sage [2005/12/13(火) 23:04:08 ID:???]
>>821
概念的にはその通りだけど
mojaviのModelクラスに依存したくないという意味でイラネということです

>>822
それすごく悩んだけど
自前のクラスローダーで解決したお

>>823
DB接続用クラスをSingletonで作成してどこからでも呼び出せるようにしてるよ
DB::getConnection()みたいな感じで
といってもどこからでも呼び出してるわけじゃないけどね



826 名前:nobodyさん mailto:sage [2005/12/13(火) 23:55:30 ID:???]
>>825
なんかもうそれ自分ルールだらけじゃん…
まぁ別にそれが悪いわけではないけど

827 名前:nobodyさん mailto:sage [2005/12/13(火) 23:58:11 ID:???]
>>825
>自前のクラスローダーで解決したお
それはautoload側をいじったのか、ロード関数みたいなのつくったのか

828 名前:nobodyさん mailto:sage [2005/12/14(水) 00:01:27 ID:???]
結論
>>825のやってることは、agaviのmodelで解決。
無駄な作業乙

829 名前:nobodyさん mailto:sage [2005/12/14(水) 00:34:57 ID:???]
もしかしてSingletonModelってクラス?
Singletonごときでなんであんなものに頼らなきゃいけないのか疑問・・・。
しかもグローバルに呼び出しできなくなるし

830 名前:nobodyさん mailto:sage [2005/12/14(水) 00:41:56 ID:???]
PHPでシングルトンってほぼ無意味だよな。

831 名前:nobodyさん mailto:sage [2005/12/14(水) 01:27:53 ID:???]
>>830
まあどちらかと言うと、インスタンス2つ以上作ろうとする方が頭どうかしてるもんな。
Controllerとか。

832 名前:nobodyさん mailto:sage [2005/12/14(水) 01:43:05 ID:???]
>>830
リクエスト毎にオブジェクトが生成->破棄されるという意味では無意味だな。
ログとかDBコネクションとかでは使えるけど、それもグローバル変数に入れとけばいいみたいな。


833 名前:nobodyさん mailto:sage [2005/12/14(水) 01:44:31 ID:???]
HTTPリクエスト単位で記憶が失われるPHPでは
シングルトンって「グローバル変数のオブジェクト指向版」みたいな意味しかない気がする
実際に役に立つのはDB接続みたいなリソース使いまわしくらいって印象が……

834 名前:nobodyさん mailto:sage [2005/12/14(水) 01:46:05 ID:???]
>>824
クラスが必要なときのみ読みこむようにその設定があるんだし、そんなに気にしなくてもいいのでは。
まぁ少ないほうが早いに決まってるけど。


835 名前:nobodyさん mailto:sage [2005/12/14(水) 03:49:22 ID:???]
>>825=>817
そこまで行くとMojaviの理念から外れてるし、それはもうmojaviから派生した>817のフレームワークであって、
とても「mojaviを使っている」とはいえないと思うが。
なのでmojavi(agavi)でMVCどうやるのか(requestをどう扱うか)っていう話においては参考にならない。

>>820
も同様
ただ、ユニットテストはMojaviの致命的な欠点だとおもう。

本題の"request"の扱いについてはModelはControllerを知るべきではない、
そして"request"はControllerである。よって"request"は"Model"で扱うべきではない。
とおもうが。

実際はModelでしかたなくrequest呼び出したことありますごめんなさい。
設計が悪かった。反省してます。



836 名前:nobodyさん mailto:sage [2005/12/14(水) 06:37:08 ID:???]
オブジェクトの依存性の話なのか設計上の規約も含めるのか判らん

837 名前:nobodyさん mailto:sage [2005/12/14(水) 06:44:24 ID:???]
誰か両方の意見をまとめてくり

838 名前:nobodyさん mailto:sage [2005/12/14(水) 07:15:24 ID:???]
いや、なんか感動。
疑問は晴れてないけど。

839 名前:nobodyさん mailto:sage [2005/12/14(水) 10:23:55 ID:???]
図にしてみたぞ♥

       Controller
         ↓
 Request ⇔ Action ⇔ Model ⇔ User,Database
         ↓
       Controller
         ↓
 Request ⇔ View ⇔ Model
              |
            ←|→
   プレゼンテー  |   ドメイン層、データソース層
   ション層     |
              |

俺にとってActionとはControllerの一部であり、Requestの受付とModelの呼び出し以外のことはしない。
Action::executeすげーシンプルウマー(AAry)。>>820>>835と基本的に同じ。
俺にとってModelとはMojavi内で唯一ビジネスロジックを担当する部分である。
ちなみにModel以外はデータ層に触りません!

840 名前:nobodyさん mailto:sage [2005/12/14(水) 11:25:24 ID:???]
Modelはどうまとめてる?
俺はOO的にうまいことまとまらない場合は
似たような関数をまとめてお茶を濁してる。

841 名前:nobodyさん mailto:sage [2005/12/14(水) 11:38:43 ID:???]
>>839
Model にビジネスロジック入れたら駄目じゃん。話にならん。

842 名前:nobodyさん mailto:sage [2005/12/14(水) 11:44:42 ID:???]
>>841
839じゃないけど
俺もModelはビジネスロジックを担当する部分という認識なんだが
きみのいうModelって何?

843 名前:839 mailto:sage [2005/12/14(水) 11:46:02 ID:???]
>>840
たしかに関数の入れ物に過ぎないModelができちゃうこともあるかもw
俺の場合はSean KerrのAction::executeのコメントで、
* Execute any application/business logic for this action.
*
* In a typical database-driven application, execute() handles application
* logic itself and then proceeds to create a model instance. Once the model
* instance is initialized it handles all business logic for the action.
*
* A model should represent an entity in your application. This could be a
* user account, a shopping cart, or even a something as simple as a
* single product.
っていうやつ(mojavi/action/Action.class.php)をけっこう意識しながらやってる。
Modelはentityを表すってのけっこうしっくりきてるかも。
つーか今読み返してみたら、Sean Kerr的にはActionでビジネスロジックもありっていうスタンスっぽいなw
ただ、基本はModel=ビジネスロジックでしょ。

844 名前:nobodyさん mailto:sage [2005/12/14(水) 12:08:56 ID:???]
訳:

Actionに対するアプリケーションロジック・ビジネスロジックの実行をします。

よくあるデータベースを用いたアプリケーションでは、execute()の中でアプリケーションロジックを扱い、続いてModelのインスタンスを生成します。
Modelの初期化をしたら後はその中で全てのビジネスロジックを扱います。

Modelはアプリケーション内のエンティティを表すようにすると良いでしょう。
例えば、ユーザーアカウント、ショッピングカートであったり、時には個々の製品といったシンプルなものであることもあるでしょう。

845 名前:nobodyさん mailto:sage [2005/12/14(水) 12:12:22 ID:???]
>>844
そうそう。
やっぱり841はビジネスロジックの定義を勘違いしてないか?
エンティティーのメソッドはすなわちビジネスロジックだし。
Model=ValueObjectと勘違いしてる気がする。



846 名前:nobodyさん mailto:sage [2005/12/14(水) 14:28:05 ID:???]
みんな言葉の定義が微妙に違ってるだけだと思う。
というか、レイヤとモデルを微妙に混同してるのかも。

ドメイン層のレイヤにビジネスロジックがあって、
そこで操作されるものがドメインモデル(エンティティ)。

これをそのまま実装に反映させるなら、
ドメインモデルとビジネスロジックは別クラスにするのが自然。
だけどケースバイケースで、ドメインモデルのクラスが
ビジネスロジックのメソッドを持つ実装にするのもあり。
どちらがいいかは一概には言えないと思う。


>>845
それは違うよ。
ValueObjectはどちらかというとドメインモデルではなく
プレゼンテーションモデル。

ドメインモデルをそのままプレゼンテーション層まで引きずってくる
設計方針ならValueObjectぽっく見えるかもしれないけど、
プレゼンテーションモデルをきっちりわける設計方針なら
>>841の言ってるモデルはドメイン層で閉じてるはず。


847 名前:nobodyさん mailto:sage [2005/12/14(水) 15:10:04 ID:???]
俺定義で議論してないでPoEAAを読め、ってことだ。


848 名前:nobodyさん mailto:sage [2005/12/14(水) 16:18:44 ID:???]
高いから譲ってくれ

849 名前:nobodyさん mailto:sage [2005/12/14(水) 16:45:40 ID:???]
O'ReillyのSafari Bookshelfに入れば$19.95で読めるよ。

850 名前:nobodyさん mailto:sage [2005/12/14(水) 17:12:47 ID:???]
日本語訳本買ったけど読んでねーや
ValueObjectがプレゼンテーションモデルってどゆ意味?
単に値を持たせるオブジェクトだから
どんな層にでも入ってくる汎用的なパターンだと思うんだが

851 名前:nobodyさん mailto:sage [2005/12/14(水) 21:59:44 ID:???]
> 単に値を持たせるオブジェクト

自説を立てるときはそれなりの手順を踏襲してほしい

852 名前:nobodyさん mailto:sage [2005/12/15(木) 02:19:59 ID:???]
>>839
>>843を意識してるんなら、Actionはドメイン層、データソース層に入ることもあるだろ

853 名前:nobodyさん mailto:sage [2005/12/15(木) 02:23:24 ID:???]
trac.agavi.org/trac.cgi/wiki/HowToSetupBasicAuthentication
この公式サンプルも、全然>>839みたいな定義になってねぇし

854 名前:839 mailto:sage [2005/12/15(木) 03:13:21 ID:???]
>>852
たしかにそうだね。それが
> つーか今読み返してみたら、Sean Kerr的にはActionでビジネスロジックもありっていうスタンスっぽいなw
と言った理由なんだけど。
ただ、俺自身はドメイン層の処理はModelでやる方針でやってるって話。
Actionでドメイン層・データソース層に手を出すのも利点があるなら大いに結構だとは思うよ。

>>853
えーっと一応言っておくけど>>839は設計(or実装)方針の話ね。
(それまでの議論の内容も多少加味したつもりなんだが偏見もあるかも・・・)
あと、そこのサンプルは>>844の「ユーザーアカウント」にあたるものをModelとして抽出せずにActionで済ませちゃってるんだね。
だから839と違って見えるってのも無理はないかも。
まあロジックが複雑になってきたらそんなことは言ってられないので俺は認証用に作ったModelを再利用してるよ。
必要ならそのModelをもう一段継承してカスタマイズとかできるのでそこそこ便利だし。

855 名前:nobodyさん mailto:sage [2005/12/15(木) 03:28:55 ID:???]
>>841に対して、はじめは何言ってるんだろうこの人…と、>>842
同じ気持ちでしたが、
www.microsoft.com/japan/msdn/practices/type/Patterns/enterprise/DesMVC.asp
ここを読んでみて>>841の言ってることがよくわかりました。
MVCの図にあるとおり
>ビューとコントローラの両方がモデルに依存していることに注意してください。ただし、モデルはビューとコントローラのどちらにも依存していません。
モデルは両方に依存していないものなんだね。
そう考えるとたしかに>>839の言ってる図は話にならない。
でも、それを言い出すとAgaviの設計自体がおかしいことになるね。




856 名前:839 mailto:sage [2005/12/15(木) 03:51:45 ID:???]
>>855
たぶんUMLを見慣れてる人が多いんだろうから誤解を与えたかもしれないけど、>>839は「依存関係」を表してるつもりじゃなかったんだなぁorz
Controller→Action→Controller→Viewってのは制御が移る順番。
他の⇔はデータの受け渡しであって、基本的にはメソッドの呼び出し+リターンなので制御が移る順番としても解釈できるかも。
>>855が依存関係の話を持ってきてくれたのでそれも考慮すると、⇔の矢印をすべて外側向きに変えたら少しはましになるかな?
矢印の意味は
・依存してる側→依存されてる側
・呼び出し側→呼び出される側
という関係で。(唯一Action→Controllerの部分だけリターンなので矢印の色でも変えてくださいw)
「ビジネスロジック」って言葉は俺も再考する必要があるかも。
>>846をもうちょっと咀嚼してみる。

857 名前:nobodyさん mailto:sage [2005/12/15(木) 03:53:25 ID:???]
forum.mojavi.org/index.php?showtopic=1281
こういうの見るとますますわからんくなる…


858 名前:nobodyさん mailto:sage [2005/12/15(木) 04:01:35 ID:???]
そこまでごちゃごちゃ深いこと考えなくても、
保守性の高いコードってWebアプリケーションなら結構つくれちゃうからなぁ…
ビジネスロジック云々より、ビジネスや運営自体について考えてたほうがよっぽど金になる

859 名前:839 mailto:sage [2005/12/15(木) 04:09:49 ID:???]
>>858
俺的もそう思う。どっちでもいーじゃんおまいらw、と
でも「間違っている」というつっこみをたくさんいただいたので、ヘコみつつ悪戦苦闘中であります。

860 名前:nobodyさん mailto:sage [2005/12/15(木) 04:22:02 ID:???]
>>855
マジでAgaviのView周りってModelに依存性あるの?
ステートレスなWebアプリでは切り離されてるのが当たり前だと思ってたけど。
アクティブモデルにせよオブザーバはかませるっしょ

861 名前:nobodyさん mailto:sage [2005/12/15(木) 04:40:08 ID:???]
View生成はクライアントリクエストのみを起点にしているから、
コントローラかアクションにぶらさげることは出来るね

前者はコントローラがMediator(と言ってもモデルかアクションから
データを受け渡すだけ)となり、後者ではアクションはコマンドオブジェクト
(ビジネスロジックとViewの呼び出しをカプセル化したもの)ということになる

どっちもパターンとしてはMVCとは呼ばないんだろうけど
www.martinfowler.com/eaaCatalog/applicationController.html

Viewがモデルに依存したほうがいいかアクションに依存したほうがいいか
まとまった見解ってある?

862 名前:nobodyさん mailto:sage [2005/12/15(木) 04:43:36 ID:???]
>>860
Agavi自体の仕様では依存性は発生しないよ。Modelは一つもなくても動くし。
でもModelを使った時点で依存はゼロではないと思われ。
「切り離す」ってのはいわゆる疎結合にするって意味だとは思うけど、元々依存してしまうものだからせめて疎結合にしましょうって感じじゃなかったっけ?
>>855の言ってるのは、逆向きの依存はゼロってことでしょう。
「Viewを変更したらModelが動かなくなりました」とかしゃれになんないし。
でもModelを変更したらViewに支障が出るのは仕方ない。
それでも最小限にしましょうってのが疎結合だと思う。
オブザーバはContextのことでおkかな?

863 名前:nobodyさん mailto:sage [2005/12/15(木) 05:25:53 ID:???]
依存性=オブジェクトをNewするかパラメータに取ってメンバにアクセスすること

結合の程度というようなファジーなものは存在しない
Framework界隈で依存性といったらこれのことだと思う

864 名前:nobodyさん mailto:sage [2005/12/15(木) 05:52:18 ID:???]
> 結合の程度というようなファジーなものは存在しない
疎結合って結合の程度がゆるいことじゃないの?
つーかどのレスに対してなのか反論なのか何なのかわからんな。

865 名前:863 mailto:sage [2005/12/15(木) 06:11:06 ID:???]
直上に対するレス

結合にはもちろん程度があるよ
しかし依存性にはそういうものは無くゼロイチだということを言ってみた

>>860>>862の愛でどうも考えている依存性が違って
かみ合ってないように見えたので



866 名前:nobodyさん mailto:sage [2005/12/15(木) 06:12:18 ID:???]
× 愛で
○ 間で

すまん
間違ったものを芽生えさせた

867 名前:nobodyさん mailto:sage [2005/12/15(木) 06:12:22 ID:???]
>>860
Modelにするにせよ別もんにしてつくるにしても、
初期のViewだけじゃなにもできんじゃん。
ごてごてタグとテンプレートと定数混ぜることになってしまう。
その辺のモデルもつくるでしょ?ふつう

868 名前:nobodyさん mailto:sage [2005/12/15(木) 06:16:08 ID:???]
いや、Mojaviだとビジネスロジックの呼び出しはアクションあたりに集約するのが一般的だと思う
ビュー内でモデルは呼び出したくない

869 名前:nobodyさん mailto:sage [2005/12/15(木) 06:20:08 ID:???]
>>868
MVCはもともとそういうものだけどな。View - -> Model

870 名前:862 mailto:sage [2005/12/15(木) 06:21:54 ID:???]
>>865
そかそか。曖昧な言い方ですまんかった。
基本的には「依存性はゼロイチ」ってのは同意だよ。
だから>>860への答えはViewからModelへの依存性は「あり」。
ただ「切り離されてるのが当たり前」って表現をしてたので、862で「それは疎結合のことであって≠依存性だよね」っていう意味で言った。

>>868
実際にはそうだよなw

871 名前:nobodyさん mailto:sage [2005/12/15(木) 06:23:49 ID:???]
>>869
パッシブモデルね

872 名前:nobodyさん mailto:sage [2005/12/15(木) 09:58:57 ID:???]
モデルをフレームワークから独立させる派は
モデルからUserにアクセスする必要がある時はどうやってるの?

873 名前:nobodyさん mailto:sage [2005/12/15(木) 10:10:17 ID:???]
>>872
モデルはフレームワークに依存していない設計なので、
モデルから User にアクセスする必要がない。


874 名前:nobodyさん mailto:sage [2005/12/15(木) 10:21:58 ID:???]
extends Modelすらしないってこと?

875 名前:nobodyさん mailto:sage [2005/12/15(木) 10:26:14 ID:???]
>>873
DBはどうしてる?



876 名前:nobodyさん mailto:sage [2005/12/15(木) 11:14:48 ID:???]
Mojavi系の場合DBみたいな下層にも入ってくるから
フレームワークに依存しない設計がいまいちイメージしにくいな

877 名前:nobodyさん mailto:sage [2005/12/15(木) 11:38:55 ID:???]
というか、一度 Mojavi を頭から追い出して一般的な設計の話をしろよw
もうあんな設計は古いって…。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<221KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef