web-dev-qa-db-ja.com

フレームワークに依存しないMVCチュートリアル?

MVCの「アーキテクチャパターン」を学びたいが、RailsまたはDjango)のようなフレームワークに飛び込みたくありません。最初にコンセプトを理解し、PHP/HTML/CSS/MySQLである、現在おなじみの環境でいくつかの単純なコードを記述します。多くの異なる言語を理解しているため、PHPに基づくチュートリアルは必ずしも必要ありません。フレームワーク、API、ライブラリをインストールする必要はありません。MVCで考え、プロジェクトに適用する方法を学びたいだけです。

62
Ixion

ほとんどすべてのフレームワークはMVCの動作が異なるため、混乱する可能性があります。 MVCの一般的な原則は非常に単純です:「モデルは状態です;ビューはモデルに反応します;コントローラーはビューに反応します;コントローラーはモデルを変更します」。モデル、ビュー、コントローラーは概念です-それらはあなたが彼らがそうであると感じるものは何でもあります。クラス、クラスの束、XML構成ファイルを含むクラスのインスタンスなどに名前を付けます。

基本的にはこれでカバーできると思います。フレームワークがなければ、それ以上は得られません。重要なのは、特定のフレームワークがモデル、ビュー、コントローラー、およびそれらの相互作用をどのように定義するかです。

28
Sander

MVCは基本的に、コードをモデルに分割します。モデルはデータを処理し、ビューはデータを表示し、コントローラーはモデルからビューにデータを渡します。

これはAPIやフレームワークを必要とするものではなく、コードを分割する方法にすぎません。多くのフレームワークがそれを使用する理由は、それが非常に単純な概念であり、多くのことにうまく機能し(Webページに完全に適合し)、かなり柔軟性がある(たとえば、Railsを使用すると、couldですべてを実行する)必要に応じて、ビューまたはモデル/コントローラー。)

構造化されたMVCのサンプルのPythonでの簡単な例Pythonスクリプト。必ずしも「ベストプラクティス」とは限りませんが、機能し、かなり単純です。

class Model:
    def get_post(self, id):
        # Would query database, perhaps
        return {"title": "A test", "body": "An example.."}

class Controller:
    def __init__(self):
        self.model = Model()
        self.view = View()

    def main(self):
        post = self.model.get_post(1)
        self.view.display(post)

class View:
    def display(self, item):
        print "<h1>%(title)s</h1>\n%(body)s" % item

c = Controller()
c.main()
20
dbr

最も興味深いリソースの1つは、Trygve Reenskaugの 元の論文 です。 Wikipedia には、MVCに関する多くの言語に依存しない情報もあります。

17
fhe

チェックアウト この説明、例、およびMVCの基本をカバーする図

MVCはシンプルなデザインに最適なセットアップですが、 [〜#〜] pac [〜#〜] と混同されることがよくあります。どちらのセットアップも優れており、2つのリンクは理解しやすい情報を提供します。

7
Matt Farina

サンダーの返答に加えて、ほとんどのフレームワークはフロントコントローラー[〜#〜] mvc [〜#〜]を混同していると思います。これらは実際には2つの完全に異なる概念ですが、多くの場合、両方ともフレームワークに存在します。だから気をつけて。

7
troelskn

どのように尋ねないでください、しかし私はデザインパターンの主題に関する優れたwikiからこのエントリーに出くわしました:

http://www.c2.com/cgi-bin/wiki?ModelViewController

多くの興味深い議論とさまざまなリソースへのポインタ。

そして、それを見つけるのにたった6日しかかかりませんでした!

5
Ixion

この素晴らしい記事を試してください: no-framework PHP MVC framework 。これは、MVCパターンの紹介の代わりにはなりませんが、シンプルで実践的な例を提供します。

4

これを試すことができます PHP MVCチュートリアル 。それはよく書かれていて、とても軽くて、必要なものだけが含まれていて、sourceforgeでコードを見つけることができます。

2
adiian

MVCの主な利点は、懸念の分離です。コードを書くとき、そしてあなたが注意しなければ、それは大きな混乱になる可能性があります。したがって、モデル、ビュー、コントローラを異なる「サイロ」に配置する方法を知っていると、長期的には時間を節約できます。どんな戦略でもいいです。

これが私のものです:

  • モデルは、プロジェクトツリーの/ libの下にあるファイルです
  • ビューは、プロジェクトツリーで.htmlで終わるファイルです
  • コントローラは<form>アクション属性のURLです
1
Slim
1
Paul Sweatte

試すまで、MCVパターンを理解できませんでした。 PHP試すことができる http://cakephp.org に精通している場合、そのPHP RoRパラダイムの。

1
powtac

それが遅いことを知っていますが、人々は後で同じ質問をするでしょう。

上記の非常に良いコード例は次のように置くのが良いと思いますが、YMMV:

#!/usr/bin/python
class Model:
  def get_post(self):
    return {"title":"A test","body":"An example.."}

class View:
  def display(self,items):
    print 'Title:',items['title'],'\n'+'Body:',items['body']

class Controller:
  def __init__(self):
    self.model=Model()
    self.view=View()

  def main(self):
    post=self.model.get_post()
    self.view.display(post)

mvc=Controller()
mvc.main()

Python/php .....で非常に役立つ継承を使用した別の例を次に示します。

#!/usr/bin/python3
class Control:
  def find(self,user):
    return self._look(user)

  def _look(self,user):
    if user in self.users:
      return self.users[user]
    else:
      return 'The data class ({}) has no {}'.format(self.userName(),user)

  def userName(self):
    return self.__class__.__name__.lower()

class Model(Control):
  users=dict(one='Bob',two='Michael',three='Dave')

class View():
  def user(self,users):
    print(users.find('two'))

def main():
  users=Model()
  find=View()
  print('--> The user two\'s "real name" is:\n')
  find.user(users)

if __name__=="__main__":
  main()

これが理にかなっている場合は、Djangoこれで準備が整いました。 無料の本 を読んでください。これが理にかなっている場合は、すぐに読み通すことができます。 OOPは、これらのパラダイムを介して構築および使用されるため、使用する前にDjangoおよびMVCパラダイムについて知る必要があります。

ご覧のとおり、複雑ではないため、コードを適切に保つための多くの方法の1つにすぎません。

これはDjangoのMVCを説明します

1
Michael

私が今まで見た中で最高のMVCチュートリアル: http://www.youtube.com/watch?v=Aw28-krO7ZM (パート1、他のパートをお見逃しなく!)、コードここにあります: http://jream.com/lab/open-source

教え方についての感覚を持つ非常に同情的な人。

0
Sliq

このチュートリアル は、MVCフレームワークの構築の最初から最後までを示します。オブジェクトは、完成するMVCフレームワークを生成するために単独ではありませんが、MVCがどのように機能するか、およびその背後にあるいくつかの概念を示すためです。

0
smateev

検索でこれに遭遇した人のために、PHP SitePointのMVCに関する優れた初心者向けチュートリアルがあります。

http://www.sitepoint.com/the-mvc-pattern-and-php-1/

0

Fluffy cat siteNon-OO MVC を確認してください

0
AntonioCS