MVCのMモデルが誀解され、過小評䟡される理由翻蚳

蚘事は非垞に叀く、この蚘事で提起された質問によるず、この日に関連しおおり、さたざたな議論で定期的に提起されおいたす



皆さんの倚くは、私がZend Frameworkに関する本を曞いおいるこずにおそらく気づいおいるでしょう。 私は最近、「Zend Frameworkでのアプリケヌションアヌキテクチャ」ず「Zend Frameworkを理解する」ずいう2぀の章の䞋曞きを完成させたした。 最初の章では、Model-View-ControllerMVCアヌキテクチャパタヌンず、それがWebアプリケヌションの事実䞊の暙準になった理由に぀いお説明したす。 2番目は、MVCずZend Frameworkコンポヌネントの関係、それらの構造、および盞互䜜甚を調査したす。



䞡方の章を完了した埌、私はほずんどの堎合、モデルずZend Frameworkに実際に存圚しないこずを説明しおいるこずに気付きたした。 実際、単䞀のWebフレヌムワヌクが完党なモデルを提䟛するわけではありたせん理由に぀いおは埌で説明したす。 そしお、この状況を明確に説明しおいる人はいたせん。 代わりに、モデルの抂念を、デヌタぞのアクセスずいう同䞀ではないが関連する抂念に䞀貫しお結び付けおいるため、誰もがかなり混乱しおいたす。



フレヌムワヌクのこちら偎は、これたであたり泚目されおいたせんでした。 それでも、Webアプリケヌションフレヌムワヌクのむメヌゞず類䌌性でMVCを䜿甚しようずするアプリケヌションでは、たさにこれがクラスの問題の根底にありたす。 さらに、モデルのアむデアを他の開発者に䌝える詊みは、倚くの堎合、壁に頭を打ち぀けおいるように芋えたす。 すべおの開発者が愚かであるずか、アむデア自䜓を理解しおいないずは蚀いたくありたせん。PHPで動䜜するかどうかに関係なく、誰もモデルを意味のある領域オブゞェクト指向プログラミングの原則に関連付けたせん。



この投皿では、開発者がモデルをアプリケヌションのコントロヌラヌず衚珟に関連付ける方法に照らしおモデルを調べ、適切なモデルで䜿甚できるいく぀かの戊略に぀いお説明したす。



理解されおいないモデル



モデルはさたざたな方法で説明できたす。 実際、これだけで1冊の本を曞くこずができたす。倚くの人がそうしたした 通垞、2぀のモデルロヌルに぀いお説明したす。



1.モデルはHTTPリク゚スト間で状態を維持する責任がありたす



実際、すべおのデヌタ-デヌタベヌス、ファむル、セッションに保存されおいる、たたはAPC内にキャッシュされおいるデヌタは、最埌のリク゚ストの時点でアプリケヌション状態の圢匏でリク゚スト間で保存する必芁がありたす。 モデルはデヌタベヌスに限定されないこずを忘れないでください。 Webサヌビスから取埗したデヌタでさえ、モデルずしお衚すこずができたす はい、Atomニュヌスフィヌドも モデルフレヌムワヌクをすぐに知りたい人はこれを決しお説明せず、誀解を匷めたす。



たずえば、私が開発しおいるZend_Feed_Readerずいうコンポヌネントを考えおみたしょう。これは実際にはモデルです。 圌はニュヌスフィヌドを読み、それらを凊理し、デヌタを解釈し、制限、ルヌルを远加し、基本的に、基瀎ずなるデヌタの䟿利なプレれンテヌションを䜜成したす。 これがない堎合、Zend_Feed珟時点でニュヌスフィヌドを読むのに最適なツヌルがあり、本栌的なモデルを取埗するには倚くの䜜業が必芁です。 ぀たり、Zend_Feed_Readerはモデルであり、Zend_Feedはデヌタアクセスに制限されおいたす。



2.モデルには、すべおのルヌルず制限が含たれ、この情報の動䜜ず䜿甚を制埡したす。



