Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> w3cms - projekt systemu, Zarys projektu - proszę o opinię
zulus
post 2.06.2006, 17:33:33
Post #1





Grupa: Zarejestrowani
Postów: 225
Pomógł: 18
Dołączył: 30.06.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Wiem że to kolejny temat z serii "zaczynam, pomocy!", ale...

Zaczynam pisać CMS'a na razie nazywa się w3cms, ale to może ulec zmianie.
Wszystko jest w fazie projektów:

Założenia
  • System ma sie operać na zdażeniach
  • Będzie opierał się na MVC i fabrykach objektów
  • Ma być stosunkowo prosty w rozbudowie (jest modularny)
  • Każdy element (nawet system uwierzytelniania) można podmienić. Pozostaje tylko baseSystem.
  • Tylko PHP5 - inaczej się nie da.
  • Przebieg działania (dosyć ogólny) - Tutaj
  • Najprawdopodobniej udostępnię go na GPL'u

To tak w skrócie.

Układ katalogów

Kod
/ ---- katlog główny, tylko index'y i pliki apache (.htacces)
/lib -- pliki klas
/lib/dao/*/ -- wiadomo;)
/lib/control/*/ -- obiekty do obsługi zdarzeń

/etc/baseSystem -- konfiguracja podstawowa (można ew ustalić inne położenie, poza public_html
/etc/*/ -- jeżeli modół ma własny plik konfiguracji to tutaj, gdzie * nazwa modułu

/share -- pliki modułów, nie php
/share/locale/kod_języka/ -- tłumaczenia, zastanawiam się nad rozwiązaniem
/share/*/ -- jeżeli np galeria, to jej zdjęcia

/var/*/ -- pliki dodtakowe modułów, np logo, licencja, info o autorach, screen itd.

/dev/*/ -- widoki (np /dev/html, /dev/ajax/,/dev/pdf)

/proc -- base system

/home/ -- opcjonalnie, jeżeli użtkownicy mają możliwość przechowywania własnych danych

( kocham linux'a winksmiley.jpg )

Przykład działania
  • Z zewnątrz dostaje jakieś żądanie (POST, GET, ssh).
  • Dane żadania są zbierane, sprawdzane pod katem bezpieczeństwa aplikacji, tworzony jest obiekt zdarzenia z danymi(w nim będzie np jaki widok itd) i przekazywany do $obj=system::sendEvent($event);
  • Jest sprawdzane w systemie kolejno, czy jest dostępny, czy może być obsłużony w danym widoku itd (jak w diagramie)
  • Jeżeli sprawdzanie się powiedzie, zostaje zwrócony obiekt zgodny z interfejsem serviceEvent, konkretny dla danego modułu.
  • Następnie jest wywoływana jawnie funkcja $obj->service();
    Należy pamiętać że jedno zdarznie będzie wymagało kilku odświerzeń w przeglądarce (pobieranie konkretnych danych)
  • Jeżeli stan zdarzenie pozwala na zmianę danych, to tworzony jest niejawnie kontroler który validuje te dane, i mamy 2 scenariusze.:
    • Powodzenie, wtedy informuje system że zakończył działanie i generuje kolejne zdarzenie (wyświetlenie komunikatu powodzenia), po czym następuje usunięcie z kolejki.
    • Niepowodzenie -- równierz generuje zdarzenie, które w efekcie nakaże widokowi pokazanie błędu i ew pobranie ponownie danych, ale w tym wypadku nie dojdzie do usunięcia z kolejki.

To tylko zarys. Mam nadzieję że nie popełniłem jakiś straszliwych błędów.

Odrazu też zadam kilka pytań.
  • Czy jest jakiś prosty sposób na odczytywanie plików .po albo .mo w php?
  • Czy warto postawić np w warstwie abstrakcji baz danych na jeszcze jedną (adoDB-chyba jakos tak, nie pamiętam)
  • Powinienem użyć np SVN, czy lepiej odrazu pisać i olać kontrolę wersji? - pewnie będe pisał sam
  • Jakieś sugestie?


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
UDAT
post 3.06.2006, 10:23:16
Post #2





Grupa: Zarejestrowani
Postów: 442
Pomógł: 0
Dołączył: 27.12.2005

Ostrzeżenie: (0%)
-----


Cytat
Czy jest jakiś prosty sposób na odczytywanie plików .po albo .mo w php?

Jest Babel

Cytat
Czy warto postawić np w warstwie abstrakcji baz danych na jeszcze jedną (adoDB-chyba jakos tak, nie pamiętam)

Warto ORM'a (najlepiej opartego na PDO), np. Propela

Cytat
# Powinienem użyć np SVN, czy lepiej odrazu pisać i olać kontrolę wersji? - pewnie będe pisał sam
# Jakieś sugestie?

Wątpie żeby ci się udało tak od ręki, napisać łatwego w rozbudowie, modularnego CMS'a. Zainteresuj się UML'em. Ja tam wolę używać kontroli wersji, ale kto co lubi winksmiley.jpg
Go to the top of the page
+Quote Post
zulus
post 3.06.2006, 10:30:18
Post #3





Grupa: Zarejestrowani
Postów: 225
Pomógł: 18
Dołączył: 30.06.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


"Od ręki" to nie bardzo. Nad CMS'em myslę od dłuższego czasu. I bawię się UML'em rozważając różne scenariusze. Chodzi mi o to żebym miał wygodne narzędzia do składania portalu (baseSystem), a przy tym zachować jakąś wspólną, w miarę zrygoryzowaną strukturę nie tracąc przy tym zbytnio na elastyczności.


--------------------
Go to the top of the page
+Quote Post
nasty
post 4.06.2006, 19:12:19
Post #4





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Cytat
System ma sie operać na zdażeniach

CMS oparty na zdarzeniach to nie jest dobry pomysl, dlatego w ASP.NET ciezko pisze sie CMS-y bo jest oparty na eventach, zdarzenia sa dabre to aplikacji gdzie jest duzo formularzy, i innych bajerow, w cms-ie to jest praca z trescia w kturej watpie zeby byly zdarzenia, a druga sprawa to w zdarzeniach ciezko jest "dokladnie" obugiwac requesty usera w cms-ie
Go to the top of the page
+Quote Post
zulus
post 7.06.2006, 22:08:22
Post #5





Grupa: Zarejestrowani
Postów: 225
Pomógł: 18
Dołączył: 30.06.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Ja chciałem troche inne podejście. W sensie zdarzenie rozumiem obiekt(specjalnej klasy) w którym zawarte są informacje takie jak jaki widok, lub kontroler zdarzenie podrzędne. Np. dostanę POST lub GET żądanie dodania artykułu:
  1. Pobranie danych z POST/GET i stworzenie obiektu rządania
  2. W trakcie tworzenia sprawdzenie czy widok jest wybrane, jeśli nie to domyślny.
  3. System odbiera żądanie i sprawdza czy pakiet jest w systemie, i czy widok może obsługiwać żadania kontrolera.
  4. Jeśli tak, kontroler generuje żądanie pobrania danch od user'a (wiadomo)
  5. System "informuje" widok co ma zrobić.
  6. I tak w kółko do póki kontroler nie stwierdzi że ma kompletne dane od user'a, zrobi swoje i wygeneruje żądanie wyświetlenia komunikatu. (powodzenie błąd)
  7. Jeżeli dane są nie kompletne to też jest generowane żądanie ponownego pobrania danych.

Przy okazji mam kolejne pytanie. Czy będzie zgodne z MVC, to że dane przychodzące validuje kontroler.
I drugie: logiczne jest dla mnie, że tak naprawdę do jednego modelu jest jeden kontroler który komunikuje się z nim bezpośrenio. I tu tez nie jestem pewny co do zgodności z MVC :/


P.S. Sorry za błedy winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
sf
post 8.06.2006, 07:45:10
Post #6





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Hm, a ja proponuje inna strukture:

lib/ - biblioteki, ktore mozna tez uzywac w innych aplikacjach
aplikacja/ - tutaj sa moduly, akcje oraz cache ( oczywiscie zakaz dostepu na ten katalog )
web/ - templaty, obarazki, css, js
silnik/ - tutaj jest caly framework, ktory zarzadza aplikacja i wywoluje to co jest w app... app wywoluje to co jest w web i lib


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
Ociu
post 8.06.2006, 12:08:11
Post #7





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Ja mam tak:
./kernel - framework
./lib - dodatkowe biblioteki
./web - widoki
./share - konfiguracja modułów
./modules - akcje
Go to the top of the page
+Quote Post
bigZbig
post 8.06.2006, 12:33:36
Post #8





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


A ja mam
./includes - klasy i pakiety ogolnego zastosowania np. Request, Ado (np. PDO lub ADOdb), Dto, Templates (np. Smarty), Dispatcher, Tree, Session itd.
./modules - moduly skladajace sie na calosc mogace jednoczesnie byc samodzielnymi aplikacjami np. News, Articles, Calendar, Catalog, Gallery

Uklad podkatalogow w powyższych zalezy juz od danego pakietu. Kazdy pakiet ma swoj plik inicjalizujacy ktory jest odpowiedzialny za dolaczenie odpowiednich klas lub ustawienia konkretnych zmiennych potrzebnych do dzialania danego zbioru. W kazdym razie uchwyty zdarzen czy szablony znajduja sie wylacznie w katalogu modules. Zawartosc katalogu inkludes jest bardziej abstrakcyjna. Idea klas tam zgromadzonych jest taka aby wszystko co mozliwe bylo wymienne - oczywiscie po napisaniu odpowiednich klas oslonowych zgodnych z domyslnymi interfejsami.

Uzywam zdarzen przy czym jako zdarzenie rozumiem np. wydanie polecenia DisplayNews


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 09:15