Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inny][ZF2][SF2]Multiapplication framework. Jaki?
Forum PHP.pl > Forum > PHP > Frameworki
combic
Witam.
Szukam najlepszego rozwiązania do realizacji projektu. Generalnie chodzi o realizację nowej wersji istniejącej aplikacji.

Aktualna wersja jest śmietnikiem strukturalno-proceduralnym, który dostałem w spadku po ex-programistach i mam za zadanie zbudować nową wersję, obiektową.
Aplikacja to e-commerce - sklepy online, 30 bramek płatności, integracja z amazon, ebay, CMS itp.

Nowa powinna z założenia być tak elastyczna jak bieżące rozwiązanie, które po krótce wygląda tak:
- centralny "framework" - wszelkie możliwe do wykorzystania moduły i funkcjonalności systemu,
- około 500 aplikacji klientów (sklepów), które posiadają własne configi, bazy danych, layouty, FTP, lokalne dokumenty, pliki, zdjęcia etc.
- każda z aplikacji includuje wszystko co jest niezbędne i określone w configu z centralnego frameworka,
- każda z aplikacji może nadpisać lokalnie dowolną z funkcji/klas/modułów poprzez stworzenie lokalnej kopii plików i modyfikowanie ich do woli lub dodawanie nowych funkcjonalności.

Tak więc zaletą istniejącego systemu jest duża elastyczność, możliwość dostosowania wszystkiego do specjalnych wymagań klienta. Niestety setki wad i problemy z rozbudową, tysiące bugów, itp skłoniły firmę do inwestycji w nową wersję OOP.

Moje pytanie do ciebie, czy w takim projekcie jest sens bazować na jednym z istniejących frameworków (ZF, SF albo inny) a jeśli tak, to który z nich twoim zdaniem jest na tyle elastyczny, że da się go wykorzystać w podobnej strukturze?
Na tyle na ile znam i korzystałem z frameworków PHP, to zawsze była to pojedyncza aplikacja - wszystkie pliki projektu lokalnie.
Tutaj trzeba zrobić pliki wszystkich modułów i funkcjonalności dostępne w centralnym frameworku i kilkaset aplikacji z opcją nadpisania wybranych klas lub całych modułów lokalnie.
Naprostsze wydaje mi się zrealizowanie własnego frameworka, ale może się mylę i szybciej będzie skorzytać z gotowych rozwiązań poprzez jakieś proste fixy/konfiguracje. Może spotkałeś się online z propozycją struktury dla podobnych projektów lub wprost - z przykładową realizacją/podobnym rozwiązaniem?

Dzięki za wszelką pomoc.
Pozdrawiam!
m44
Wybierz taki framework, w którym pisze Ci się najwygodniej i najszybciej. Nie radzę porywać się z motyką na słońce z zamiarem stworzenie własnego. Chyba że chcesz, aby później po Tobie ktoś nazwał to co zrobiłeś "śmietnikiem po ex-programiście". smile.gif Nie ma w tym żadnej złośliwości z mojej strony, po prostu zanim napisałbyś coś sensownego co można by nazwać frameworkiem straciłbyś dużo czasu.

Symfony2 z odpowiednim podziałem bundli, które można rozszerzać i zasysać przez Composera powinien być dobrym wyborem.
combic
Cytat(m44 @ 1.06.2013, 11:23:01 ) *
Wybierz taki framework, w którym pisze Ci się najwygodniej i najszybciej.

Ameryka facepalmxd.gif

Są frameworki które naprawdę ciężko zmusić do pracy w takiej strukturze projektu.
Na Symfony nie pracowałem, co u mnie nie wyklucza jego użycia. Zend Framework byłby dla mnie najlepszym jeśli możliwym.
ZF i inne mniejsze z którymi miałem styczność - trudno mi sobie wyobrazić jak zorganizować je do pracy w takiej formie jakiej oczekuje pracodawca.

Cytat(m44 @ 1.06.2013, 11:23:01 ) *
Symfony2 z odpowiednim podziałem bundli, które można rozszerzać i zasysać przez Composera powinien być dobrym wyborem.

Fajnie jakbyś miał linka do czegoś podobnego (przykłady) co zostało zaprojektowane/opracowane i jest opublikowane w sieci, bo paktycznie zanim dojdę do odpowiedniego podziału bundli, to napiszę własny FW.
phpion
Bez problemu osiągniesz to w Kohanie bez żadnych dodatkowych kombinacji dzięki modułom i kaskadowemu wczytywaniu plików.

