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.
web-development
design
php
architecture
Brad Morris
źródło
źródło
Odpowiedzi:
Zgrubny schemat architektury najnowszego dużego projektu, w który byłem zaangażowany.
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
źródło
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.
źródło
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
źródło