Podniosłeś bardzo interesujące i fundamentalne pytanie. Pytanie dotyczące architektury projektu na dużą skalę i organizacji struktury folderów (która jest drugorzędna w stosunku do architektury).
Obecnie najczęstszym podejściem do budowania architektury frameworka CMS jest użycie wzorca MVC. Istnieje kilka dobrych artykułów na temat budowania własnych środowisk MVC, jednym z nich jest Zbuduj środowisko MVC za pomocą PHP .
MVC oznacza Model, Widok, Kontroler. Możesz nazywać te podejścia jak tylko chcesz - MVC, HMVC, MVP. Istotą jest izolowanie poszczególnych elementów systemu. „Kontroler” pobiera dane z „Modelu” i wysyła je do „Widoku”, który wyświetla ostateczny kod HTML. Zaimplementowałeś już „V” w swoim contacts.php
i „MC” w swoim contacts_class.php
. Więc odizolowałeś widok od modelu i kontrolera. Teraz możesz łatwo zmienić „Widok”, pozostawiając nienaruszone inne części.
Nie sugeruję, abyś ślepo podążał za wzorem MVC, MVP lub czymkolwiek innym „MV”. Jest to kwestia stosowności, skuteczności i smaku.
Wspólna dynamiczna aplikacja internetowa może zawierać takie składniki, jak:
- Powiedzmy, że punkt wejścia
index.php
- Biblioteki / klasy pomocnika
- Router żądania
- Moduły, komponenty lub kontrolery
- Silnik szablonów lub może pojedyncze widoki
Prawdziwa aplikacja internetowa może zawierać dowolne inne komponenty, takie jak procedury obsługi zdarzeń, dyspozytorzy zdarzeń i zaczepy, ale w rzeczywistości są to niuanse. Cóż, pozwól mi przedstawić to tak, jak chcę to przedstawić:
Wspólna procedura operacyjna ramowa, jak następuje:
- Żądanie przeglądarki jest wysyłane bezpośrednio do punktu wejścia wykonywalnego / script (
index.php
).
- Skrypt punktu wejścia ładuje biblioteki pomocnicze, klasy i dokonuje dalszej inicjalizacji naszego środowiska programistycznego.
- Adres URL jest przekazywany do instancji routera żądania. Ten krok może być częścią kroku 2.
- Router żądający analizuje adres URL i przekazuje operację do określonego komponentu, modułu lub kontrolera.
- Komponent (lub kontroler) przetwarza skierowane żądanie i wysyła dane do renderowanego widoku.
Odpowiednia struktura folderów projektu jest pokazana na schemacie.
Sugerowałbym, abyś zbadał, w jaki sposób wdrażane są inne ramy. Zalecane CMS / frameworki na początek to CodeIgniter, OpenCart, Joomla 1.5 i Tango CMS.
Aby dowiedzieć się, jakie pytania należy zadać i jakie rozwiązania są dostępne, polecam książkę Patterns of Enterprise Application Architecture autorstwa Martina Fowlera. Możesz dowiedzieć się, co jest w książce, czytając jego stronę internetową
Należy pamiętać, że książka jest już dość stara (w świecie IT), ale wiele zasad jest nadal obowiązujących lub powinieneś nauczyć się z nich uczyć. (Czy to ma sens?)
(Oprogramowanie) Architektura to bardzo szeroki temat, nie oczekuj srebrnej kuli, ale zawsze więcej pytań i wątpliwości, dopóki nie zabraknie czasu i pieniędzy i będziesz musiał trzymać się najlepszego rozwiązania.
źródło
Przede wszystkim spójrz na dobrze opracowany projekt. Wordpress jest bardzo zgrabnym przykładem struktury kodu: jest prosty do zrozumienia, ale oferuje wiele „wtyczek”. Tak więc Wordpress jest łatwy do oszacowania poprzez „wtyczkę”.
Po drugie, bardzo łatwym sposobem na sprawdzenie architektury jest próba napisania testu jednostkowego. Na przykład jeśli klasa „Talia kart” ma metodę „shuffle ()”, musisz być w stanie utworzyć talię kart o zdefiniowanym rozmiarze (tj. 5 kart 1,2,3,4,5), wywołać losowanie i zweryfikować w łatwy sposób wynik (id 1,4,2,5,3)
Musisz być w stanie to zrobić bez tworzenia instancji wszystkich klas projektu, a test musi być bardzo czysty do odczytania.
Jeśli nie możesz tego zrobić, musisz dodać warstwy między klasami, zrestrukturyzować je, aż uzyskasz łatwy sposób.
Następnie wykonaj ponownie ten krok dla wszystkich podstawowych klas swojego projektu.
I na koniec: dobra architektura może być „leniwa” na niezbyt podstawowych zajęciach (to kwestia oszczędności: bardzo dobrze zaprojektowane rzeczy kosztują zbyt wiele w prawdziwym świecie).
źródło
Dobra architektura dla projektów na dużą skalę to MVC (Model View Controller): http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
Jednak to, czy inni programiści zrozumieją, to zupełnie inna sprawa. MVC może się komplikować i czasami jest nadmiar w przypadku małych projektów. Jedną z jego zalet jest to, że łatwo się skaluje.
źródło
Jeśli dobrze rozumiem twoje pytanie, mówisz o strukturze folderów projektu, a nie o architekturze. Jeśli moje rozumowanie jest prawidłowe, czytaj dalej; w przeciwnym razie edytuj swoje pytanie lub dodaj komentarz, a ja odpowiednio zmienię swoją odpowiedź.
Projektując aplikację, po udzieleniu odpowiedzi na kilka podstawowych pytań, takich jak (co? I do kogo?), Musimy zidentyfikować komponenty i sklasyfikować je na podstawie funkcjonalności / obowiązków. Są dwa główne sposoby, które znam. Możesz klasyfikować komponenty na podstawie, wykorzystywać przypadki, które obsługują (takie jak logowanie, wyszukiwanie itp.) Lub klasyfikować na podstawie zasobów (obiekty ...). Pierwszy sposób nazywa się zorientowanym na działanie, a drugi nazywa się zorientowanym na zasoby. Tradycyjnie większość aplikacji klasyfikuje komponenty na podstawie działań (odkąd projektanci uznają to za łatwe, przy przenoszeniu z domeny problemu do domeny rozwiązania).
Po zidentyfikowaniu klasyfikacji komponentu musimy zidentyfikować klasyfikację na podstawie poziomów. Typowa aplikacja internetowa będzie miała warstwę widoku, warstwę modelu i warstwę kontrolera (MVC). Oczywiście mogą być też bardziej złożone aplikacje. (większość aplikacji w świecie rzeczywistym jest bardziej złożona niż ta prosta).
Po zidentyfikowaniu tych dwóch taksonomii utworzę foldery najwyższego poziomu, identyfikujące poszczególne poziomy. (Interfejs użytkownika, kontroler, usługi, narzędzia itp.). Pod każdym folderem wysokiego poziomu utworzę foldery podrzędne na podstawie funkcjonalności lub zasobów (Projekt - / EditProject - / SearchProject itp.). Idealnie funkcjonalna klasyfikacja będzie wielopoziomowa.
źródło
Są dobre i złe architektury, jednak nie ma srebrnych kul. Architektura musi być dostosowana do obecnych i wysoce możliwych przyszłych wymagań.
Dobrą wskazówką byłoby, upewnij się, że każdą część aplikacji można zmienić przy minimalnym wpływie na inne części oraz że każda część ma zautomatyzowane testy pełnego zasięgu i testy integracji.
źródło
Architektura polega na zapewnieniu dalszego rozwoju w dłuższej perspektywie. W przypadku większych aplikacji obejmuje to kompromisy między uniezależnianiem rzeczy, dzięki czemu wiele osób może pracować jednocześnie i unikanie powielania (DRY), dzięki czemu projekt może pozostać sprawny. Projekty PHP zwykle koncentrują się na uczynieniu rzeczy niezależnymi i mają dużą ilość powielania.
Aby uzyskać dobre wyczucie drugiej skrajnej pozycji, spójrz na Seaside
źródło
Jeśli nie wiesz, jak zbudować duży projekt, powinieneś pożyczyć projekt / architekturę innych, używając jednego z kilku dobrych frameworków PHP. Poleciłbym CakePHP, CodeIgniter lub Symfony. Wszystkie z nich implementują model, widok, kontroler, wzór MVC, który działa dobrze w tworzeniu stron internetowych, wszystkie są dość lekkie i łatwe do nauczenia.
Gdy poznasz jedną z tych platform, możesz być w stanie zaprojektować własną strukturę dla konkretnego projektu, ale jeśli dopiero zaczynasz, stanę na pracy innych, a nie na nowo.
źródło
MVC jest najczęściej stosowaną architekturą, co do której dowiedziono, że rozwiązuje większość problemów. Dobra architektura będzie miała następujące funkcje (i więcej, orcourse)
źródło
zanim napiszesz kod produkcyjny, zajmij 2 tygodnie (noce :) i przeczytaj tę książkę. Na długo zmieni zdanie na temat architektury programowania, praktyk i pakowania.
Zwinne zasady, wzorce i praktyki C # by Prentice Hall
Przykłady są w C #, ale są łatwe do odczytania, nie chodzi o to, jak napisać poprawną składnię kodu, chodzi o to, jak myśleć jako programista.
Obiecuję, że zapiszesz go w swoim najbardziej dostępnym miejscu na komputerze i będziesz zaskoczony, że programujesz, nie wiedząc o tym. Zmieni twoje myślenie.
źródło