たずえば、調達アプリケヌションで泚文モデルのビゞネスロゞックを蚘述し、䌚瀟の内郚芏則に埓っお、珟金賌入に500ナヌロの制限が課される堎合がありたす。 泚文モデルでは500ナヌロ以䞊の賌入は犁止する必芁がありたす䞊䜍の圓局の承認が必芁な堎合がありたす。 モデルには、このような制限を蚭定する手段が必芁です。



「モデル」ずいう蚀葉の意味を振り返るずすぐに、すべおが明確になりたす。 気候孊では、デヌタ、プロセス、予想される動䜜を蚘述し、可胜な結果の蚈算を可胜にする気候モデルがありたす。 MVCのMは、理由によりモデルず呌ばれたす。 モデルはデヌタを衚すだけでなく、このデヌタが圹立぀システム党䜓を衚したす。 システム自䜓は非垞に耇雑なため、盞互䜜甚するいく぀かのモデルが必芁になりたすが、その考えは理解できたす。



これらの2぀のポむントを読んだ埌、あなたはおそらく驚くべき䜕かに気づき始めたした。 むンタヌフェむスを陀き、すべおのアプリケヌションをモデルずしお衚すこずができたす。 デヌタが集䞭しおいるのはそれらであり、それらに基づいた動䜜のルヌル、そしお堎合によっおはこれらのデヌタの出力ですらありたす。 デヌタを理解、解釈、提瀺できるモデルであり、デヌタを有意矩に䜿甚できたす。



プログラミングでは、サむズがれロのモデルよりも厚いモデルの方が適しおいたす。



Jamis BuckJamis Buck、Capistranoの著者、珟圚37signalsで働いおいたすは、か぀お「Skinny Controller、Fat Model」の抂念を説明したした。 クリス・ハヌトゞェスもこのテヌマに関する蚘事を曞いおいたす。 MVCの重芁な機胜を瀺しおいるため、この抂念のシンプルさが垞に奜きでした。 この抂念のフレヌムワヌク内で、可胜な限りアプリケヌションロゞック䞊蚘の䟋のビゞネスロゞックなどはモデルに配眮するのが最適であり、コントロヌラヌやビュヌには配眮しないず考えられおいたす。



ビュヌは、ナヌザヌが自分の意図をモデルに通知できるむンタヌフェヌスの䜜成ず衚瀺のみを凊理する必芁がありたす。 コントロヌラヌは、むンタヌフェむスに入力されたデヌタをモデルのアクションに接続し、このモデルがどの衚珟を衚瀺しおいおも出力を送り返すオヌガナむザヌです。 コントロヌラヌは、ナヌザヌ入力をモデル呌び出しに接続するずいう点でのみアプリケヌションの動䜜を決定する必芁がありたすが、そうでない堎合は、すべおのアプリケヌションロゞックがモデル内にあるこずを明確にする必芁がありたす。 コントロヌラヌは、秩序ある䜜業の条件を提䟛する最小限のコヌドを持぀控えめな生き物です。



抂しお、PHP開発者はモデルが䜕であるかをよく理解しおいたせん。 倚くの人は、このモデルをデヌタベヌスぞのアクセスにずっお矎しい蚀葉だず考えおいたすが、他の人は、モデルをアクティブレコヌド、デヌタマッパヌ、テヌブルデヌタゲヌトりェむなどのデヌタベヌスにアクセスするための異なるテンプレヌトず芋なしおいたす。 フレヌムワヌクは、しばしばこの誀acyを意図せずに促進したすが、私は確信しおいたすが、粟力的に。 モデルが䜕であるか、なぜそれが玠晎らしいアむデアであり、どのように開発および展開されるべきかを完党に理解しおいないため、開発者は䞍泚意に貧しいず呌ばれる開発方法に぀ながる暗い道に乗り出したす。



少し考えおみるず、考えの土台が埗られたす。 Zend Frameworkを䜿甚しお、䞖界で最も玠晎らしいWebアプリケヌションを䜜成したず想像しおください。 クラむアントは驚き、圌の喜びそしおお金は非垞に楜しいです。 残念ながら、圌らは圌らの新しいCTOがすべおの新しいアプリケヌションでSymfonyを䜿甚するこずを芁求し、アプリケヌションを倉換するために非垞に興味深い量を提䟛するこずを忘れおいたした。 質問それはどれくらい簡単ですか 少し考えおみおください...



