Architektura / projektowanie aplikacji PHP [zamknięte]

20

Najpierw zostałem wrzucony do nowej pracy polegającej na tworzeniu aplikacji internetowych w PHP. W żadnym razie nie jestem nowy w PHP, ale wcześniej nie tworzyłem aplikacji na dużą skalę. Zastanawiam się, jak ustrukturyzować swój rozwój, aby uniknąć problemów w przyszłości. Jak projektować i projektować moje aplikacje w rozsądny sposób, który pozwala im skalować się w czasie pod względem funkcjonalności i wydajności. Myślę o takich rzeczach jak:

  • Oddzielanie tyłu od przodu
  • Struktury katalogów

Byłbym wdzięczny za wskazówki dotyczące wzorców architektonicznych i projektowych aplikacji, ram i metod, które pozwalają mi podejść do tworzenia aplikacji internetowych na dużą skalę w sposób zrównoważony.

Brad Morris
źródło
Cześć! Najpopularniejszą architekturą aplikacji internetowych jest MVC , PHP i każda inna popularna platforma internetowa. To powiedziawszy, powinieneś przeczytać nasze FAQ . Chociaż architektura oprogramowania jest na ten temat, musisz zmienić pytanie, aby było bardziej szczegółowe. „Zdrowa dyskusja na temat ogólnej architektury” nie pasuje do formatu pytań i odpowiedzi strony.
yannis
Jestem częstym gościem na stronach S / E, miałem wrażenie, że nie będzie jednej odpowiedzi na to pytanie, stąd komentarz do „dyskusji”. Dzięki za wskaźnik MVC :)
Brad Morris

Odpowiedzi:

29

Zgrubny schemat architektury najnowszego dużego projektu, w który byłem zaangażowany.

wprowadź opis zdjęcia tutaj

Jest to tylko podstawowy zarys, zaadaptowany z faktycznych dokumentów architektury i przedstawiony w sposób przypominający typowe podejście n-tier w połączeniu z typowym podejściem MVC . Jak widać, logika i warstwy danych są połączone za pośrednictwem warstwy usługi, a dokładniej interfejsu API REST , zainspirowanego przez Recess , mniej znany framework PHP.

Nie wymyślaj koła na nowo

Pracuję z trzema ramami:

  • Zend Framework

    Potwór frameworków PHP z imponująco dobrze napisaną bazą kodu i obszerną listą funkcji. W aplikacjach na dużą skalę częściej modyfikujesz framework, a baza kodu ZF jest dla mnie najłatwiejsza do pracy. Ale uwaga, to nie jest podstawowa platforma .

  • Kohana

    Kohana zaczynał jako rozwidlenie CodeIgniter, i to był wystarczający powód, dla którego początkowo go nie używałem. Obecnie rozwinęło się w solidną i elegancką platformę, która wyróżnia się od innych dzięki hierarchicznemu podejściu do MVC . HMVC pozwala na większy zakres modularyzacji niż MVC . W projekcie na schemacie dostosowałem HMVC Kohany do ZF, ale zacząłem używać Kohany do mniejszych projektów i rozważać go także do większych.

  • CodeIgniter

    Używam go tylko ze względu na odziedziczony przeze mnie projekt, unikaj, jeśli to możliwe.

Jak wskazały inne odpowiedzi, ORM zawsze się przydaje. Używam Doctrine intensywnie i powinieneś spojrzeć na jej nowe mapery dla CouchDB i MongoDB . Skalowalność jest koniecznością w aplikacjach na dużą skalę i należy oceniać rozwiązania NoSQL .

Należy jednak pamiętać, że większe aplikacje zwykle mają wyjątkowe wyzwania. Powinieneś ocenić każde popularne rozwiązanie innej firmy i prawdopodobnie wiele zyskasz z kilku niejasnych. Kiedy po raz pierwszy oceniłem Recess, nie był on jeszcze gotowy do produkcji, ale jego podejście w zasadzie znalazło się w projekcie.

Występ

W typowych witrynach internetowych można uniknąć prostego buforowania danych wyjściowych i buforowania kodów operacyjnych, ale w aplikacjach na dużą skalę należy naprawdę rozważyć buforowanie pamięci, które najczęściej opiera się na memcached .

xdebug jest znany głównie jako debugger, ale może również służyć jako profiler . Niedawno zacząłem używać Zend Server i absolutnie uwielbiam jego funkcje śledzenia kodu . Niestety nie są one dostępne w wersji Community Edition , ale xdebug jest całkiem przyzwoitą alternatywą.

Jeśli używasz Apache, upewnij się, że zoptymalizowałeś to do diabła . nginx i lighttpd to pozornie lepsze wybory , pod względem wydajności, ale nie używałem ich zbyt często i nie mogę powiedzieć.

Jeśli chodzi o bazę danych, buforowanie zapytań i wyników Doctrine działa cuda, szczególnie w połączeniu z memcached . I oczywiście nie możemy zapomnieć o interfejsie. Zespół wyjątkowej wydajności Yahoo opracował obszerną listę najlepszych praktyk . Nie jestem naprawdę programistą, ale widziałem niesamowite wyniki w projektach solowych.

