web-dev-qa-db-ja.com

アーキテクチャはMVCよりもWebアプリに適していますか?

私は新しい仕事のためにZendとそのMVCアプリケーション構造を学習してきましたが、Zendでの作業は、指をまったく置くことができなかった理由で私を悩ませただけであることがわかりました。それから、私の研究の過程で、MVCとWebアプリケーションのトピックについて MVC:No Silver Bulletthis podcast などの記事に出くわしました。ポッドキャストの男は、WebアプリケーションアーキテクチャとしてのMVCに対して非常に良い訴訟を起こし、頭の中で私を悩ませていた多くのことを明らかにしました。

ただし、MVCがWebアプリケーションに実際には適していない場合、何が問題なのでしょうか。

48
GordonM

それはすべてあなたのコーディングスタイルに依存します。ここに秘密があります:PHPで古典的なMVCを書くことは不可能です。

あなたができると主張するフレームワークはあなたに嘘をついています。実際には、フレームワーク自体はMVCを実装することさえできません-コードは実装できます。しかし、それはマーケティングピッチとしてはあまり良くないと思います。

従来のMVCを実装するには、最初に永続モデルを用意する必要があります。さらに、ModelはViewに変更(オブザーバーパターン)を通知する必要がありますが、これはバニラPHPページでは不可能です(ソケットを使用する場合、従来のMVCに近いものを実行できますが、これは非現実的です。実際のウェブサイト用)。

Web開発では、実際には他に4つのMVCにヒントを得たソリューションがあります。

  • Model2 MVC:ビューはモデルにデータを要求し、それをどのようにレンダリングするか、どのテンプレートを使用するかを決定しています。コントローラは、ビューとモデルの両方の状態を変更する責任があります。

  • [〜#〜] mvvm [〜#〜]:コントローラーは、ビューの期待とモデルのロジックとの間の変換を担当するビューモデルに交換されます。 Viewはコントローラーからの要求データであり、Modelがそれを理解できるように要求を変換します。

    ほとんどの場合、ビューまたはモデルレイヤーを制御できない場合に使用します。

  • [〜#〜] mvp [〜#〜](phpフレームワークが「MVC」と呼ぶもの):プレゼンターはモデルに情報を要求し、それを収集し、変更します、それをパッシブビューに渡します。

    このパターンを探索するには、まず この出版物 をお勧めします。詳しく説明します。

  • [〜#〜] hmvc [〜#〜](またはPAC):サブコントローラーを実行するコントローラーの機能を備えたModel2とは異なります。それぞれがM、V、Cの独自のトライアドを備えています。モジュール性と保守性は得られますが、パフォーマンスはある程度向上します。

とにかく。肝心なのは、実際にMVCを使用していないということです。

しかし、すべてのMVCのような構造にうんざりしている場合は、以下を調べることができます。

  • イベント駆動型アーキテクチャ
  • n層アーキテクチャ

そして、常に [〜#〜] dci [〜#〜] パラダイムがありますが、PHPに適用すると、いくつかの問題があります( PHP ..醜いハックなしではない)のクラス。

102
tereško

私の経験から、MVCアーキテクチャから得られる利点は、Web用に開発する場合のコストと見かけのオーバーヘッドをはるかに上回ります。

複雑なMVCフレームワークを使い始めた人にとって、3つのレイヤーを分離し、どこに何が属しているかについて良い感じを得ることは少し困難な場合があります(明らかなものもあれば、非常に境界線のあるものもあります)議論の良いトピックになる傾向があります)。特にアプリケーションが成長するか、妥当な期間にわたって維持されることを期待している場合は特に、このコストは長期的に見れば十分です。

他のクライアントが既存のWebアプリケーションに接続できるようにする新しいAPIを作成するコストが非常に低い状況がありました。レイヤーが適切に分離されているためです。ビジネスロジックがプレゼンテーションにまったく接続されていなかったため、ケーキでした。

現在のMVCフレームワークエコシステムでは、原則は共通しているため、マイレージは大きく異なる可能性がありますが、Zend、Django、RoR、SpringMVCなどの間には多くの違いがあります。

このパラダイムに他に本当に良い代替案がある場合...私は答えにかなり興味があります!

テキストのわずかな壁でごめんなさい!

4
pcalcao

それはあなたが個人的にやろうとしていることに依存すると思います。 MagentaはMVCをかなりうまく使用しており、新しい機能を追加したり、既存の機能を変更したりすることがかなり簡単になります。

もちろん、かなり単純なものを作成しようとしている場合は、MVCアーキテクチャを使用するのはやりすぎかもしれません。

0
jprofitt

それはすべて好みです。私はXTemplatesやSmartyのような古い構造を扱い、CodeigniterとKohonaに移動しました。私はそれらがとても好きで、私がWebで行うすべてのことで非常にうまく機能します。電話アプリケーションの場合、データプルを実行するために必要な機能のコントローラーもセッ​​トアップできます。 Linuxの世界とWindowsの世界の両方で作業して、ASP.NET Webサイトを構築するために、MVCを使用する以外にWebサイトを構築する他の方法はありません。 Visual StudioのWebアプリケーションプロジェクトはまだ使用されていますが、今後は使用しません。 Visual Studioを介したMVCプロジェクトは、使用と設定が非常に簡単です。コントローラーメソッドを右クリックして、ビューを自動的に作成できます。どの構造にも長所と短所がありますが、ニーズを満たすものを使用するのは開発者の責任です。

0
vou xiong