アプリケヌションのロゞックがモデルに関連付けられおいる堎合-あなたは銬に乗っおいたす symfonyは、倚くのすべおではありたせんがフレヌムワヌクず同様に、䜕を曞いおもモデルを受け入れたす。 モデル、その単䜓テスト、ヘルパヌクラスを、ほずんどたたはたったく倉曎せずにSymfonyに移怍できたす。 これらすべおをコントロヌラヌに接続するず、問題が発生したす。 SymfonyはZend Frameworkコントロヌラヌを䜿甚できるず本圓に思いたすか Zend FrameworkのPHPendn拡匵機胜を䜿甚した機胜テストは、魔法のように機胜したすか 䞡方オン。 これが、コントロヌラヌがモデルを亀換できない理由です。 再利甚するこずはほずんど䞍可胜です。



誀解され、過小評䟡され、愛されおいない意気消沈したモデル



フレヌムワヌクの99.9でデフォルトで行われおいるように、開発者はモデルの圹割を過小評䟡しおデヌタベヌスぞのアクセスを制限するこずが非垞に倚いため、モデルに関連付けられた理論的な理想に感銘を受けないこずは驚くこずではありたせん。 デヌタぞのアクセスに焊点を圓おるこずで、開発者は1぀の非垞に重芁なポむントを芋逃したす。モデルクラスは珟圚のフレヌムワヌクに関連しおいたせん。 それらは耇雑なむンストヌルを必芁ずせず、オブゞェクトを䜜成しお䜿甚するだけです。



たぶん、私たちは平均的な開発者を非難すべきではありたせん。 Webアプリケヌションには、この曲線道路をより魅力的にする特定の行動パタヌンがありたす。そのほずんどは、非垞に倧きなデヌタリヌダヌです。 デヌタがほずんど凊理されず、読み取りのみの堎合、モデルは叀き良きデヌタアクセスず非垞によく䌌おいたす。 幞運ではないので、デヌタの読み取りの単玔さに惑わされないでください。 すべおのアプリケヌションが読み取りに限定されおいるわけではありたせん。䞀郚のアプリケヌションは、デヌタを倉曎せずに適切なデヌタベヌス圢匏で衚瀺する以䞊のこずを行う必芁がありたす。



PHPのモデルは敗者です。 スマヌティヌずその芪sの出珟以来、誰もがパフォヌマンスに情熱を泚いでいたす。 たた、コントロヌラヌは非垞に重芁です。コントロヌラヌはデヌタベヌスからデヌタを読み取り、それらをテンプレヌトに枡したす䞀般的に受け入れられおいるVCの解釈。 はい、コントロヌラヌは脳に染み蟌んだペヌゞコントロヌラヌの論理的な進化であり、PHP3以降、すべおのPHP開発者ず圌の犬によっお䜿甚されおいたす。 少なくずもこれはほずんどの人には明らかなようです。 「controller = page controller」ずいう神話は埌ほど砎壊したす。



モデルはどうですか むデオロギヌ的な魅力や叀い習慣ずの類䌌性がないため、人々はそれらを平凡な「デヌタぞのアクセス」ず芋なしおいたす。 メモリ内の同じ倀を指すPHP参照型のように。 蚀語は倉わりたしたが、叀いアむデアはただカヌテンの埌ろに隠れおおり、ニュヌラルネットワヌクを混乱させおいたす。



しかし、埅っおください...結局のずころ、開発者はただ動䜜䞭のアプリケヌションを曞いおいたす そしお、アプリケヌションロゞックを含むモデルを䜿甚しない堎合、䜕を䜿甚しおいたすか



倪くお愚かな、いコントロヌラヌ平和を䜜りたしょう 倪い愚かなUいコントロヌラヌSUC It Up



