Dlaczego Zend Framework jest tak skomplikowany?

42

Jestem programistą i mam doświadczenie w tworzeniu kilku aplikacji internetowych w PHP. Mam pomysł na opracowanie produktu dla siebie i zdecydowałem się na użycie frameworka opartego na MVC, ponieważ bardzo podoba mi się pomysł MVC oraz łatwość zarządzania i modyfikowania aplikacji bez żadnych trudności.

Wybrałem Zend Framework i wydaje się to trudniejsze niż nauka nowego języka programowania. Jest tak wiele rzeczy naraz, nawet w celu uruchomienia małej aplikacji.

Podobnie pomysł routingu jest bardzo złożony, ponieważ jest nowy dla głównego programisty. Wiem, że faceci tutaj czytają tysiące takich pytań, jak jedno, które zadaję, ale nie zamierzam uczyć się Zend Framework z dnia na dzień. Jestem gotów poświęcić tyle czasu, ile potrzebuje, ale do tej pory nie ma dla mnie sensu. W bibliotece Zend jest tysiące klas, ale skąd noob wiedziałby, gdzie użyć konkretnej klasy i jak z niej korzystać? Nadal bardzo trudno mi zrozumieć bootstrap Zend Framework i jego mapowanie. Czytam instrukcję, podążam za nią i wszystko zaczyna działać, ale tak naprawdę nie do końca tak, jak się naprawdę dzieją.

Nadal nie mam pojęcia, w jaki sposób modele, widoki i kontrolery współpracują ze sobą oraz jak zaplanować aplikację w Zend Framework. Jeśli chodzi o rdzeń php, mam dokładnie w głowie pomysł, co robić, a następnie łatwo przetłumaczyć je w kodzie, ale w Zend Framework nie wiem, jak przetłumaczyć mój pomysł.

Umair Abid
źródło
10
Jeśli dopiero zaczynasz przygodę z MVC, zaimplementuj samodzielnie rusztowanie MVC, zanim zaczniesz korzystać z pełnych wersji - nie nadają się do nauki.
treekoder
2
@greengit właśnie to zrobiłem!
Kyle Hodgson,
Zend Framework nie jest trudny, wymaga trochę czasu na naukę, z powodu złej dokumentacji, ale mogę cię zapewnić, że jest to bardzo potężny framework. Na ZF2 zbudowaliśmy duże oprogramowanie dla przedsiębiorstw, a elastyczność konfiguracji jest niezwykła w ZF.
albanx

Odpowiedzi:

38

Zend Framework jest trudny. Nie został zbudowany jako podstawowy poziom, zakłada się znajomość pojęć 1 . To powiedziawszy, pierwszym wymaganiem dla Zend Framework 2.0 jest uczynienie go nieco łatwiejszym:

Ułatw krzywą uczenia się

Pod koniec 2009 r. Przeprowadziliśmy ankietę wśród użytkowników środowiska, aby określić, z czego korzystają, z jakich środowisk korzystają i jakie są ich potrzeby. Najważniejszym problemem, bez żadnych ograniczeń, była trudność w nauce ram. Niektóre z tych problemów obejmują:

  • Trudność w „pierwszej godzinie” z ramami.
  • Niepewność co do „kolejnych kroków” po szybkim uruchomieniu.
  • Niespójne interfejsy API w samym kodzie źródłowym. Jeden komponent może wykorzystywać „wtyczki”, inny „pomocników”, a jeszcze inny „filtry”.
  • Niepewność co do tego, gdzie istnieją punkty rozszerzenia i jak je zaprogramować.
  • Zamieszanie co do tego, czy mogą używać Zend Framework tylko jako stosu MVC, czy jako pojedynczych komponentów.

Więc to nie tylko ty, jest to trudne dla wszystkich - przeczytaj całą stronę wiki, istnieje wiele rzeczy, które zostały określone jako niepotrzebnie złożone. Ale nawet jeśli powyższy wymóg zostanie spełniony, nadal nie stanie się on podstawową platformą, co oznacza, że ​​nie jest to struktura, na której powinieneś się uczyć, ale taka, z której powinieneś korzystać, kiedy faktycznie rozumiesz związane z nią pojęcia.

