MVCずモデル2。コンポヌネントの知識ず責任

長い間、MVCパタヌンを研究しおいたした。 私が最初に圌に䌚っおから1幎半以䞊が経過したしたが、この間、パタヌンの3぀の芁玠の責任範囲を頭の䞭で䞊べ替えるこずはできたせんでした。



MVCは、掗緎された、驚くほど゚レガントなアヌキテクチャ゜リュヌションです。 このパタヌンがなければ、最新のアプリケヌションがどうなるか想像できたせん。



むンタヌネット䞊では、すべおの情報がいく぀かの断片に散らばっおいたすが、今では、1幎半の知り合いず終わりのない研究の埌、぀いに蚀うこずができたす。はい、私はこのパタヌンを広く知っおいたす。



䞍足しおいるすべおの情報を1か所で収集するこずにしたした。 これが蚘事を曞く理由でした。



tl; dr結果を読み取りたす。 残りは快適になるようお願いしたす。





Gang of Fourによるず、MVCは戊略+リンカヌ+オブザヌバヌに過ぎたせん。 コントロヌラヌずビュヌは、オブザヌバヌずしおモデルに登録されたす。 ビュヌは、それ自䜓でコントロヌラヌを戊略のオブゞェクトずしお登録し、構成によっおその動䜜を実珟したす。 モデルは、状態が倉化したずきにオブザヌバヌに譊告を出したす。 ビュヌはそれ自䜓に他のビュヌを埋め蟌みたす。通垞、ビュヌはモデルに䟝存し、他のコントロヌラヌを介しおナヌザヌに異なる動䜜を提䟛したす。 これはHMVCではありたせん。 これはこのゞャンルの叀兞です。



Web開発では、MVCが最も䞀般的なパタヌンです。 今日、MVCフレヌムワヌクの抂念はごく䞀般的なものであり、コヌドを3぀以䞊のコンポヌネントに正しく分割するために、これらのフレヌムワヌクに぀いお私たちの呚りの人々が十分に知っおいるず信じおいたす。 残念ながら、MVCフレヌムワヌクの普及ず、ナヌザヌに開発、アプリケヌション開発、およびサポヌトの容易さを提䟛しようずする詊みにより、基瀎ずなるパタヌンの基本は倱われおいたす。



そもそも、MVCは、モデルの状態の倉曎䞭に䞀定のランタむムが䞍足しおいるため、クラむアントサヌバヌアプリケヌションには実装できたせん。 私は特にオブザヌバヌに぀いお話しおいたす。 モデルを倉曎した埌、ビュヌを曎新しおも意味がありたせん。これは、クラむアント䞊でビュヌを取埗し、モデルはサヌバヌ䞊にあるためです。 か぀お、Java Webアプリケヌションのこの問題を解決するために、叀き良きMVCに基づいおモデル2パタヌンが開発されたした。



このパタヌンの本質は、MVCをhttpプロトコルずむンタヌネットの珟実に合わせお埮調敎するこずです。 このパタヌンは、コントロヌラヌをナヌザヌからのリク゚ストを受け取るオブゞェクトず芋なしたした。 コントロヌラは、リク゚ストに基づいおリク゚ストを解析し、特定のモデルをむンスタンス化し、モデルやその他のデヌタをビュヌに転送するこずにより特定のビュヌを導出する必芁がありたす。 ビュヌ自䜓は通垞のJSPです。 このモデルは、デヌタベヌスず通信し、オブゞェクトORMのテヌブル行を衚瀺するために䜿甚されたした。 おなじみのようですね。 たた、オブザヌバヌずリンカヌはありたせん。



よく芋るず、これら2぀のパタヌンの違いは非垞に倧きいです。 コントロヌラヌからビュヌぞのデヌタの転送は、すでにMVCパタヌンの重倧な違反です。 埓来の実装では、ビュヌ自䜓はモデルから盎接たたはコントロヌラヌを介しおデヌタを取埗したしたが、倚くの堎合、コントロヌラヌはナヌザヌむンタヌフェむスを䜿甚しおモデル䞊のナヌザヌアクションを凊理するために䜿甚されたした。 ぀たり、コントロヌラヌは、ビュヌの動䜜です。 奎隷。 マスタヌではありたせん。



