2011-10-10 12 views
7

Kodowałem od lat i znalazłem się w punkcie frustracji. Pracuję nad nową usługą internetową, która również ma interfejs użytkownika i będzie rozwijana od podstaw. Będzie korzystać z niektórych komponentów open source, ale jest przede wszystkim nową rzeczą samą w sobie.PHP/JavaScript Wzorce projektowe dla infosystemów opartych na Internecie

Ale oto mój problem. Budowanie takiego systemu oznacza budowanie wszystkich tych elementów:

  • PHP backend
  • widoki HTML
  • style CSS
  • JavaScript Czołowy
  • AJAX asynchronicznych połączeń

chcę wszystkie z nich mają ten sam "wzór", w taki sposób, że moduł w systemie składa się z folderu lub zestawu plików zawierających wszystkie elementy omponents w tym module.

Ale mam trudny czas z uzyskaniem architektury, tak, że chciałbym go. Oto, co mam do tej pory:

  • Cały główny system jest mniej lub bardziej napisany w proceduralnym PHP. Rozwiązuje to adres URL żądania, zajmuje się buforowaniem, rejestrowaniem i debugowaniem oraz ładowaniem w innych komponentach.
  • PHP, budując stronę, ładuje pliki JavaScript, pliki CSS, pliki HTML i inne komponenty oparte na module na bieżącym module. Oznacza to, że każdy moduł jest tak lekki, jak to możliwe, a jednocześnie można go rozbudować w oparciu o aktualne potrzeby modułów.
  • System zawiera także komponenty OOP obiektów (takie jak "użytkownicy" lub inne typy klas), które mogą być używane w całym systemie.
  • System jest zbudowany zgodnie z zasadami MVC, ale bez OOP.

Ale czuję się naprawdę ... naprawdę za zbudowanie głównego systemu w sposób proceduralny. Zacząłem go początkowo pisać w OOP, ale szybko znalazłem się w bólach głowy z powodu konieczności dopasowania wszystkiego do tego samego systemu. To był OOP, ale był ściśle sprzężony, co nie podobało mi się, gdy był napisany sposobem OOP, komponenty nie były tak naprawdę niezależne lub były tylko kłopotliwe w zarządzaniu.

Czy są jakieś wzory lub wskazówki, które mogę śledzić, aby uzyskać lepszy wynik? To, co podoba mi się w obecnym systemie, to to, że mogę wywoływać cokolwiek, wyświetlać podgląd PHP lub widoki HTML, styl CSS, dodatkowe funkcje JavaScript i komunikację AJAX na żądanie, utrzymując footpring cudownie małe, ale to jest brudne. Używam nawet globalnego połączenia z główną bazą danych (choć jest to obiekt globalny).

Wszelkie pomysły? Nie stanowiłoby to żadnego problemu, gdyby był tylko jednym językiem, ale próba sprawienia, by wszystko działało razem, to trochę bólu głowy.

Dzięki!

+3

Czy badał każdy z tysięcy ram PHP/systemy CMS/etc? Istnieje mnóstwo przykładów tego, jak można to zrobić. – Mat

+0

Bardzo trudno jest odpowiedzieć na twoje pytanie, ponieważ nie przedstawiasz żadnego prawdziwego problemu. Obecnie pracuję nad takim systemem prawie jak twój, ale poza nim z pewnymi różnicami. Używam MVC/OOP. Nie mogę sobie wyobrazić, że traktujesz to proceduralnie. Myślę, że dopóki twój projekt nie będzie miał pewnych granic, nie powinno być problemu w OOP. –

+0

Można przyjrzeć się wzorcom architektury aplikacji korporacyjnych, wzorom GoF itp. I wdrożyć je samodzielnie. Jednak najłatwiejszą (i najbardziej oczywistą) odpowiedzią jest przyjrzenie się, w jaki sposób frameworki (które już napotkały ten problem _exact_) wdrożyły te wzorce i albo (a) wykorzystują framework, albo (b) dostosowują podejście do tej aplikacji. Poszukaj frameworka o otwartym kodzie źródłowym w wybranym przez siebie paradygmacie, zobacz, jak się zachowuje, i zobacz, co jibes z aplikacją. –

Odpowiedz

4

http://agiletoolkit.org/ implementuje dokładnie to, czego szukasz. Jego kod źródłowy jest dostępny pod numerem http://github.com/atk4/atk4, dzięki czemu możesz się z niego uczyć.

