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 参照汁
773 名前:nobodyさん mailto:sage [2005/12/12(月) 23:43:46 ID:???] >>769 えええええええええええ? だったらなんでmodelに $this->getContext()->getRequest(); できる機能わざわざつけてあるのさ。 actionもMVCのmodelに相当するんじゃないの? model内で $this->getContext()->getRequest();とかやって、 actionでgetModelするのが普通だと思うが。 >>772 よ。すっきりするのはまだ早い
774 名前:nobodyさん mailto:sage [2005/12/12(月) 23:50:24 ID:???] moja3て、Modelがあんだ〜 class HogeModel extends Model って感じ?
775 名前:nobodyさん mailto:sage [2005/12/13(火) 00:06:36 ID:???] >>773 > actionもMVCのmodelに相当するんじゃないの? 違うよ。controllerとmodelのアダプタ(アダプタパターンとは別の意味)。 controllerの一部をコマンドパターンとして抽出したとも見れる。 だから本当はactionはビジネスロジックを書くところじゃないんだけど、ロジックもそのまま書けてしまう手軽さは利点であり欠点でもあると思う。 requestをいじるのはcontrollerであるべきだと思うから俺はaction内でgetRequestして、相応のmodelを呼び出す派。
776 名前:768 mailto:sage [2005/12/13(火) 01:51:59 ID:???] やっぱり、model内で $this->getContext()->getRequest(); のはなんか気持ち悪い。
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 にアクセスする必要がない。