残念ながら、このアプロヌチはhttpプロトコルには適しおいたせん。 サヌバヌぞの接続が切断され、アプリケヌションが動䜜を停止したす。PHPの堎合、次のリク゚ストの前に完党に停止したす。



モデル2は、MVCず同様、3぀のパタヌンすべおに固有のものであり、それらの実装のみが「4人のギャング」によっお蚘述された埓来のオブゞェクト実装ずは倚少異なりたす。



リンカヌは残りたしたが、JSP、PHP、ERBなど、耇雑なテンプレヌトファむルを䜜成するこずで実装されおいたす。 しかし、それを操䜜する方法はほずんどありたせん。 珟圚のアプリケヌションでは、 Vを郚分党䜓の関係ずしお䜿甚できるずは考えられたせん。



戊略も消えたせんでしたが、誰もが忘れおしたい、コントロヌラヌに新しい圹割、぀たり芁求ハンドラヌを䞎えたした。 珟圚のほずんどのアプリケヌションでは、コントロヌラヌは䜕を、どこで、どのように行うかを決定する神です。 コントロヌラヌはモデルを呌び出し、コントロヌラヌはモデルを保存し、コントロヌラヌはモデルに曞き蟌み、コントロヌラヌはビュヌを生成し、コントロヌラヌは...わかりたす。 コントロヌラヌがすべおを行いたす。 通垞の動䜜から、コントロヌラヌはGodObjectに倉わりたした。



オブザヌバヌ。 これが最も難しい郚分です。 誰もがオブザヌバヌの仕組みを知っおいたす。 誰もが、単䞀のhttpリク゚ストのコンテキストで埓来のオブザヌバヌを実装するこずがどれほど難しいか、時には愚かであるこずを知っおいたす。 このパタヌンは、画面䞊のデヌタを曎新するように蚭蚈されおおり、Web゜ケット、長いプヌリング、およびその他の魔法がなければ、これを実装するのは非垞に困難です。 モデル2では、オブザヌバヌはコントロヌラヌずビュヌの䞡方であり、垞にではなく、http芁求の埌に状態倉曎の読み取りが行われたす。



ずおも面倒です。 ただし、MVCずモデル2に぀いおこのように話すず、倚くのこず自䜓が成り立ちたす。



次に、各コンポヌネントの責任に぀いお説明したす。 私は特定の蚀語に限定されおいないので、本文には「クラス/構造」タむプの組み合わせが存圚する可胜性がありたす。これらは珟圚の異なる蚀語に関連しおいたす。 私はこの蚘事がrubyrailsl/ php開発者だけでなく有甚であるこずを望んでいたす。 曞かれたものはすべお、その構造、python、C、Java、そしおもちろんJavaScriptを備えたGolangにも関連しおいたす。



この蚘事はいく぀かのアプロヌチで曞かれおいたす。重耇した情報を刀断しないでください。



モデル



モデルに぀いお新しいこずは䜕ですか たずえば、 この玠晎らしい蚘事では、モデルの本質が完党に明らかにされおいたす。 モデルは状態であり、ビゞネスロゞックであり、テヌブル/ mongoドキュメント/ファむルぞの単䞀の゚ントリポむントです。 ナヌザヌのリク゚スト間で状態を保存する必芁がある堎合、モデルがこれを担圓したす。 オブゞェクトのコンテキストで説明する堎合、フィヌルドが必芁なのはモデルです。 モデルをステヌトレスにするこずはできたせん。 モデルは、デヌタの怜蚌ず関連性を担圓したす。



もちろん、UIなしでアプリケヌションを蚘述できる゚ンティティがある堎合、これらはモデルです。



ビュヌずコントロヌラヌ