Ponieważ wciąż się uczysz, o wiele bardziej wartościowe byłoby zbudowanie własnej architektury MVC. Rasmus Lerdorf za notorycznie 2no-frameworkiem MVC framework ” blogu daje bardzo prosty i czysty przykład poprzez PHP MVC procesowego, bez ram lub innej biblioteki osób trzecich zaangażowanych.

Ale jeśli naprawdę chcesz uczyć się z frameworkiem, powinieneś rozważyć mikrostrukturę zamiast w pełni rozwiniętej. Slim ma bardzo małą, czystą i dokładnie przetestowaną bazę kodu i powinien być idealny do nauki. Nie bawiłem się żadnymi innymi mikroukładami, powinieneś przeprowadzić własne badania i zdecydować, który z nich jest dla ciebie lepszy.

Aby uzyskać szybkie i brudne wprowadzenie do routingu, zobacz moją odpowiedź na to pytanie . Nie jest to bardzo trudna koncepcja, ale Zend Framework sprawia, że ​​wygląda o wiele więcej niż jest w rzeczywistości .

1 Najlepszy opis, jaki przeczytałem dla ZF, to to, że jest to framework do budowania frameworku , a nie frameworku aplikacji. Jego surowa moc i ekstremalna lista funkcji nie są odpowiednie dla małych i średnich stron internetowych. Niestety tak naprawdę nie mogę znaleźć, gdzie to przeczytałem.

2 Przeczytaj zastrzeżenie na górze postu na blogu.


Aktualizacja, zainspirowana komentarzem @ Karpie:

Framework nie powinien być trudny, cały sens ramy ma ułatwić rzeczy. Możliwe, że nawet jeśli dobrze rozumiesz związane z tym koncepcje, ZF nie jest dla ciebie odpowiedni.

Przy wyborze frameworka wiąże się wiele subiektywnych czynników i chyba że w każdym innym frameworku brakuje funkcjonalności, której absolutnie potrzebujesz - i nie możesz sam pisać, powinieneś unikać ZF i używać frameworku, który jest dla ciebie bardziej naturalny.

Jeśli znasz pojęcia, środowisko nie powinno przeszkadzać.

Yannis
źródło
3
Nawet ze znajomością pojęć trudno jest się w to wplątać i szczerze mówiąc nie sądzę, by było to warte wysiłku. Dokumentacja jest często niepoprawna, przykłady w Internecie po zwykle nieaktualne, kanał wsparcia IRC jest ogólnie martwy, a z tego, co widziałem, nie ma innego miejsca na wsparcie.
sevenseacat
@Karpie Nie uważam tego za trudne, szczerze mówiąc. Ale to trochę idiomatyczne, więc zdecydowanie pasuje niektórym programistom lepiej niż innym. Na przykład łatwiej mi zrozumieć niż CodeIgniter, ale to tylko z powodu mojego osobistego procesu: wolę czytać kod niż dokumentację, a kod CI jest tak bzdurny, że mój umysł się wyłącza. Ale dla większości programistów CI jest o wiele łatwiejszy do nauczenia niż ZF i nie wszyscy zgadzają się, że kod CI jest gówniany. Ważną rzeczą jest to, że framework nie powinien być trudny w użyciu, jeśli zawsze istnieją inne.
yannis,
Uważam, że Zend Framework 1 jest stosunkowo łatwy do uchwycenia. Ale powiedziałeś, że idea ZF2 polegała na ułatwieniu. Czuję, że jest o wiele bardziej złożony niż kiedykolwiek wcześniej.
kupione777
Wszystko w ZF2 jest zbyt skomplikowane. Dobrze byłoby zaprezentować „framework” Zend jako zbiór modułów / bibliotek. Brak rzeczywistych ram. Nie ma warstwy modelu, więc albo musisz zaimplementować własną, co zwykle jest bałaganem, albo użyć Doctrine, która wymaga pewnej integracji. Aby napisać kilka testów jednostkowych, musisz poświęcić absurdalnie dużo czasu na rozszyfrowanie instrukcji i napisanie (lub próba znalezienia online) jakiegoś kodu tylko po to, aby uruchomić testy. Chociaż może być zbudowany wokół koncepcji dźwiękowych, ich interpretacja tych koncepcji jest okropna.
vladko
11

