2012-02-17 9 views
11

Jakie są odpowiedniki Pyramid/Python w Modelu - Widok - Kontroler frameworków PHP, takich jak Kohana?Piramida: Odpowiednik MVC w PHP Frameworks w Pyramid/Python?

In Pyramid "Model" is .... and it is used for ..... 
In Pyramid "View" is .... and it is used for ..... 
In Pyramid "Controller" is .... and it is used for ..... 

Próbuję zrozumieć logikę piramidy. Jako uzupełnienie odpowiedzi, każda pomoc, dokumentacja itp. Byłyby mile widziane.

Dzięki.

Odpowiedz

19

Pylony, jeden z dwóch ram, które połączyły się być Pyramid (drugi został repoze.bfg) był „blisko” do systemu MVC.

Podsumowuję cytaty, ponieważ w ciągu ostatnich kilku lat wiele osób walczyło o to, co oznacza MVC ... a wiele projektów, które kiedyś reklamowały się jako "MVC" zaczęło nazywać je "MTC" (model kontroler szablonu) "MT" (szablon modelu) lub "MV" (widok modelu). Wszyscy zgadzają się co to jest "model", ale dokładnie to, do czego "widok" i "kontroler" odwzorowują - na danym schemacie - może być punktem spornym.

Pyramid i pylony obie mają „wysyłający” funkcjonalność, aby skonfigurować mapowanie na życzenie. Pod pylons jest w config/routes.py; pod Piramidy to trochę inaczej - domyślne rusztowania mieć routing w app/Init .py, ale jesteś wolny, aby złamać go w app/routes.py lub użyj config.include(), aby przesunąć go do ciebie 'handlers' lub config.scan(), aby pobrać go z "widoków".

„koparki” w piramidy są dostarczane przez pyramid_handlers i są naprawdę tylko „” widoki z bandą auto generacji rzeczy tam. Jeśli chcesz, Twoje aplikacje mogą korzystać z obu funkcji obsługi ORAZ widoków (kopalnia do).

W każdym przypadku, w zależności od sposobu interpretowania MVC/MTC/etc, jest to luźny stół, co może chcesz:

  || mvt   | mvc   | mvc 
========================================================================== 
model  || sqlalchemy  | sqlalchemy  | sqlalchemy 
view  || views/handlers | templates  | views/handlers + templates 
controller ||    | views/handlers | dispatch/routing 
template || templates  |    | 

Szybka uwaga-ja zdefiniowania powyższego nie w oparciu o moje interpretacja lub co to jest "oficjalna" definicja MVC ... Opiera się ona na tym, w jaki sposób inne popularne struktury reklamują się same.

5

Z Pyramid Introduction:

mówisz Piramida jest MVC, ale gdzie jest Controller?

Autorzy Pyramid uważają, że wzór MVC nie bardzo pasuje do sieci . W aplikacji Pyramid znajduje się drzewo zasobów , które reprezentuje strukturę witryny i widoki, które mają tendencję do prezentowania danych przechowywanych w drzewie zasobów i zdefiniowanego przez użytkownika "modelu domeny". Jednak żaden obiekt dostarczony przez framework rzeczywiście nie musi być zgodny z pojęciem "kontrolera" lub "modelu". Więc jeśli musiałbyś nadać temu akronim, domyślam się, że powiedziałbyś, że jest to struktura "RV", a nie "MVC". "MVC" jest jednak wystarczająco zbliżony jako moniker klasyfikacji ogólnej do celów porównawczych z innymi frameworkami internetowymi.

+0

Witam, czytałem to wszystko na ich stronie internetowej, a nawet spojrzał na przykładach, ale nadal nie rozumiem zatem szukać wyjaśnień od innego dewelopera PHP, który można umieścić go w warunkach określonych w moje pytanie, tak, że mogę zrozumieć to. Dziękuję Ci. – Phil

+0

Ale twórcy Pyramid mówią ci, że nie ma bezpośredniej analogii. Dlaczego im nie ufasz? – Wilduck

+1

Nie, nie, ufam im. Ludzie Pythona są naprawdę mili. Po prostu chciałbym zrozumieć logikę, która za tym stoi. Na przykład w Kohanie jest to proste. Zdefiniuj identyfikatory URI, wyzwal kontroler z identyfikatora URI, powiedz kontrolerowi, aby zrobił coś, na przykład użyj klasy modelu do wykonywania wywołań DB, a następnie dołącz szablon lub dwa, wymieszaj dwa, wygeneruj odpowiedź i odeślij ją. Chcę tylko wiedzieć, w jaki sposób ten proces odbywa się za pomocą Pyramid. Naprawdę lubię składnię Pythona i chcę się do niej dostać. Dziękuję Ci. – Phil

2

Mam doświadczenie z CakePHP i teraz zaczynam od Pyramid i Python. Nie ma bezpośredniego mapowania, ale to nie dlatego, że piramida robi rzeczy w dziwny sposób, ale dlatego, że autorzy ramowi nadużyli terminu MVC.

Na przykład w Cakeu są pewne klasy, które lubią nazywać "Models", ale przez większość czasu są to tylko klasy ORM. Kontrolery są najczęściej używane jako przestrzenie nazw dla powiązanych metod zwanych "działaniami", które przekazują dane do widoków, które są tylko szablonami.

W kategoriach piramidalnych "Zasoby" to "modele" i możesz z nich korzystać wszędzie tam, gdzie chcesz, jeśli chcesz ORM, możesz użyć SQLAlchemy na przykład, mongodb lub gdziekolwiek.

Ramy same funkcjonują jako "kontrolery", a działania nazywane są "widokami", które mogą być normalnymi funkcjami lub klasami, możesz je dowolnie organizować, gdziekolwiek chcesz. W widokach tych można użyć szablonu i mechanizmu renderującego do skonstruowania odpowiedzi wysyłanej do przeglądarki.

Nadzieja pomaga (proszę wybaczyć mój zły język angielski)

+0

Dziękuję bardzo za taką odpowiedź.Jeśli nie masz nic przeciwko, chciałbym zadać ci jeszcze kilka pytań. W PHP (ogólnie) rozpakowujesz pliki, umieszczasz je w folderze i uruchamia apache + php. W Pythonie mam problem ze zrozumieniem, jak to działa. Czy każdy folder jest uważany za "aplikację"? W jaki sposób serwer internetowy może obsługiwać wiele witryn w języku python? A jaki jest pożytek z WCGI? Chcę wejść do Pythona, ale wydaje się to skomplikowane w odniesieniu do WCGI i wszystkich tych narzędzi wiersza poleceń. – Phil

11

Jeśli chcesz, z piramidy można symulować wzorzec MVC:

  • Model: na przykład przy użyciu SQLAlchemy (http: // docs. sqlalchemy.org)
  • Zobacz: Korzystanie z szablonów i metod przeglądania.
  • Kontroler: Można użyć pyramid_handlers pakietów, aby utworzyć kontrolery i mapy działań określonych w drodze do działań w sterowniku, na przykład:
 
    Class HomeController(object): 
    def __init__(self, request): 
      self.request = request 

     def form_proc(self): 
      name = self.request.params['name'] 
      ... bla, bla, bla ... 

W konfiguracji można dodać coś takiego:

 
    config.add_handler('home', '/home/{action}', 
         handler='mypackage.HomeController') 

Jeśli umieścisz ten adres URL w formularzu ->http://SERVER_NAME/home/form_proc, możesz przetworzyć formularz.

Piramida zapewnia pełną elastyczność, jeśli jest potrzebna.