- centralny "framework" - wszelkie możliwe do wykorzystania moduły i funkcjonalności systemu,
Framework siedzi w katalogu system. Tworzysz dowolne moduły (np. galeria, newsy) które są wspólne dla wszystkich aplikacji, a w każdej z nich możesz nadpisać dowolną klasę/widok/konfigurację.
- około 500 aplikacji klientów (sklepów), które posiadają własne configi, bazy danych, layouty, FTP, lokalne dokumenty, pliki, zdjęcia etc.
Każda aplikacja miałaby osobny folder z plikami, które "nadpisywałyby"/uzupełniały te domyślne.
- każda z aplikacji includuje wszystko co jest niezbędne i określone w configu z centralnego frameworka,
Do każdej aplikacji możesz dołączyć dowolne moduły.
- każda z aplikacji może nadpisać lokalnie dowolną z funkcji/klas/modułów poprzez stworzenie lokalnej kopii plików i modyfikowanie ich do woli lub dodawanie nowych funkcjonalności.
W Kohanie każda klasa ma (nie jest to wymagane) 2 wersje: bazową z całą zawartością metod (class Kohana_Klasa) oraz rozszerzającą pustą (class Klasa extends Kohana_Klasa). Klasę bazową możesz nadpisać w dowolnym module czy w katalogu aplikacji bez jakiejkolwiek ingerencji w klasę bazową.

Najciekawsze jest kaskadowe wczytywanie plików. Każdy plik (klasa, widok, konfiguracja itd.) jest szukana w kolejności: katalog aplikacji, katalogi modułów, katalog systemowy. Dzięki temu osiągniesz wszystkie postawione przez Ciebie wymagania. Struktura katalogów wyglądałaby więc mniej-więcej tak:
- system (pliki Kohany)
- modules/galeria
- modules/newsy
- application/sklep1
- application/sklep2
m44
Cytat
Ameryka

Są frameworki które naprawdę ciężko zmusić do pracy w takiej strukturze projektu.
Na Symfony nie pracowałem, co u mnie nie wyklucza jego użycia. Zend Framework byłby dla mnie najlepszym jeśli możliwym.
ZF i inne mniejsze z którymi miałem styczność - trudno mi sobie wyobrazić jak zorganizować je do pracy w takiej formie jakiej oczekuje pracodawca.


Może wejdźmy w szczegóły. Gdzie widzisz trudności w zorganizowaniu Twojej aplikacji przy użyciu frameworka?

Cytat
Fajnie jakbyś miał linka do czegoś podobnego (przykłady) co zostało zaprojektowane/opracowane i jest opublikowane w sieci, bo paktycznie zanim dojdę do odpowiedniego podziału bundli, to napiszę własny FW.


Bundle są na knpbundles.com. Nie wiem tylko czy ten link Ci się przyda, skoro skłaniasz się ku odkrywaniu Ameryki na nowo.
combic
Cytat(m44 @ 1.06.2013, 15:35:58 ) *
Może wejdźmy w szczegóły. Gdzie widzisz trudności w zorganizowaniu Twojej aplikacji przy użyciu frameworka?

Trudności zapewne wynikają z mojej niedostatecznej wiedzy na temat innego wykorzystania niż klasyczna pojedyncza aplikacja wielomodułowa.

Np. ZF - aplikacja zbudowana w katalogu głównym podzielonym na moduły, te na odpowiednie modele, widoki, kontrolery etc.
Mógłbym część centralną zrealizować w formie bibliotek (vendor) i dołączać do każdej aplikacji (sklepu) - żeby nie kopiować tego samego w wiele miejsc - np. w postaci dowiązań symbolicznych w vendor etc.
Tylko w takiej sytuacji jako taki bazowy szkielet aplikacji (router, kontrolery) musi (?) znajdować się w katalogu aplikacji (np. w ZF modules/ ), żeby ZF z index.php mógł odpalić autoloader, dispatchera, config i dalej potrzebne kontrolery itd. ?
Na tym etapie nie jestem pewien, czy nie trzeba będzie kopiować wszystkich kontrolerów do modules/ a jedynie z widoków i modeli korzystać jako z biblioteki centralnej np. w vendor/. W tym przypadku byłoby to już utrudnieniem w stosunku do aktualnego rozwiązania, gdzie starczy skopiować index.php do publica i config, a wszelkie inne pliki mogą być ładowane centralnie.
Mógłbym też dla każdego sklepu wpakować symlink do defaultowej aplikacji a z kolei modyfikacje tworzyć w formie bibliotek w katalogu głównym aplikacji.
Może orientujesz się czy w ZF można zrobić to w takiej formie jak pisze phpion w Kohana'ie, czyli poprzez kaskadowe wczytywanie plików?