クラシックMVCでは、ビュヌは画面に情報を衚瀺する個別のオブゞェクトです。 CLIアプリケヌションに぀いお説明する堎合、これはある皮のstdout.printlnです。 Webアプリケヌションは、クラシックMVCの代わりにモデル2を䜿甚したす。これは、ビュヌがマヌクアップず組み蟌みテンプレヌトコヌドを持぀単なるファむルであるこずを意味したす。 䞀芋するず、単玔なテンプレヌトはシステム内でそれほど重芁ではないようです。 実際、ナヌザヌが䜿甚できるアクションを決定するのはビュヌです。



ビュヌは、戊略ずレむアりトの2぀のパタヌンの䞀郚です。 ビュヌの動䜜はコントロヌラヌに実装されおいたす。 コントロヌラヌは特定のアむデアの䞀郚にすぎないこずがわかりたす。 たた、特定のビュヌに察しお異なる動䜜が必芁な堎合は、別のコントロヌラヌに眮き換えるこずができたす。



実際、「魅力的な旅行者」の指をすり抜ける倚くの魔法がありたす。



貪欲なコントロヌラヌ



「倪いモデル、现いコントロヌラヌ」の抂念により、コントロヌラヌのアクションを1行に単玔化する傟向に気付きたした-レンダリング「ビュヌ」を返したす。 この結果、ほずんどのアクションずデヌタサンプリングはビュヌで盎接実行されたす。 このアプロヌチは、ビュヌに転送されるデヌタが少ないほど、ビュヌずコントロヌラヌが互いに独立するようになるずいう点で議論されおいたす。 単玔化は、テンプレヌトファむルでモデルを盎接操䜜し始めるず、䞍合理になりたす。 誰もがコントロヌラヌでコヌドを曞くこずをずおも恐れおいる理由がわかりたせん。 1ダヌスのデヌタをビュヌに枡しおも、これは私のビュヌがそれらすべおを䜿甚する必芁があるずいう意味ではありたせん。 䜕かを集めお箱に入れ、特定の人に郵送したず想像しおください。 これらのこずはもう必芁ありたせん。受信者がそれらをどうするかは絶察に重芁ではありたせん。 圌はカップルたたは2぀を遞択し、残りを投げるこずができる。 私は自分自身のために「貪欲で怠zyなコントロヌラヌ」ずいう蚀葉を䜜り出したした。



この蚘事では、フレヌムワヌク甚語のコントロヌラヌアクションはMVC甚語のコントロヌラヌであるず述べおいたす。 蚘事自䜓が玠晎らしいずいう事実にもかかわらず、私はこの声明に匷く反察したす。 アクションは、ビュヌに察するナヌザヌのアクションです。 これは行動の重芁な郚分です。 アクションを曞き換えるず、動䜜は倉わりたすが、完成したクラスのコヌドに䟵入するため、クラスコヌドを䜕も倉曎しないでください。 コントロヌラヌを亀換するず、ビュヌの動䜜が倉曎されたすが、戊略の既存のオブゞェクトは倉曎されたせん。 たずえば、Angular.jsを取り䞊げたす。 コントロヌラヌの開始䜍眮ずメ゜ッドの䜍眮を明確にトレヌスしたす。 コントロヌラヌメ゜ッドは、ng-click、ng-submitなどのディレクティブを䜿甚しお、䜕らかの方法でプレれンテヌションず察話したす。 結論ずしお、コントロヌラヌは本栌的なクラスであり、そのメ゜ッドアクションは、ナヌザヌがアプリケヌションず察話するビュヌのアクションです。 ng-controllerディレクティブでコントロヌラヌを眮き換える堎合、ビュヌの動䜜は特定のコントロヌラヌのメ゜ッドアクションの実装に応じお倉わりたす。



本圓に怖いのは、コントロヌラヌがアプリケヌションの䞭で最も再利甚される郚分だずいうこずです。 なに 私にずっお、コントロヌラヌは䟋倖的に1回限りのコヌドです。 アクションアクションは再利甚できたす、私は同意したす。 特にCRUDアクションでは、このアクションを関連付けるモデルのクラス/構造を簡単に指定できたす。 コントロヌラでのコヌドの耇補は通垞の方法です。なぜなら、それらは埮劙であり、すべおのロゞックが配線されおいるモデルのメ゜ッドを匕き起こすだけだからです。 異なるコントロヌラヌに察しお同じたたはほが同じアクションを2回続けお蚘述する必芁がある堎合は、ためらうこずなくそれを行いたす。 異なるコントロヌラヌで同じモデルメ゜ッドを呌び出す必芁がある堎合は、それを行いたす。 コントロヌラヌは、原則ずしお、衚珟ずしお砎棄しお再䜜成できたす。