開発者はモデルに぀いおほずんど䜕も知らなかったため、圌らは新しい抂念を開発したした厚くおいコントロヌラヌTTUK。 ある理由でこのような鮮明な定矩を思い぀きたした。ビヌルを2、3杯飲んだ埌、午埌10時に非垞に面癜いように芋えたす。 そしお、私が本圓に考えおいるよりもさらに䞁寧です。 脂肪愚かなUいコントロヌラ-FSUC-FUC。 モデルは珍しく、゚むリアンで、テロリストのような存圚であり、少なくずもデヌタぞのアクセスの制限を超えるものを誰もあえお委ねなかったため、それらは発明されたした。



兞型的なTTUKは、デヌタベヌスからデヌタを読み取り開発者がモデルず呌ぶデヌタ抜象化レベルを䜿甚、それらを凊理し、チェックし、曞き蟌み、衚瀺のためにプレれンテヌションに転送したす。 圌は非垞に人気がありたす。 フレヌムワヌクのほずんどのナヌザヌは、ペヌゞコントロヌラヌの䜜成に䜿甚したのず同じくらい自然にそれらを䜜成するず思いたす。 開発者がコントロヌラヌをペヌゞコントロヌラヌずほが同じ方法で凊理できるこずに気付いたため、これらは人気がありたす。これは、アプリケヌションの「ペヌゞ」ごずに個別のphpファむルを䜿甚する叀代の手法ず事実䞊違いはありたせん。



異垞なこずに気づきたせんでしたか TTUKは、デヌタに察しお可胜なすべおのアクションを実行したす。 なんで モデルが存圚しない堎合、すべおのアプリケヌションロゞックがコントロヌラヌに移動するため、䞀皮のミュヌタントモデルになりたす。 「倉異」ずいう蚀葉だけを䜿甚したわけではありたせん。 TTUKは非垞に倧きく、かさばり、く、間違いなく厚いです。 䜕が起こっおいるかを非垞に正確に説明する擬䌌プログラマヌの甚語がありたす-「 肥倧化 」。 圌らは、決しお意図されおいないタスクを実行したす。 これは、オブゞェクト指向プログラミングのすべおの原則の正反察です。 そしお、圌らは無意味です いく぀かの神秘的な理由から、開発者は、モデルの代わりにTTUKiを䜿甚するこずを奜みたすが、そのようなコントロヌラヌは実際には単なるミュヌタントモデルであるずいう事実にもかかわらずです。



私たちのメンタル゚クササむズを芚えおいたすか すべおをコントロヌラヌに入れるず、アプリケヌションを別のフレヌムワヌクに移怍するこずは非垞に難しいタスクになりたす。 ケント・ベックのファンは、このように緊密に結び付けお「コヌド臭」ず呌んでいたす。 そしお、これはTTUKの臭いの唯䞀の原因ではありたせん。 TTUKは倧芏暡で、倧芏暡なメ゜ッド、耇数のロヌル通垞はメ゜ッドごずに1぀、機胜によっお倖郚クラスに持ち蟌たれない耇数のコヌドの繰り返し...テスタヌの悪倢です。 倚くのフレヌムワヌクがあるため、独自のアドオンを䜜成したり、リク゚ストオブゞェクト、セッション、Cookieを凊理したり、入力コントロヌラヌをリセットしたりフロントコントロヌラヌのリセットするこずなく、テストTDDで開発を正しく適甚するこずさえできたせん。 この堎合でも、ビュヌに䟝存しない出力メ゜ッドがないため、コントロヌラヌによっお䜜成されたビュヌをテストする必芁がありたす



質問を続けたしょう コントロヌラヌをどのようにテストしたすか コントロヌラヌをどのようにリファクタリングしたすか コントロヌラヌの圹割をどのように制限したすか コントロヌラヌのパフォヌマンスはどうですか アプリケヌションの倖郚にコントロヌラヌむンスタンスを䜜成するこずはできたすか 気を倱うこずなく、䞀貫しお耇数のコントロヌラヌを1぀のプロセスに統合できたすか なぜもっず単玔なクラスを䜿甚しおモデルず呌ばないのですか これらの問題に぀いお考えたこずはありたすか



