2011-02-10 10 views
5

Oceniamy niektóre frameworki PHP na wydajną stronę internetową. CakePHP wygląda całkiem interesująco, ale nie mamy pojęcia, czy pasuje do naszych potrzeb.CakePHP dla dużych projektów

Zasadniczo po sprawdzeniu dokumentacji i samouczków dla CakePHP wygląda naprawdę obiecująco. Niemniej jednak zawsze istniały pewne rzeczy, które podsłuchiwały mnie za pomocą frameworków, może ktoś, kto używał CakePHP w produktywnym projekcie, mógł mi odpowiedzieć na te pytania?

  • Zapisywanie/Odczytywanie danych dla pojedynczych rekordów wygląda całkiem schludnie w CakePHP. Co się stanie, jeśli chcesz odczytać dane z wielu tabel ze złożonymi warunkami, grupując według, klauzule gdzie? W jaki sposób obsługuje go CakePHP?
  • Rusztowanie wygląda całkiem nieźle na podstawowe interfejsy administracyjne. Jak łatwo jest dostosować te rzeczy. Powiedzmy, że mam klucz obcy na jednym z moich stołów. Kiedy tworzę stronę z rusztowaniem, czy CakePHP automatycznie utworzy dla mnie listę rozwijaną ze wszystkimi możliwymi pozycjami? Co się stanie, jeśli chcę odfiltrować możliwe elementy? Powiedzmy, że chcę połączyć dwa pola w jednym polu w części widoku, ale kiedy będę je edytować, powinienem móc edytować oba te pola osobno. czy to działa?
  • Czy myślisz, że byłeś szybszy w rozwoju z CakePHP niż z, powiedzmy, zwykłym PHP?

Odpowiedz

7

Użyłem CakePHP, Zend Framework i napisałem aplikacje "od podstaw" z niczym więcej niż z wychowanków i tak dalej. Chciałbym wspomnieć o tym, że regularnie korzystam z CakePHP, więc weź to jak chcesz.

  • (zapisu/odczytu danych, złożonych warunkach) Można oczywiście zrobić wszystko, co wymienione. Inne mają rację pod tym względem, że próbują dla ciebie wyodrębnić operacje SQL. Nie mam jeszcze zapytania, którego nie mógłbym przetłumaczyć na "język" Cake'a; złożonych zapytań geoprzestrzennych, przyłącza, itp

  • (Rusztowania, złożone warunki) Rusztowanie jest naprawdę tylko służyć jako „początek skoku” sortuje aby pomóc upewnić się, że skojarzenia modelu i tak są ustawione prawidłowo i nie powinny być używane jako trwałe rozwiązanie. W tym celu tak, będzie to całkiem dobra robota w introspekcji twoich relacji i dostarczaniu odpowiednich znaczników.

  • (Szybszy rozwój) Oczywiście. Istnieje duża społeczność z ogromną liczbą wtyczek lub przykładów, które pomogą Ci zacząć. Niezależnie od tego, co wybierzesz, wybór architektury prawie na pewno sprawi, że będziesz "szybszy", jeśli tylko za obsługę drobnych szczegółów związanych z konfiguracją aplikacji.

0

(Uwaga: Jest to subiektywna kwestia Pytasz o opinie Więc mam nadzieję, że nie przeszkadza jeśli dam kopalni...)

(Edit. Ops I mieszać ciasto z CI)

Użyłem Code Igniter a while back. Zrobiło wszystko, co powinno i było dość łatwe do zrozumienia. Jednak w przypadku dużych projektów brakowało funkcji. Wielu zwolenników CI twierdzi, że jest to siła, ponieważ utrzymuje ją szybko i może zrobić niewiele pamięci RAM. To prawda.

Jednak po opracowaniu jednej aplikacji znalazłem się gdzie indziej, więc nie musiałbym pisać kodu, który musiał być wcześniej napisany. Spojrzałem na CakePHP i uznałem to za zbyt restrykcyjne i automagiczne. W szczególności potrzebowałem jakiejś funkcji ACL. To doprowadziło mnie do Zend Framework. Nauczyłem się, że jest luźno sprzężony. Mogę dołączyć tylko te pliki, których potrzebuję. Mogę również skorzystać z Zend_Application dla dużych projektów. Projektowanie zorientowane obiektowo jest koniecznością podczas opracowywania i utrzymywania dużych projektów.

Tak, CI i CakePHP pomogły mi rozwijać się szybciej niż z prostym PHP. Istnieją jednak o wiele potężniejsze ramy. Słyszę i widzę dobre rzeczy o Symfonii. Jest jeszcze kilka innych. Jestem pewien, że inni będą ich wskazywać.

+0