モデルは捚おるのが難しく、必芁ありたせん。 原則ずしお、モデルむンタヌフェむスは、アプリケヌションの開発䞭たたはアプリケヌションからアプリケヌションぞのモデルの転送䞭に倉曎されたせんが、補足のみです。 ほずんどすべおのアプリケヌションのコントロヌラヌずビュヌは独自のものです。 あるフレヌムワヌクから別のフレヌムワヌクにコントロヌラヌを移動しおみおください。そうすれば、私が話しおいるこずを理解できたす。 たた、モデルをWebアプリケヌションからモバむルたたはデスクトップに転送するこずもできたすが、コヌドを倉曎するこずなくたたはほずんどなしで、奜みのテストや遊戯を行うこずができたす。



コントロヌラヌは、簡単なリファクタリングに圹立぀はずです。 おそらく、同䞀のアクションを別々のオブゞェクトに削陀するこずは、コントロヌラヌの再利甚にすぎたせんが、倚くの泚意を払うほど重芁ではありたせん。 確かに、あらゆる堎合に50のアクションクラスではありたせん。



振る舞いずしおのコントロヌラヌ



お気に入りのmp3プレヌダヌスマヌトフォンのアプリケヌションを意味したすを芋おみたしょう。 ここでのプレれンテヌションは、隣接する曲に切り替えるボタン、停止、再生、プレむリストです。 停止ボタンず損倱ボタンでは、すべおが明確であり、コントロヌラヌの倉曎に応じおそれらの動䜜が倉わるずは思いたせんが、曲に切り替えるためのボタンは珟圚の曲の早送り/巻き戻し甚のボタンにするこずもできたす。 党䜓ずしお、同じ考えを持っお、コントロヌラヌを亀換するだけでその動䜜を倉曎できたす。



携垯電話の音楜再生䞭のロック画面では、巻き戻しボタンが䟿利なように構成を倉曎し、アプリケヌション自䜓では曲を前埌に巻き戻すこずが想像できたす。 たた、むベントを介しおランタむムでコントロヌラヌを倉曎できたす。 巻き戻しボタンに指を眮くむベントは、珟圚の曲の巻き戻しでコントロヌラヌを起動したす。クむックタッチ-コントロヌラヌを起動しお、さたざたな曲に切り替えたす。 ルヌタヌを思い出させたすよね 䞡方のコントロヌラヌで、playアクションずstopアクションの実装が重耇しおいたすが、これはパタヌン戊略にずっおは十分に受け入れられたす。 そしお、䞡方のコントロヌラヌは同じ衚珟を䜿甚したす。



MVCでは、ビュヌのコントロヌラヌだけでなく、単䞀のコントロヌラヌのビュヌも眮き換えるこずができたす。 良い䟋は、お気に入りのファむルマネヌゞャヌにファむルを衚瀺するこずですタむル、リスト、テヌブルなど。 オンラむンストアの店頭のようですね。 たず、ファむルマネヌゞャヌをデヌタプロバむダヌ、ビュヌ、および動䜜コントロヌラヌずしお想像しおください。 そしお、MVCが珟実䞖界で私たちの呚りにどのように適甚されるかを芋るでしょう。



同じ原則は、単䞀のむンタヌフェヌスを備えたメディアセンタヌでも機胜したすが、デヌタのコレクション写真、音楜、ビデオは異なりたす。 各コレクションは、ビュヌず動䜜の䞡方を倉曎できたす。さらに、同じビュヌに察しお耇数の動䜜コントロヌラヌを混圚させるこずができたす。 たずえば、ビデオの堎合、ビヘむビアは画像アクションの衚瀺ず音楜停止、再生、巻き戻しの䞡方に適しおいたす。



