Bir çerçeve dayanmaz MVC öğretici?

15 Cevap php

Ben "mimari model" MVC öğrenmek istiyorum ama henüz Rails veya Django gibi bir çerçeve içine atlamak istemiyorum. Ben ilk kavramını anlamak ve PHP / HTML / CSS / MySQL olur benim şu anda tanıdık bir ortamda, bazı basit kod yazmak istiyorum. Ben farklı dilde çok anlıyorum ben mutlaka, PHP tabanlı bir öğretici gerekmez. Ve ben herhangi çerçeveler veya API'leri veya kitaplıkları yüklemek zorunda istemiyorum. Ben sadece MVC düşünüyorum ve benim projeleri uygulamak için öğrenmek istiyorum. Herhangi bir öneriniz?

15 Cevap

Hemen hemen her çerçeve farklı MVC yapar, böylece daha da karıştı alıyorum sonunda olabilir. MVC genel ilkeler çok basit: "Model halidir; görünümü Modele tepki gösterir; denetleyici görüntülemek için tepki; kontrolör değişiklikler modeli". Model, görünüm ve denetleyici kavramlar vardır - onlar bunları olmak hissediyorum ne olursa olsun vardır. Sınıfları, sınıfların demetleri, XML yapılandırma dosyaları ile sınıfların örneklerini, bunu adı.

Ben aslında bu konuda temel ilkeleri kapsadığını düşünüyorum. Bir çerçeve olmadan, size çok daha fazla almak istemiyorum. Önemli belirli bir çerçeve modeli, görünümü ve denetleyici ve bunların etkileşimleri tanımlayan nasıl.

MVC temelde sadece veri, veri görüntüleyen bir görünüm ve View Model verileri geçer bir Controller ile ilgilenen bir model, kodunuzu parçalanıyor.

Bu sadece sizin kodunuzu bölme bir yolu, bir API veya çerçeveye ihtiyaç var şey değil. O birçok şey (mükemmel web sayfalarını uyuyor) için iyi çalışır, çok basit bir kavramdır, ve Rails ile (örneğin, oldukça esnek olduğu için birçok çerçeveler kullanmak sebebi, could her şeyi yapmak sizin görünüm veya model / denetleyici, bunu-istenirse ..)

MVC Python komut dosyası yapılandırılmış bir örnek python, içinde hızlı bir örnek. Ille "iyi uygulamalar", ama çalışır, ve oldukça basittir:

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()

En ilginç kaynaklardan biri Trygve Reenskaug içinde original papers vardır. Wikipedia Ayrıca MVC dil agnostik birçok bilgi vardır.

Çıkış this description, example, and diagram that cover the basics of MVC.

MVC basit tasarımlar için büyük bir kurulum ama çoğu zaman PAC hangi MVC benzer ve daha da geliştirilmesi ile karıştı. Her iki kurulumları iki bağlantıları onları anlaşılabilir yardımcı olacak bilgiler vermek harika.

Sander'in yanıta ek olarak, ben en çok çerçeveler front controller ve MVC karıştırmayın olduğunu söyleyebilirim. Onlar gerçekten iki tamamen ayrı kavramlardır, ancak genellikle çerçeveler mevcut ikisi de. Yani dikkat.

Nasıl olduğunu sormayın, ama ben tasarım desen konuda mükemmel bir wiki bu girdinin geldi etmeyin:

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

Çeşitli kaynaklara ilginç tartışma ve işaretçileri sürü.

Ve sadece onu bulmak için altı gün sürdü!

Bu büyük yazı deneyin: The no-framework PHP MVC framework. Bu MVC deseni bir giriş için bir yerine değil, ama basit ve uygulamalı örnekler sağlar.

MVC en büyük avantajı kaygıları ayrılmasıdır. Eğer kod yazmak, ve eğer dikkatli değilseniz, büyük bir karmaşa haline gelebilir zaman. Yani farklı "silolarda" Modelleri, Görüntüleme ve Kontrolörleri koymak nasıl bilmeden uzun vadede size zaman kazandırır. Herhangi bir strateji iyidir.

Yani burada benim:

  • modeller proje ağacındaki / lib altında bulunan dosyalar
  • views proje ağacındaki. html biten dosyalar
  • kontrolörleri
    içinde URL'ler eylem nitelikleri

Ben denedim kadar MCV desen anlaşılmış değildi. PHP ile aşina iseniz http://cakephp.org, onun bir PHP çerçeve wich RoR paradigmaların en çok kullandığı deneyebilirsiniz.

Bu deneyebilirsiniz PHP MVC Tutorial. Bu iyi yazılmış, çok hafif, sadece şartları içeren ve sourceforge kodunu bulabilirsiniz oluyor.

Geç olduğunu biliyorum ama insanlar aynı soru ile daha sonra birlikte gelecek eminim.

Yukarıda çok iyi kod örneği daha YMMV ama böyle koymak olduğunu düşünüyorum:

#!/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()

Burada python / php çok yararlı olabilir devralmayı kullanarak başka bir örnek .....

#!/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()

Bu yaparsa anlamda şimdi hazır django gidin. Sadece bu hızla bunun üzerinden gidecek mantıklı eğer free book okuyun. Sizin sağa inşa edilmiş ve bu paradigmalar yoluyla kullanılır gibi Django kullanmadan önce OOP ve MVC paradigmaları hakkında bilmek gerekir olsa.

Eğer sadece sipariş kodunuzu tutmak için birçok yollarından biridir karmaşık değil gördüğünüz gibi.

This explains MVC in django

Bugüne kadar gördüğüm en iyi MVC öğretici: http://www.youtube.com/watch?v=Aw28-krO7ZM (! Bölüm 1, diğer parçaları özledim Yüklü), kodu burada bulunabilir: http://jream.com/lab/open-source

How-to-Teach-şeyler için bir duygu ile çok sempatik bir adam.

Bir aramada bu genelinde gelir herkes için SitePoint PHP MVC büyük başlayanlar öğretici var.

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