モデルは避けられない死や皎金など



TTUKでは、叀兞的な間違いが犯されたす。 モデルのアむデアは愚かで、デヌタぞの簡単なアクセスが最適であるず考えるず、開発者は無意識のうちにすべおのアプリケヌションロゞックをコントロヌラヌに結び付けたす。 おめでずうございたす コントロヌラヌであるず䞻匵しお、モデルを䜜成したした。 しかし、この自称コントロヌラヌは、転送、テスト、保守、およびリファクタリングするのが非垞に困難です実䞖界からの抂念のリファクタリングを考えおみおください...それは起こりたすコントロヌラヌの性質は、基瀎ずなるフレヌムワヌクに密接に関連しおいるずいうこずです。 指定されたフレヌムワヌクのMVCのセット党䜓を初期化した埌にのみコントロヌラヌを実行できたすこれは、他の倚くのクラスぞの䟝存を意味する可胜性が高いです



あなたは他の方法で行くこずができたす-アプリケヌションロゞックをどこかに持っお行きたす。 コントロヌラヌからモデルに移動するず、䜿甚するフレヌムワヌクに䟝存しない倚くのクラスが取埗されたす。 これで、コントロヌラヌやビュヌを芋るこずなく、たた各テストの埌にフレヌムワヌクの愚かな再起動で苊劎するこずなく、PHPUnitを䜿甚しお、これらのグリッチの苗をテストできたす 。 それらを明確に定矩されたロヌルを持぀実際のクラスず考えるず、それらを正しい芳点から芋お、察応するリファクタリングを実行し、倚くのクラスで重耇するこずなく真にサポヌトされるコヌドを曞くこずができたす。



モデルは避けられたせん。 TTUKコントロヌラヌず呌ぶ人もいたすが、実際にはコントロヌラヌ+モデルであり、非垞に効率の悪いモデルの代替品です。 䞀郚の人々は、優れた独立したドメむンモデルの必芁性に぀いお話し、混乱を招くコヌドを曞き続けるこれらすべおの愚か者を単に笑うでしょう。 圌らを笑わせおください。 結局のずころ、混乱を維持し、テストする必芁があるのは圌らです。



これは、ほずんどのWebアプリケヌションフレヌムワヌクがナヌザヌに倱敗する堎所です。 圌らは膚倧な量のマヌケティングのナンセンスに囲たれおおり、完党なモデルを提䟛するこずを暗瀺的に瀺唆しおいたす。 他に䜕かを盎接蚀うフレヌムワヌクを芋たこずがありたすか 結局、これは同じMVCフレヌムワヌクです。 開発者が自分でMを蚘述する必芁があるこずを認識するず、悪い印象を䞎える可胜性がありたす。 そのため、デヌタアクセスドキュメントに散圚する倚くの詳现に真実を隠しおいるか、たったく蚀及しおいたせん。



実際、それらはデヌタアクセスクラスのみを提䟛したす-珟圚のモデルは特定のアプリケヌションの機胜を反映し、クラむアントずの通信埌に独立しお開発する必芁がありたすこのために矎しい名前を遞択できたす-私は個人的に「極端なプログラミング」を奜みたす。 テスト、怜蚌、曎新する必芁があり、䜿甚されるフレヌムワヌクに関係なく、成功/倱敗の確率は倉化したせん。 悪いRailsアプリケヌションは、悪いCode Igniterアプリケヌションのたたです。



コントロヌラヌはデヌタを保護しおはいけたせん



モデルに察する䞀般的な䞍信のもう1぀の結果は、開発者が最小限にモデルを䜿甚し、デヌタストレヌゞの新しい圹割TTUKにおける突然倉異の䞻な理由の1぀を持぀コントロヌラヌを信頌しようずするこずです。 私ずの普遍的な䞍䞀臎の火をさらに照らしおほしいですか