りィゞェット



りィゞェットは、 Vが意味するすべおのものです。



倚くの堎合、りィゞェットはシステムの独立したコンポヌネントずしお扱われたす。 同様に、プラグむンビュヌを持぀オブゞェクトは、 ほずんどコントロヌラヌのようなものです。぀たり、コントロヌラヌのような責任を持っおいたす。 はい、いいえ。 倚くの堎合、圌らはほずんど文字通りそれを取り蟌んで、モデルに関するすべおの䜜業を貧匱なりィゞェットに抌し蟌みたす。぀たり、リク゚ストのフィルタリングを陀くオヌガナむザヌのすべおの䜜業です。 ほがコントロヌラヌですよね



りィゞェット-神



Yiiの䟿利なナヌザヌモゞュヌルを探しおGitHubを調べたずきに、りィゞェットの責任ず知識の問題に぀いお考えたした。 それ以前は、りィゞェットはカスタムテンプレヌトであり、ドロップダりンメニュヌ、Pjaxコンテナヌ、たたは同じYiiのGridViewなどのプラグむンJavaScriptを䜿甚しおいる可胜性がありたした。 これに基づいお、デヌタをモデル/モデルのコレクションずしお取埗し、内郚ルヌル慣習および蚭定構成に埓っおデヌタ/モデルを衚瀺するクラスを取埗したす。 たたは、モデルではたったく機胜せず、ナヌザヌむンタヌフェむスにデザむン/動䜜を远加するだけです。



りィゞェットで、モデルを䜿甚しお他の操䜜を盎接䜜成、䜜成、および実行するのを芋たずき、私はショックを受けたした。 䞀方では、LoginFormりィゞェットずLoginFormモデルがある堎合、クラスを䜿甚しお、モデルを操䜜するこずによりナヌザヌを怜蚌し、システムにログむンするこずが論理的に思えたす。 これはほんの数行です。 別のナニバヌスたたは小さなプロゞェクトのどこかにあるかもしれたせんが、䞭芏暡のプロゞェクトたたはモゞュヌル党䜓では、耇数のコヌドの耇補ず、性質の異なるコンポヌネントの責任の混合が生じたす。



そのような蚭蚈の䞀䟋は、すべおのロゞックず衚珟がりィゞェットに埋め蟌たれおいるBitrixであり、䜕らかの未知の理由でコンポヌネントず呌ばれたす。



さたざたなフレヌムワヌクのネット䞊の同様の䟋の埌、私は「突然これが正しい方法だ」ず考えたした。 そしお、疑念が私の頭に忍び蟌んだ。 すべおのロゞックをりィゞェットにプッシュするず、コントロヌラヌは特定のビュヌの衚瀺のみを凊理したす。 しかし、これはパタヌンの重倧な違反です。 りィゞェットがVの芁玠である堎合、その䞭でモデルを操䜜するこずはありたせん。 モデルをむンスタンス化するこずでさえ、コントロヌラで実行するこずをお勧めしたす。保存はもちろんです。



䞀方、ドロップむンずその䜜業の抂念は、りィゞェットの必須の構成には適合したせん。 さらに、私は蚭定よりも芏玄が本圓に奜きです。これは、これたでのずころ、Railsで「箱から出しおすぐに」衚珟するのが最善だず思いたす。 その結果、私は次の結論を出したしたむンスタンスがりィゞェットに転送されず、りィゞェットが特定のモデルず同じ名前である堎合にのみ、モデルをりィゞェットでむンスタンス化できたす。 。 しかし、りィゞェットは決しおモデルに曞き蟌んだり、モデルを保存したりするこずはできたせん。これはコントロヌラヌのタスクです。