Czego się nauczyłem podczas creating Agile Toolkit.

  • Spójrz na systemy stacjonarne. - Kakao, Objective Windows i inne zorientowane obiektowo systemy stacjonarne rozwiązały te problemy dawno temu. Twórz widoki, łącz działania, definiuj oddzwanianie. Jest to mapowanie do szablonowych widoków HTML, wiązań JavaScript i żądań AJAX.

  • Drzewo obiektów środowiska wykonawczego. W Agile Toolkit pierwszą fazą jest inicjalizacja. Podczas tej fazy obiekty są wstawiane na siebie nawzajem. Na przykład dodajesz przycisk do formularza i dodajesz formularz do strony. Następnie jest faza renderowania, która rekurencyjnie produkuje HTML ze wszystkich. Ma to dużo więcej sensu, że mając składniki echo HTML.

  • Widżety interfejsu użytkownika jQuery. Korzystanie z nich było świetnym sposobem na rozwiązanie wielu problemów. Widoki w Agile Tolokit mogą rozmawiać z odpowiednimi widgetami jQuery UI.

  • Wymienione obiekty to "Modele" w Agile Toolkit. Jeśli szukasz wersji autonomicznej, możesz polegać na pewnym środowisku ORM. Stworzyłem własne, aby było bardziej zintegrowane z Widokami.

  • Ponowne sprzężenie zwrotne. Jeśli rozwijasz cały system samodzielnie, sprzężenie daje wiele korzyści. Zwłaszcza jeśli jest to architektura zorientowana obiektowo i dziedziczysz rzeczy. Aby to naprawić, potrzebowałbyś trochę doświadczenia z językiem Java lub programowania aplikacji na komputery stacjonarne.

Linki:

+0

Nie jest to dokładnie to, czego szukam, ale z pewnością jest bliższy temu, co mam na myśli w porównaniu z nadętymi strukturami. – kingmaple

2

Bez wiedząc nic innego, moje myśli:

  • Jeśli nie podoba kodu OOP, prawdopodobnie zaprojektowany to źle. Idea orientacji obiektowej polega na tym, że obiekty przedstawiają rzeczy całkiem naturalnie i jako takie powinny być dość bezbolesne. Jeśli jest to sprzężenie, którego nie lubisz, istnieją techniki, które to naprawiają.
  • Wygląda na to, że Twój wzorzec MVC jest nieprawidłowy. Wszystkie elementy HTML/CSS/JavaScript powinny być obsługiwane w aspekcie widoku. Wydaje mi się, że użyłeś pewnych zasad MVC, ignorując innych. Oczywiście bez twojego kodu może to być tylko podejrzenie.
+0

Cóż, to zależy. MVC, w najbardziej klasycznym sensie, różni się od sposobu, w jaki ludzie zwykle go realizują. JavaScript i przeglądarka to kontroler, a nie widok. Ale poza tym, moim głównym problemem było to, że miałem wielką pojedynczą klasę dla głównego silnika, co było bezsensowne, ponieważ wszystko zależało od tego. Zawsze uważałem, że jeśli istnieje jedna instancja klasy (i nigdy nie może być więcej niż jedna), to nie powinna ona być klasą. – kingmaple

+0

Zgadzam się z częścią JavaScript: może to być kontroler. A jeśli możesz mieć tylko jedną instancję klasy (i nigdy nie może być więcej niż jedna), nie oznacza to, że nie powinieneś tworzyć klasy. Jednak brzmi to tak, jakbyście próbowali to uczynić z klasy Bożej. Nie rób tego. –

+0

Ale co mógłbyś mi polecić? Ponieważ chcę system, który ma główne komponenty (takie jak główny plik CSS, biblioteka głównych funkcji dla PHP i JavaScript/AJAX, a także plik CSS, biblioteki funkcji i JavaScript/AJAX na moduł na żądanie). Chcę mieć jak najmniejszą powierzchnię, podczas gdy każdy moduł może pracować niezależnie. Teraz zgadzam się, że moduły powinny być rozszerzone klasy głównej klasy, ale jak zbudować architekturę do pracy? Gdzie byłoby rozwiązanie, gdyby nie klasa Boga? Potrzebuję tylko wskazówek tutaj, ponieważ nie chcę iść na kompromis :) – kingmaple

Powiązane problemy