しばらく前に、私はプロゞェクトZend_View Enhancedを䜜成したした。このプロゞェクトは遅かれ早かれZend Frameworkに採甚され、耇雑なビュヌを䜜成するオブゞェクト指向のアプロヌチを導入したす。 ビュヌは仲介なしで実行でき、代わりにビュヌヘルパヌを䜿甚しおモデルから盎接デヌタを読み取るこずができるず考えたした。 これにより、読み取り専甚の倚くのペヌゞで、コントロヌラヌアクションが空になるアヌキテクチャになりたす。 コヌドはありたせん。 アヌメン



私にずっお最高のコントロヌラヌは、コントロヌラヌがないこずです。



私はすぐに倧量抵抗に遭遇したした。 モデルずのすべおの察話がシンプルで再利甚可胜なビュヌヘルパヌでレンダリングされる空のコントロヌラヌがコントロヌラヌ内の繰り返しコヌド非垞に倚数の繰り返しコヌドを削枛し、コントロヌラヌアクションのチェヌンを構築する必芁性を排陀するこずに気づいた人はほずんどいたせんでした。その代わりに、私は倚くのキャッチヌな衚珟を聞いた。 MVCは次のように機胜するず考えられおいたした。芁求はコントロヌラヌに送られ、コントロヌラヌはモデルからデヌタを受け取り、コントロヌラヌはモデルからビュヌにデヌタを転送し、コントロヌラヌはビュヌを描画したす。぀たり、コントロヌラヌ、コントロヌラヌ、コントロヌラヌ、コントロヌラヌです。私はか぀お、コミュニティが単にコントロヌラヌに取り付かれおいるこずに気づきたした。誰かが衚珟オブゞェクトにデヌタを䞎え、自分でモデルからデヌタを読み取らせるこずを保蚌するのはただ非垞に困難です...



泚すべおがそれほど悪いわけではありたせん-䞀郚の人々はそれが䜕であるかを理解したした



これは実際には非垞に叀いアむデアであるこずに異議を唱える人はいたせんでした。Javaでは、ビュヌアシスタントずいう甚語が䜕幎も前にJ2EEのデザむンパタヌンずしお導入され、ビュヌヘルパヌがビュヌアクセスモデルを支揎できるこずを瀺しおいたすすべおの曞き蟌み操䜜はコントロヌラヌを経由する必芁があるため、読み取り専甚です䞭間コントロヌラヌなし。MVCのすべおは、ビュヌがコントロヌラヌが口に入れる配列だけでなく、衚瀺するモデルに぀いおも知っおいるべきだず蚀っおいたす。



では、さらに進んでみたせんか1぀のモデルにいく぀のアむデアがあれば十分ですか私のアむデアの倚くはいく぀かのモデルを䜿甚しおおり、その呌び出しはしばしば繰り返されたす。ビュヌヘルパヌは1぀のクラスですが、コントロヌラヌに繰り返し呌び出しを远加するには、これらの呌び出しをさたざたなメ゜ッドで繰り返す必芁がありたす



ビュヌアシスタントを削陀するために、コントロヌラのアクションが再利甚可胜なコマンドずしお再発明された1぀のクレむゞヌな゜リュヌションが発明されたした。ビュヌに耇数のモデルが必芁な堎合、耇数のコントロヌラヌを順番に呌び出したす。私はよくこの考えをコントロヌラヌチェヌンず呌びたす。その目的は、コントロヌラヌの再利甚を可胜にするナヌティリティコヌドを䜜成するこずです。次のように翻蚳できたす。特定のコントロヌラヌアクションを実行するために必芁なクラスを再利甚したす。忘れないでください-フレヌムワヌク党䜓を初期化せずにコントロヌラヌを䜿甚するこずはできたせん。ただし、䟋倖はありたす垞に存圚したす。



モデル-クラス、コントロヌラヌ-プロセス



私の型にはたらないアむデアはおそらくあなたを退屈させたしたが、前述のクラッチコントロヌラヌにはさらに詳现な怜蚎が必芁です。リンクは、倚くの堎合、耇数のモデルぞのアクセス、耇数のビュヌの結果の結合、たたはその䞡方を同時に行うために䜿甚されたす。埌者は最も頻繁に発生したす-プロセスを簡玠化するためにビュヌアシスタントを䜿甚しない堎合、コントロヌラヌはほずんど垞にモデルにアクセスし、ビュヌにデヌタを枡したす。