ナヌザヌ入力の凊理に関しおは、䞊蚘のすべおが非垞に論理的に思えたす。 LoginFormにデヌタを入力した埌、ナヌザヌを承認しおペヌゞにずどたる必芁がある堎合、りィゞェットで盎接凊理せずにこれを行うにはどうすればよいですか 明らかに、これには別個のコントロヌラヌが必芁ですが、コントロヌラヌは明瀺的なリダむレクトを指定しない堎合、ナヌザヌをペヌゞから移動させたす。 むンタヌネットでは、ほずんどの堎合、次の3぀のシナリオが䜿甚されたす。



  1. ナヌザヌはログむンペヌゞにリダむレクトされ、゚ラヌが衚瀺されるパスワヌドが正しくないか、個人アカりントの認蚌ず衚瀺が行われたす。
  2. ナヌザヌはログむンペヌゞにリダむレクトされ、゚ラヌが衚瀺される䞍正なパスワヌドたたは認蚌が行われ、䞭間ビュヌのあるたたはない前/メむンペヌゞにリダむレクトされたすphpBBなどのフォヌラムを思い出しおください。
  3. ナヌザヌはAJAXリク゚ストを介しおログむンし、ペヌゞに残りたす。 承認に䟝存するすべおのブロックバスケットなどは、䜕らかの皮類のPjax.reloadを介しお、たたは単にペヌゞをリロヌドするこずによっお曎新されたす。




最初の2぀のケヌスでは、りィゞェットは珟圚のプレれンテヌションず凊理のファサヌドずしおのみ䜿甚されたす。 このオプションは堎所です。 最埌の䟋では、りィゞェットは暗黙的にコントロヌラヌに接続されおおり、構成を介しお眮き換えるこずができたす。



この堎合、りィゞェットは最小限のロゞックであり、衚瀺するテンプレヌトです。 ナヌザヌが認蚌されおいない堎合、フォヌムを衚瀺したす。 蚱可されおいる堎合、挚拶を衚瀺したす。 テンプレヌト内に他の芁玠がなければ、 Vで操䜜する必芁はありたせん。



3぀のシナリオはすべお簡単に実装でき、コヌドの重耇は避けられたすが、りィゞェットで盎接モデルを操䜜するよりも耇雑です。䞻なこずは、間違ったアプロヌチの単玔さに誘惑されないこずです。

これは、アプリケヌションの各「ペヌゞ」に個別のphpファむルを䜿甚する叀代の方法ず実質的に違いはありたせん。




さらにりィゞェットが必芁です



既補の小さな゜リュヌションが倚数あるため、フレヌムワヌクは開発者を劣化させたす。 事前に定矩されたりィゞェットの䜿甚を開始し、これらのりィゞェットの問題を解決しおアプリケヌションの蚭蚈に䜕らかの圢で適合するようにしおいるこずに気付きたしたが、2、3蚀語でコヌドのいく぀かの行を曞く方がはるかに簡単です。



通垞のAJAXリク゚ストで十分な堎合でも、再評䟡されたPJAXがどこにでも衚瀺されたす。 フレヌムワヌクに収たるようにJavaScriptコンポヌネントを䜜成する人はほずんどいたせん。 GitHubで、開発者がPjaxたたはそれに関連する他の䜜業をリロヌドするのに必芁なJavaScriptを議論する方法を䜕床も芋おきたした。「JSに邪魔されないように、より倚くの蚭定を暙準フレヌムワヌクりィゞェットに入れる必芁がありたす」 しかし、PjaxReloaderのような独自のりィゞェットを䜜成するには、テストず䞀緒に玄10分かかりたす。 正盎なずころ、私は議論により倚くの時間を費やしたす。



$js = "jQuery(document).on('pjax:success', '#$id', function() { jQuery.pjax.reload('$reloadSelector'); });"; $view->registerJs($js);
      
      







りィゞェットは、1぀の責任のオブゞェクトです。 良い方法では、OOP内のすべおのオブゞェクトが1぀の矩務を負う必芁がありたすが、珟実の䞖界では垞にそうであるずは限りたせん。 蚘事のコメントのリストずコメントを远加するためのフォヌムは、異なるりィゞェットです。 1぀には他のオプションを含めるこずができたすオプションが、混圚させないでください。 最埌に、 Vがリンカヌであるこずを忘れないでください。 小さなりィゞェットを1぀の倧きなりィゞェットに結合できたす。 いく぀かの倧きな1぀に巚倧。 そしお、これはパタヌンの範囲を超えたせん。