Nie podobało mi się brak możliwości wykrycia, kiedy zacząłem używać Zend Framework, zbyt wiele klas polega na tablicach i musisz sprawdzić, jakie klucze możesz / musisz zdefiniować.

Nie ma nic złego w posiadaniu przejrzystych metod lub nazwanych paramów, to znaczy, że imo przeszedł długą drogę do pomocy w odkrywalności.

Ramy Yii są jeszcze gorsze z tego rodzaju rzeczami.

DBlackborough
źródło
3
+1 Mój znaczący powód, dla którego nie rozważałem poważnie absorpcji ZF / ZF2, to brzydkie, autouzupełnianie / podpowiedzi i intuicyjne unikanie konfiguracji opartych na zagnieżdżonych tablicach. Narusza moją osobistą niechęć do nadużywania tablic w świecie OO.
Gavin Howden
1
Właśnie moja opinia.
Daniel
Nie uważam Yii 1 za zbyt trudne. Może to dla mnie. : P
Eugine Joseph
5

Niektóre problemy z ZF, które sprawiają, że denerwująca (i trudna dla początkujących) praca z:

ORM nie jest wliczony w cenę . Można by pomyśleć, że powinna to być bardzo podstawa nowoczesnego frameworka MVC, ale tylko ZF ma tylko Zend_Db_Tableniedorzecznie niski poziom. Możesz korzystać z Doctrine, ale wtedy jesteś sam, nie jest w żaden sposób zintegrowany z ZF.

Nieczytelne, rozdęte routery URL . Na przykład potrzeba 9 linii kodu, aby zdefiniować najprostszy routing:

$route = new Zend_Controller_Router_Route(
    'archive/:year',
    array(
        'controller' => 'archive',
        'action'     => 'show'
    ),
    array('year' => '\d+')
);
$router->addRoute('archive', $route);

Biorąc pod uwagę ilość pytań z tym związanych, dla większości ludzi nie jest to proste. Ponadto nie mogę nic na to poradzić i porównać go z Django, gdzie byłby odpowiednik powyższego

url(r'^archive/(?P<year>\d+)/$', 'archive.show')

Zend_Acljest sposobem na skomplikowanie większości przypadków użycia. Zwykle konieczne jest uwierzytelnienie w celu identyfikacji użytkownika. I opcja łatwego ograniczenia dostępu do niektórych kontrolerów tylko dla uwierzytelnionych użytkowników. W przypadku wielu użytkowników to wystarczy. W przypadku bardziej skomplikowanego przypadku logika biznesowa w kontrolerze musi ustalić, czy użytkownik ma uprawnienia do wykonania określonej akcji. W ZF nie masz opcji łatwego ograniczenia dostępu tylko do uwierzytelnionych użytkowników, standardowym sposobem jest korzystanie z ACL i systemu ról, bez względu na to, jak proste są Twoje potrzeby.

Rozdęty układ katalogów i plików . Zalecana struktura katalogów wygląda następująco:

<project name>/
    application/
        configs/
            application.ini
        controllers/
            helpers/
        forms/
        layouts/
            filters/
            helpers/
            scripts/
        models/
        modules/
        services/
        views/
            filters/
            helpers/
            scripts/
        Bootstrap.php
    data/
        cache/
        indexes/
        locales/
        logs/
        sessions/
        uploads/
    docs/
    library/
    public/
        css/
        images/
        js/
        .htaccess
        index.php
    scripts/
        jobs/
        build/
    temp/
    tests/
vartec
źródło
4

Zend Framework jest jak grupa niezależnych bibliotek, które razem działają jak framework. Bardzo trudno jest jednocześnie stworzyć coś oddzielonego i „łatwego w użyciu”. Dla „łatwego w użyciu” mam na myśli robienie skomplikowanych rzeczy za pomocą kilku linii kodu.

Zatem rozpoczynanie od Zend jest trudniejsze niż inne frameworki, takie jak CakePHP. Ale ja także łatwiej rozszerza i dostosowuje aplikację bez brudnych kodów. Zend przestrzega również standardów i wzorców projektowych w całym kodzie, więc po przeczytaniu kodu frameworka możesz odgadnąć, co się dzieje.