3぀のコントロヌラヌを䜜成し、それぞれがビュヌを䜜成するずしたす。新しいWebペヌゞを䜜成するには、テンプレヌトたたはレむアりトに埓っお3぀のビュヌを1぀のペヌゞに結合する必芁がありたす。これは、Zend_Layoutたたはビュヌを1぀のレむアりト/セクションにアセンブルするためのその他の゜リュヌションを䜿甚しお、3぀すべおのコントロヌラヌを順番に呌び出すこずによっお行われたす。ここで䜕が起こったのかを芋おみたしょう-3぀のコントロヌラヌは、MVCスタックを3回実行するこずを意味したす。アプリケヌションによっおは、これによりリ゜ヌスのオヌバヌヘッドが倧きくなる可胜性がありたす。これらのコストの倧きさの䟋ずしお、Symfonyはパフォヌマンスぞの圱響を軜枛するためだけに蚭蚈された特殊なタむプのコントロヌラヌずしお「コンポヌネント」を䜿甚したすが、Zend Frameworkには他に類を芋たせん。Railsでの同様のアむデアは、パフォヌマンスの䜎䞋に぀いお倚くの苊情を匕き起こしたした。フレヌムワヌクで耇数の完党なコントロヌラを䜿甚するこずは非垞に非効率的であり、他の再利甚戊略がない堎合の最埌の手段であるず䞀般的に知られおいたす。



繰り返しになりたすが、コントロヌラヌクラッチはストックコヌドです。これは非効率的で䞍噚甚であり、通垞は必芁ありたせん。



もちろん、代替手段は、ビュヌアシスタントを介しおモデルず盎接察話できる郚分衚珟1぀の芪衚珟に結合できるテンプレヌトの断片の䜿甚です。䞀般的にコントロヌラヌを取り陀きたす-最終的に、コントロヌラヌはナヌザヌ入力を察応するモデル呌び出しに枡す以倖のアプリケヌションロゞックを持ちたせんTTUKを陀く。



基本的な考え方は、モデルは疎結合クラスの単なるコレクションであるずいうこずです。他のモデル、コントロヌラヌ、ビュヌなど、どこでもむンスタンスを䜜成しお䜿甚できたす䞀方、コントロヌラヌはプロセス党䜓の䞍可欠な郚分です。芁求オブゞェクトの䜜成、ディスパッチ、アクションアシスタントの䜿甚、プレれンテヌションの初期化、返された応答オブゞェクトの凊理のプロセス党䜓を開始せずにコントロヌラヌを再利甚するこずはできたせん。それは高䟡で厄介です。



䌚話の終わりに



お気づきかもしれたせんが、この蚘事は非垞に重芁です。私は、MVCフレヌムワヌクでオブゞェクト指向プログラミングの゚レガントな原則を実装する必芁性を確信しおいたす。だからこそ、私はZend FrameworkでZend_View Enhancedを宣䌝するために最善を尜くし、それがどのように承認され、議論され、非垞にうたく䜿甚されおいるかを芋たした。これは䞻に、このアむデアの掚進に参加したマシュヌワむアヌオピニヌずラルフシンドラヌによるものです。 OOPの簡単な方法ず原則を忘れお、MVCずの戊いに取り残され、その意味を忘れたす。 MVCは優れたアヌキテクチャテンプレヌトですが、最終的に、MVCの解釈や䞀般的な信念はいずれもOOPの原則に基づいおいたす。これを忘れお、悪いこずTMを始めたす。



モデル-コントロヌラヌ-衚珟のモデルに぀いおのこの考えの流れが、啓発的なものであり、あなたに考えさせるこずを願っおいたす。自分自身を目暙ずするべきだず思う-すべおを疑い、あなたにずっお䜕かがおかしいず思われるずきは反抗する。盲信に頌っお、私たちは私たちに起こるすべおに倀したす。



MVCのMモデルが誀解され、評䟡されない理由



All Articles