phpion - do Kohany zajrzałem 2 razy w życiu, więc musiałbym się trochę dokształcić.
Alternatywnie Yii, ale tu podobnie jak w ZF mam dylemat jak to prawidłowo rozplanować i napisać. ZF uważam za lepsze rozwiązanie, z uwagi na kraj i zespół.
Tak jak pisze m44, po co odkrywać Amerykę. Obstawiam, że ktoś coś podobnego już zrobił i jego dobrą ideę można wykorzystać.
crafter
zf2 i po problemie do tego zintegrowany z doctrine 2 i smigasz to 5 razy szybciej.
combic
Byłoby miło gdyby się dało przystosować ZF2.
A mógłbyś zaproponować jak to ugryźć najlepiej?
Wrzuciłem ten sam temat na macierzyste forum ZF na zend.com i póki co wygląda, że nikt nie ma pomysłu na taką strukturę. Możesz być pierwszy smile.gif
ano
Cytat
- każda z aplikacji może nadpisać lokalnie dowolną z funkcji/klas/modułów poprzez stworzenie lokalnej kopii plików i modyfikowanie ich do woli lub dodawanie nowych funkcjonalności.


I na prawdę te 500 sklepów może mieć tak niskopoziomowe zmiany?
Trzymacie je w 500 osobnych repozytoriach? Myślę, że ciekawszym zagadnieniem niż "jak zrobić strukturę katalogów" jest jak zarządzacie taką toną customowego kodu?!

Mając tylu klientów, domyślam się, że dobrych pare lat już działa ten SaaS? W ciągu tego czasu nie zdobyliście na tyle doświadczenia, żeby samemu podejmować takie krytyczne decyzje? Nie sądze, że pytanie na forum php.pl da Ci jakieś akceptowalne wskazówki... Nie macie tam osoby odpowiedzialnej za architekturę aplikacji?

Ale jak chcesz konkretne przykłady - wellcommerce.pl działa na bazie Symfony2 (platforma przepisywana z autorskich rozwiązań na S2) w podobnym modelu jak Ty opisałeś.
kicaj
Jeśli chodzi o SF2 to jest coś takiego jak Sylius (http://sylius.com) ale nie wiem czy jest wystarczająco dobry, natomiast jak wspomniał m44 może dodatki z http://knpbundles.com wystarczą.

Dodam że Sylius jak i KNPBundles są rozwijane przez polaków - http://knplabs.pl - może tutaj wystarczy zadać pytanie czy ich kod udźwignie Twoje wymagania.
combic
Cytat(ano @ 17.06.2013, 22:51:19 ) *
I na prawdę te 500 sklepów może mieć tak niskopoziomowe zmiany?
[...]W ciągu tego czasu nie zdobyliście na tyle doświadczenia, żeby samemu podejmować takie krytyczne decyzje?

Tak jak pisałem, to "framework" strukturalno-proceduralny, więc przez proste katalogowanie modułów i includowanie (najpierw z lokala, potem z bazy frameworka) wczytywane jest wszystko co potrzeba i można nadpisać dowolny element platformy, dopisać wtyczkę, dołożyć moduł itp. Taka struktura pozwala na maksimum elastyczności. Platforma tak jak wspomniałem była rozbudowywana przez ex-programistów przez ostatnie 10 lat. Niestety przez niedostateczną wiedzę na temat zabezpieczeń doprowadzili do "małej" katastrofy rzędu kilkuset tysięcy PLN i wylecieli z firmy. W tej chwili cały zespół programistów jest nowy. Dostaliśmy ten projekt odpalony na nastu serwerach i na chwilę obecną cała praca sprowadza się do łatania śmietnika. Ponieważ stwierdziliśmy, że to nie nadaje się do dalszej rozbudowy, to kolejnym zadaniem jest napisanie równie elastycznej platformy ale w OOP i z MVC. Na chwilę obecną mamy jeszcze trochę czasu na znalezienie odpowiedniego, najlepszego rozwiązania. Stąd mój post.
Jak chodzi o SF/SF2 - cały zespół musiałby się uczyć tego od zera. Przy ZF byłoby wiele łatwiej. Niestety póki co niewiele znaleźliśmy pod Zenda a powstała już pierwsza koncepcja "własnego frameworka", który temu podoła.

ano i kicaj, dzięki za linki projektów, na dniach sobie obczaję.

Mile widziane pod ZF/2.
phpion
Wydaje mi się, że tytuł wątku nawiązujący do wyboru frameworka jest nie trafiony. Wszystkie podawane przez nas frameworki w zasadzie odrzucasz z racji konieczności ich nauki pytając "a jak to zrobić w ZF". Albo więc albo chcesz wybrać jakiś framework, albo dowiedzieć się jak to ugryźć w ZF.
combic
Tak tylko do informacji - ostatecznie zdecydowaliśmy się przebudować naszą platformę bazując na Symfony 2. Dzięki wszystkim za pomoc i wskazówki.
Temat można zamknąć.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.