web-dev-qa-db-fra.com

Tutoriel MVC qui ne comptra pas dans un cadre?

Je veux apprendre le "modèle d'architecture" MVC, mais je ne veux pas sauter dans un cadre comme Rails ou Django tout simplement. Je veux comprendre le concept d'abord et écrire un code simple dans mon environnement actuellement familier, qui se trouve être php/html/css/mysql. Je n'ai pas nécessairement besoin d'un tutoriel basé sur PHP, car je comprends beaucoup de langues différentes. Et Je ne veux pas avoir à installer des cadres ni des API ou des bibliothèques. Je veux juste apprendre à réfléchir à MVC et à l'appliquer à mes projets. Toute suggestion?

62
Ixion

Presque tous les cadres sont différemment de MVC, afin que vous puissiez vous retrouver encore plus confus. Les principes généraux de MVC sont très simples: "Le modèle est état; la vue réagit au modèle; le contrôleur réagit à la vue; Modèle change de contrôleur". Le modèle, la vue et le contrôleur sont des concepts - ils sont ce que vous le sentez. Classes, grappes de classes, instances de classes avec des fichiers de configuration XML, vous l'appelez.

J'estime en fait que cela couvre les principes de base. Sans cadre, vous n'auriez pas beaucoup plus loin. Ce qui compte, c'est comment un cadre particulier définit le modèle, la visualisation et le contrôleur et leurs interactions.

28
Sander

MVC fait fondamentalement en train de scinder votre code dans un modèle, qui traite des données, une vue qui affiche les données et un contrôleur qui transmet des données du modèle à la vue.

Ce n'est rien que vous avez besoin d'une API ou d'un cadre pour, c'est juste un moyen de diviser votre code. La raison pour laquelle de nombreux cadres utilisent c'est parce qu'il est un concept très simple, il fonctionne bien pour beaucoup de choses (il s'intègre parfaitement les pages Web), et est assez souple (par exemple, avec Rails, vous pourrait faire tout votre point de vue, votre modèle/contrôleur, si vous le souhaitez ..) ..)

Un exemple rapide en python, d'un exemple MVC structuré Python Script. Pas nécessairement "meilleures pratiques", mais cela fonctionne et est assez simple:

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

L'une des ressources les plus intéressantes est les papiers originaux de Trygve Reenskaug. Wikipedia a également beaucoup d'informations langagières-agnostiques sur MVC.

17
fhe

Vérifiez cette description, exemple et diagramme qui couvrent les bases de MVC .

MVC est une excellente configuration pour des dessins simples mais il est souvent confondu avec [~ # ~ # ~ # ~ ~] qui est un développement similaire et supplémentaire sur MVC. Les deux configurations sont formidables, les deux liaisons donnent des informations pour les aider à être compréhensibles.

7
Matt Farina

En plus de la réponse de Sander, je dirais que la plupart des cadres confondent contrôleur avant et MVC . Ils sont vraiment deux concepts complètement distincts, mais ils sont souvent présents dans des cadres. Alors faites attention à cela.

7
troelskn

Ne me demandez pas comment, mais je suis tombé sur cette entrée d'un excellent wiki sur le sujet des modèles de conception:

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

Beaucoup de discussions intéressantes et de pointeurs à diverses ressources.

Et cela m'a pris seulement six jours pour le trouver!

5
Ixion

Essayez ce grand article: le framework PHP MVC framework . Ce n'est pas un substitut d'une introduction au modèle MVC, mais il fournit des exemples simples et pratiques.

4
Mihai Limbășan

Vous pouvez essayer cela didacticiel PHP MVC . Il est bien écrit, très léger, ne contient que l'essentiel et vous pouvez trouver le code sur Sourceforge.

2
adiian

Le principal avantage de MVC est la séparation des préoccupations. Lorsque vous écrivez le code, et si vous n'êtes pas prudent, cela peut devenir un grand désordre. Donc, sachant comment mettre des modèles, des vues et des contrôleurs dans différents "silos" vous permettent de gagner du temps à long terme. Toute stratégie est bonne.

Alors voici le mien:

  • les modèles sont des fichiers trouvés sous/lib dans l'arborescence du projet
  • les vues sont des fichiers se terminant par .html dans l'arborescence du projet
  • les contrôleurs sont des URL dans <formulaire> Attributs d'action
1
Slim
1
Paul Sweatte

Je n'ai pas compris le modèle MCV jusqu'à ce que je l'ai essayé. Si vous connaissez PHP vous pouvez essayer http://cakephp.org , son A PHP Framework utilise le plus des paradigmes de Ror.

1
powtac

Sachez que c'est tard mais je suis sûr que les gens vont venir plus tard avec la même question.

Je pense que le très bon code exemple ci-dessus est mieux mis comme ça, mais 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()

Voici un autre exemple utilisant l'héritage qui peut être très utile dans 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()

Si cela a du sens, allez-y Django Maintenant votre prêt est prêt. Il suffit de lire le - Livre gratuit Si cela est logique que vous suivrez rapidement. Vous devez être capable Pour connaître environ OOP et MVC paradigms avant d'utiliser Django car il est construit et utilisé via ces paradigmes.

Comme vous le voyez, il n'est pas complexe, ce n'est que l'une des nombreuses façons de garder votre code dans l'ordre.

Ceci explique MVC à Django

1
Michael

De loin le meilleur tutoriel MVC que j'ai jamais vu: http://www.youtube.com/watch?v=aw28-kro7zm (partie 1, ne manquez pas les autres parties!), Le code peut être trouvé ici: http://jream.com/lab/open-source

Un gars très sympathique avec un sentiment de façon de savoir-faire.

0
Sliq

Ce didacticiel vous mènera du début à la fin de la construction d'un cadre MVC. L'objet n'est pas Soley de produire le cadre MVC fini, bien que cela se produise, mais de démontrer comment MVC fonctionne et certains des concepts qui se trouvent derrière elle ..

0
smateev

Pour toute personne qui vient à travers cela dans une recherche, il y a un excellent tutoriel débutant sur PHP MVC sur point de site.

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

0
Jordan Windebank

Vérifiez le non-OO MVC sur le Site de chat moelleux

0
AntonioCS