Wreszcie PHP ma zupełnie nowy mechanizm wyrzucania elementów bezużytecznych , na który warto zwrócić uwagę.

Bezpieczeństwo

Świat bezpieczeństwa PHP jest co najmniej chaotyczny. Nie jestem ekspertem, dlatego traktuj poniższe wskazówki jako ogólne wskazówki:

  • Otwórz projekt bezpieczeństwa aplikacji sieci Web

    Jest tam wiele dobrych rzeczy, ale dla szybkiego przeglądu powinieneś zacząć od pierwszej dziesiątki . I badaj rozwiązania PHP dla tych typowych luk.

  • Stosuj luki w zabezpieczeniach

    Dobrym nawykiem jest okresowe monitorowanie otwartych błędów PHP . Nawet jeśli sam nie jesteś ekspertem, prawie zawsze istnieją wskazówki dotyczące obejścia zagrożeń bezpieczeństwa. I oczywiście powinieneś rozszerzyć ten nawyk na każdą inną część stosu, szczególnie te najbardziej wrażliwe, takie jak serwer WWW i baza danych.

Tłum w IT Security Stack Exchange może pomóc w uzyskaniu bardziej wykształconych odpowiedzi.

Dalsza lektura

Yannis
źródło
1
Świetna odpowiedź; świetna prezentacja; świetny układ ... Świetna robota!
Dynamiczny
@Jae Thanks! Czytałeś to wszystko? : P Trochę długo, zastanawiałem się, czy powinienem to trochę przyciąć.
yannis
Ha, próbowałem! ;-)
Dynamiczny
Właściwie Yannis, mam do ciebie pytanie. Ostatnio bardzo zainteresowałem się PHP. Próbowałem się tego nauczyć, ale mam trochę kłopotów. Wygląda również na to, że całkiem nieźle radzisz sobie z PHP :-). Czy mógłbyś podzielić się trochę poradami? Jeśli tak, utworzę pokój czatu.
Dynamiczny
Właśnie takiej odpowiedzi szukałem! To cholernie dużo informacji do przyjęcia, myślę, że nie będę musiał robić pochłaniających i majsterkowania w ciągu następnej godziny, ale dałeś mi gdzieś zacząć. Dzięki :)
Brad Morris
1

Witryna deweloperów IBM zawiera ogromną liczbę artykułów PHP , z których wiele jest całkiem dobrych. Zawiera serię artykułów porównujących frameworki PHP oraz kolejną serię o witrynach korzystających z frameworka CakePHP .

Stara strona O'Reilly „Onlamp” zawiera artykuł o MVC w PHP . Autor tego artykułu wyjaśnił MVC bardziej szczegółowo .

Artykuły O'Reilly są trochę stare, ale pomogą ci. Oprogramowanie dla programistów IBM jest naprawdę dobre i obejmuje wiele rzeczy, o które prosisz.

Bruce Ediger
źródło
1

Pracuję wokół PHP od kilku lat. Chociaż zgadzam się z Yannisem, że to pytanie jest jakoś otwarte, myślę, że dałbym wam kilka wskazówek. Po pierwsze, jak powiedział Yannis, powinieneś zajrzeć do MVC, aby to zrobić, dwa frameworki, które mogę polecić, to CodeIgniter i Symfony . Pierwsza jest lekka i bardzo łatwa do rozpoczęcia, jednak może być konieczne dodanie dodatkowych dostosowań, aby uzyskać dobrą konfigurację, przejdzie do tego wkrótce. Symfony to projekt rozpoczęty przez Fabiena Potenciera, który wykorzystuje wiele wzorców projektowych w inżynierii oprogramowania, jednak krzywa uczenia się jest znacznie bardziej stroma niż w CodeIgniter .

Po drugie, powinieneś przyjrzeć się połączeniu z bazą danych, które zabiera mnie do dwóch najbardziej znanych platform ORM dla PHP, Doctrine i Propel . Osobiście uwielbiam Propel, a nawet napisałem o tym, jak skonfigurować czystą instalację Propela w aplikacji opartej na CodeIgniter , jednak Symfony jest bardziej w Doctrine , ale pozwól, że użyjesz jednego z nich. Jeśli chcesz dowiedzieć się więcej o Doctrine i Propel , zapoznaj się z tym pytaniem, które zadałem jakiś czas temu.

Na koniec powinieneś przyjrzeć się szablonom, takim jak Smarty , Dwoo lub Twigg . Smarty jest najstarszy, a zatem najbardziej stabilny. Dwoo dziedziczy po Smarty i dodaje coś lub dwa, aby lepiej wspierać OOP w PHP 5. Wreszcie Twigg jest szablonową alternatywą pod warunkiem, że zespół Symfony , sam tego nie widziałem, ale jeśli pochodzi od zespołu Symfony , powinien być miły .

Mam nadzieję, że to całe przemówienie ma jakiś sens, David

David Conde
źródło