Kiedy mówisz, że nie masz pojęcia o tym, jak modele, widoki i kontrolery współpracują ze sobą, nie obwiniaj frameworka. Implementuje MVC jak każdy inny framework, z tym wyjątkiem, że oddziela Model od struktury Database, która w wielu frameworkach jest implementowana w tej samej klasie. Będziesz musiał stawić czoła wielu klasom, takim jak Zend_Db_Table, Zend_Db_Table_Row, Zend_Db_Table_Rowset itp.

Dlatego uważam, że Zend Framework jest bardziej skomplikowany, ponieważ jest bardzo oddzielony i możesz używać jego klas w innych projektach, które nie używają ZF.

gustavotkg
źródło
3

Zend Framework wymaga solidnego uziemienia w OOP i wzorcach projektowych. Z mojego doświadczenia spotykam tylko doświadczonych programistów Java-JEE-Struts-Spring, którzy łatwo zapoznają się z Zend Framework. Przeciętny programista PHP ma trudności ze zrozumieniem koncepcji i architektury stojących za Zend Framework. Ale patrz hej! Zend Framework pochodzi od firmy „Zend”, która tworzy PHP na pierwszym miejscu. Dlatego trzeba się zastanowić, a może nie uszanować!

Rohit
źródło
1
Rasmus Lerdorf stworzył php, zend jest wielkim zwolennikiem php. Z tego co pamiętam.
Sarmen B.
Nie mogę się z tym nie zgodzić. Jestem programistą Java. Nie tylko łatwo znalazłem drogę do ZF, ale wolałem ją od innych frameworków.
jkushner
-2

Wierzę, że zend ma tylko skomplikować sprawę, MVC to oszustwo logicznie działające jak zwykły PHP. ale rozwijasz go przed MVC, jak rozdzielanie plików w różnych katalogach.

Pamiętaj, że ten, kto mówi, że Zend jest bardzo bezpieczny i nie może się włamać, jest wielkim głupcem. Zend może również łatwo hakować, jeśli nie użyłeś zabezpieczeń iniekcyjnych Mysql. Chciałbym zasugerować zdefiniowanie własnych funkcji, a następnie rozdzielenie plików w różnych katalogach, aby było podobne, tak jak MVC zapisz funkcje, klasy i inne podstawowe materiały w jednym katalogu o nazwie kontroler, a następnie dodaj swoje strony internetowe w innym katalogu, w którym potrzebujesz aby uwzględnić wszystkie pliki funkcji, ten katalog będzie znany jako widok. umieść pliki javascript i css w różnych katalogach, które będą znane jako model.

Pamiętajcie, że na tym świecie wiele osób zawsze ciężko pracuje, aby skomplikować sprawę, ponieważ oni sami są skomplikowani do zrozumienia.

PHP jest językiem, którego uczysz się w książce i od nauczycieli. Zend to nic innego jak struktura, która komplikuje sprawy Twoim klientom. więc ilekroć klient potrzebuje modyfikacji, wracają do prawdziwych programistów, a ci programiści pobierają od Ciebie więcej pieniędzy. Zend jest chroniony po prostu kłamstwem, jeden błąd, taki jak zwykłe kodowanie php, może spowodować włamanie się na stronę.

Pooja dhimbani
źródło
-6

Przynajmniej rzecz „szybkiego startu” musi być łatwiejsza, aby uczynić platformę przyjazną ..... jeśli wolisz coś trudniejszego niż lepszą, powiedziałbym: „ZF to najlepszy framework PHP”, w przeciwnym razie NIE. Pobrałem ZF-2 i wypróbowałem (szczerze mówiąc, jestem nowicjuszem w ZF). Smutne jest to, że wciąż nie znalazłem solidnego „przewodnika szybkiego startu” z prostym szkieletem projektu w Internecie. Jedyne, czego szukam, to prosty sposób dołączania plików bibliotecznych i tworzenia folderu projektu z funkcjami MVC. Użyłem Codeigniter, Cake php, Yii, ale uznałem, że jest dość nieprzyjazny. Tak, wiem, że Zend aktualizuje PHP, ale to nie znaczy, że jest to najlepszy framework lub cokolwiek powiesz.

Baran
źródło
dalej nie lubię .... LOL
Ram