Przepraszam, pomieszałem CakePHP z Code Igniter. Użyłem CakePHP krótko przed upuszczeniem go, ponieważ wydawało się zbyt restrykcyjne i automagiczne. –

3

Ponieważ pytasz o opinie, muszę powiedzieć, że radzę PRZECZYTAJ CakePHP.

Moim największym problemem jest to, że nadal używa PHP4 (napisany i wygenerowany kod). Dlaczego cofamy się? Jest kompatybilny z PHP5, ale sam framework obraca się wokół PHP4.

Polecam, patrząc na Symfony lub Zend. Symfony jest najlepsze, jeśli chcesz mieć większą strukturę - zmusza cię do przestrzegania struktury MVC, którą ustanowił.

Alternatywą jest Zend, ale jest to bardziej "zrób to sam", a raczej raczej zbiór bibliotek. Musisz to wszystko razem złożyć i nie ma on żadnej ścisłej struktury, takiej jak Symfony.

Istnieją oczywiście inne ramy, ale polecam wcześniej powiedziano. Kolejną, na którą możesz spojrzeć, jest Codeigniter.

+0

Ach, myślałem, że używa php5, jesteś tego pewien? – kaklon

+0

Jest kompatybilny z 'php5', ale cała struktura jest napisana przy użyciu' php4'. Cała generacja kodu to 'php4'. Więc, tak, technicznie, mógłbyś napisać bibliotekę 'php5', która by z nią działała, ale jeśli wszystkie twoje modele są generowane w' php4', to w pewien sposób to psuje cały cel. – xil3

+0