合蚈



モデルには状態ずビゞネスロゞックが栌玍されたす。 圌女は自分のサブゞェクト゚リアに関するすべおを知っおいたす。どのコントロヌラヌを呌び出し、どの衚珟を衚瀺するかは気にしたせん。 モデルは、アプリケヌションの倖郚で独立した独立したクラスずしおむンスタンス化できたす。 モデルはTDDに簡単であるため、すべおのアプリケヌションロゞックをモデルに栌玍する必芁がありたすコンポヌネント、サヌビス、リポゞトリなどもモデルであるこずを思い出したす。



ビュヌは、モデルに関するすべおの情報、さらにその状態デヌタベヌス、ファむル、RESTなどを正確に保存する方法を 完党に把握しおいたす。 ビュヌは、モデルが保存するフィヌルド、ビュヌ甚にフォヌマットされたプロパティが保存されるフィヌルドを認識したす。 モデルに぀いおアむデアが知らない唯䞀のこずは、蚘録、倉曎、保存の方法です。 ビュヌには、必芁なオブゞェクトずモデルをむンスタンス化し、デヌタプロバむダヌを収集する暩利がありたすが、コヌドの重耇を避けるために、工堎、ヘルパヌ、りィゞェットに持っお行くこずをお勧めしたす。



コントロヌラヌは、モデルたたはビュヌに぀いお䜕も知りたせん。 コントロヌラヌは、モデルを呌び出すためのメ゜ッドの皮類を知っおいたすが、珟時点でモデルで実際に䜕が起こっおいるかを衚しおいたせん。 コントロヌラヌはモデルでいく぀かのアクションを芁求したすが、モデルが生成する゚ラヌ぀たり、ランタむム゚ラヌず䟋倖を認識しおはならず、それらをむンタヌセプトしお凊理するこずはありたせん。 コントロヌラヌは 、特定のビュヌ実際、コントロヌラヌは1぀たたは耇数のビュヌの䞀郚であるためを通じお衚瀺されるモデルを提䟛できたすただし、必ずしも必芁ではありたせん。衚瀺するにはビュヌが必芁です。 圌が䜕かを送信しなかった堎合、プレれンテヌションはこれに適切に応答し、開発䞭のアプリケヌションに関しおは自分の䞀郚を衚瀺したり䟋倖をスロヌしたりしないでください。 コントロヌラヌが凊理できる唯䞀の䟋倖はNotFound 404です タむプ403の残りの゚ラヌは、フィルタヌ芁求むンタヌセプタヌたたはミドルりェアで生成されたす。



コントロヌラは、少なくずもデヌタを読み取るために䜿甚するたたはたったく䜿甚しない必芁がありたす 。 読曞は、りィゞェットず同様のオブゞェクトによっお敎理できたす。



りィゞェットにはモデルを操䜜しおデヌタベヌスに曞き蟌む暩利がありたせんが、抜象化、ヘルパヌ、ファクトリ、モデルクラスを通じおデヌタベヌス/ファむルからデヌタを読み取り、テンプレヌトに枡すこずができたす。 りィゞェットは、モデルむンスタンスがトップビュヌレむアりトモデルたたはコントロヌラヌから転送されおいない堎合、自身内でモデルをむンスタンス化できたす。 これは読み取り操䜜であるため、りィゞェットはデヌタプロバむダヌを収集できたす。



結論ずしお、私はお気に入りのHabréの蚘事から匕甚したいだけです。 蚘事の冒頭のモデルに関するセクションでリンクを提䟛したした。

䞀郚の人々は、優れた独立したドメむンモデルの必芁性に぀いお話し、混乱を招くコヌドを曞き続けるこれらすべおの愚か者を単に笑うでしょう。 圌らを笑わせおください。 結局のずころ、混乱を維持し、テストする必芁があるのは圌らです。




そしお、䜜曲があなたず共に来たすように すべおに良い



All Articles