Sprawdź wygenerowany kontroler: [http://book.cakephp.org/view/955/Controllers] (http://book.cakephp.org/view/955/Controllers) - to PHP4. Lub przykładowy model: [http://book.cakephp.org/view/1057/Model-Attributes](http://book.cakephp.org/view/1057/Model-Attributes) - Nie widzę żadnych wskazanie PHP5 w jednym z nich, prawda? :) – xil3

2

CakePHP próbuje odciąć bazę danych, więc piszesz bardzo mało kodu SQL (jednak piszesz wiele fragmentów SQL).

Podstawowym procesem jest zdefiniowanie modeli, a następnie zdefiniowanie relacji między modelami (hasOne, belongsTo, hasMany, hasAndBelongsToMany). Możesz umieścić dowolne warunki lub domyślną kolejność na tych skojarzeniach, które lubisz. Następnie za każdym razem, gdy pobierzesz wiersz z bazy danych, wszystkie skojarzone wiersze są automatycznie pobierane za jego pomocą. To bardzo łatwe i potężne.

Wszystko ma wiele opcji konfiguracyjnych, co zapewnia większą elastyczność. Na przykład podczas pobierania danych istnieje opcja rekurencji, która pobiera liczbę całkowitą. Wartość ta określa liczbę asocjacji, z jaką ciasto powinno pobierać dane. Więc jeśli chcesz pobrać użytkownika ze wszystkimi powiązanymi danymi i wszystkimi połączonymi danymi do tego, to jest to banalne.

Prawie wszystko może być przesłonięta na zdefiniowane w locie, i zawsze można spaść z powrotem do pisania własnych SQL, więc nie ma nic Ciasto uniemożliwia robi ...

nie znalazłem dużo korzystania do rusztowań. Odpowiedź na twoje pytanie brzmi "tak", automatycznie zapełni się rozwijane listy itp. Ale nigdy nie używałam go jako podstawy do zbudowania interfejsu. Zwykle używam narzędzia bazy danych do wczytania danych zamiast rusztowań.

Zbudowałem i utrzymuję kilka aplikacji internetowych na CakePHP i jest to bez problemów szybsze niż "toczenie własne". Ale myślę, że to prawda w każdej przyzwoitej oprawie!

Niestety jednym ze słabszych punktów jest dokumentacja. Często potrzebujesz Google, aby uzyskać odpowiedzi, ponieważ oficjalna dokumentacja jest czasami nieudana.

+0

xil3 jest poprawny, że CakePHP nadal obsługuje PHP4, jednak używam CakePHP wyłącznie w środowisku PHP5 i działa idealnie dobrze, a możesz korzystać ze wszystkich zalet PHP5. Na przykład możesz zadeklarować funkcje kontrolera jako prywatne, jeśli chcesz dodać funkcje, które nie mają mieć widoków. – Botman

+0

ACL jest także podstawową funkcjonalnością i jest już od jakiegoś czasu: http://book.cakephp.org/view/171/Access-Control-Lists – Botman

7

To naprawdę zależy od definicji "duży". Czy odnosisz się do dużych zestawów danych? Bardzo skomplikowany model domeny?Lub po prostu wiele różnych kontrolerów/działań?

Zapisywanie/odczytywanie danych.

Wszystko, co można zrobić za pomocą zwykłego kodu SQL, który można wykonać w CakePHP. Nie zawsze jest to przyjemne, ale w najgorszym przypadku nie jest gorsze od prostego kodu SQL.

Ale naprawdę nie powinieneś myśleć o zapytaniach. Powinieneś pomyśleć o swoim modelu domeny. CakePHP implementuje aktywny wzór rekordu. Działa to bardzo dobrze, jeśli twój model domeny ładnie ładnie odwzorowuje aktywny wzór rekordu. Ale jeśli nie, to nie polecam CakePHP. Jeśli twój model domeny nie jest mapowany do Aktywnego Rekordu, spędzasz dużo czasu walcząc z metodą Cake. I to nie jest zabawa. Byłoby znacznie lepiej z ramy, które implementuje wzorzec mapowania danych (np. Zend).

Rusztowania

Rusztowanie jest tymczasowy. Obsługuje klucze obce (jeśli je zdefiniujesz w modelu, jak również w bazie danych), ale to wszystko. Nie można modyfikować rusztowania. Ale możesz je upiec!

Po upieczeniu kontrolera lub widoku zasadniczo zapisujesz rusztowanie do pliku jako punkt wyjścia dla własnej implementacji. Po upieczeniu możesz zrobić wszystko, co chcesz. Minusem wypieku jest to, że nie aktualizuje się, gdy modele lub baza danych się zmienia. Jeśli więc wypiekasz kontroler i widoki i dodasz pola do swojego modelu, musisz ręcznie dodać te pola do kontrolera i wyświetlić kod.

szybkość rozwoju

w moim przypadku, jestem dużo szybszy rozwój strony internetowej w CakePHP następnie w zwykłym kodzie. Ale tylko jeśli Active Record pasuje do aplikacji! Zobacz mój pierwszy punkt. Nawet wtedy Cake jest prawdopodobnie jeszcze szybszy, ale byłbym jeszcze szybszy dzięki lepszej strukturze kostiumów.

Niektóre inne myśli

dużych zbiorów danych

jeśli masz bardzo dużych zbiorów danych i duże wyniki kwerendy następnie ciasto może być problem. Operacja find() chce zwrócić tablicę asocjacyjną, aby wszystkie wiersze były odczytywane, analizowane i konwertowane na tablice. Jeśli twój zestaw wyników jest zbyt duży, zabraknie Ci pamięci. CakePHP nie implementuje obiektów ResultSet, jak wiele innych implementacji Active Record i jest to zdecydowanym minusem. Kończysz ręczne stronicowanie przez własne dane z podzapytaniami. Fuj. Wich prowadzi mnie do następnego punktu:

tablice

Naucz się kochać je, ponieważ CakePHP robi. Wszystko jest uporządkowane i często są duże, złożone i głębokie. Po pewnym czasie robi się naprawdę denerwująco. Nie możesz dodawać funkcji do tablic, więc twój kod jest bardziej brudny niż gdyby CakePHP użył instancji zagnieżdżonych obiektów. Funkcje, które można dodać do tych obiektów, mogą pomóc w utrzymaniu kodu w czystości.

dziwactwa i niespójności

CakePHP ma prawdziwych nieprzyjemnych stinkers ukryte głęboko wewnątrz.Jeśli Active Record pasuje do twojej aplikacji, prawdopodobnie nigdy nie natkniesz się na nie, ale jeśli spróbujesz przekształcić CakePHP w coś bardziej złożonego, będziesz musiał z nimi walczyć. Kilka przykładów:

  • HABTM w niestandardowym modelu używa definicji z drugiej strony relacji, nad którą pracujesz.
  • Kilka naprawdę dziwnych miejsc, w których twoje wyzwalacze przed/po nie są wywoływane (na przykład nie od aktualizacji)
  • nieparzyste zachowanie Model-> field(). Zawsze wysyła zapytania z bazy danych. Uważaj więc na aktualizowanie danych modelu bez natychmiastowego zapisywania go w bazie danych. Niektóre funkcje CakePHP pobierają dane z danych Model -> $ _, a niektóre używają Model-> field(). Wynik może być zupełnie inny, co powoduje bardzo trudne do wykrycia błędy.

W krótkim

Gorąco polecam CakePHP nawet dla „dużych” stron, o ile dany model domeny pasuje na szczycie Active Record. Jeśli nie, wybierz inną strukturę.

1

Po prostu idź z ramą Yii, jest najlepszy w tej kategorii.

+0

Więcej informacji, dlaczego jest lepszy? :-) – nino

+0

@nino pewnie: http://www.yiiframework.com/performance/ – dynamic

+0

Każdy może wyrzucić taki wykres, żeby porównać struktury. Czy istnieje dostęp do surowych danych, aby zapewnić, że testy porównują jabłka z jabłkami? –