Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework]Domyślne i "spersonalizowane" aplikacje
piotrooo89
post 20.07.2011, 14:17:06
Post #1


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Witam,

mam pytanie natury organizacyjnej, jak najlepiej w ZF zbudować aplikacje która miała by działać w ten sposób:

mam główne założenia mojej aplikacji powiedzmy, że są to założenia które wdrażamy default'owo klientowi, i jakiś "niesforny" klient chce drobną modyfikacje pod swoje potrzeby w aplikacji, i chce tylko wdrożyć u niego te aplikacje, nie tracąc jednak głównej funkcjonalności.

czyli są moduły i klient chce zmienić dany moduł, jak dostarczyć mu rozwiązanie custom'owe (nie burząc głównej gałęzi projektu)

Przykład:
mam tabelkę wyświetlającą u wszystkich klientów Imię, Nazwisko, po pozyskaniu nowego klienta on chce żeby jemu do tej tabelki dołożyć maila i avatara, ale chce to zrobić TYLKO u niego, reszta klientów podczas wdrażania dalej będzie miała tylko Imię i nazwisko tylko ten jeden będzie miał kontroler który pokieruje w taki sposób żeby wyświetlić mu odpowiednie dane?

Proszę o jakieś nakierowanie, jeśli moje założenia są nie do końca jasne pytajcie, a może są lekko złe więc też proszę o naprowadzenie.


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
zend
post 20.07.2011, 15:25:13
Post #2





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


Nie miałem okazji tego jeszcze sprawdzić w praktyce, ale ostanio spotkałem się z podobnym problemem, moje przemyślenia na szybko to:

1)
  1. class Users_UserController{/*podstawowy kontroler*/ }
  2. class Default_UserController extends Users_UserController {}


2)Dodajesz routing '/users/user/:action/*' => array('controller' => 'user', 'module' => 'default', 'action' => 'index),
3) Kopiujesz widoki do modułu default
4)Formularze musisz pobierać oczywiście przez jakąś metodę z kontrolera bazowego żeby dalo się to potem ładne nadpisać
5)Założenia że będziesz nadpisywał konkretne moduły musisz zrobić już na samym początku i w innych modułach wyświetlać użytkowników przez
$view -> render('users/singleUser.phtml') + nadpisać odpowiednio Zend_View

@note - kontrolery niekoniecznie musisz nadpisywać w głównym module, mozesz też stworzyć moduł z przeróbkami dla konkretnego klienta

Jeśli chodzi Ci o konkretny przykład z tabelką to chyba najlepszym pod względem założeń, ale też i najbardziej nieoptymalnym było by wykorzystanie helpera partialLoop. Albo tak jak wspominałem wcześniej nadpisanie Zend_View dla konkretnego klienta i zahardcodowanie innej ścieżki to tego konkretnego widoku

Poza tym podłączam się do pytania, jestem ciekaw jak inni to rozwiązują

Ten post edytował zend 20.07.2011, 15:34:03
Go to the top of the page
+Quote Post
michaJlS
post 20.07.2011, 21:16:02
Post #3





Grupa: Zarejestrowani
Postów: 83
Pomógł: 9
Dołączył: 21.05.2004
Skąd: Glogau/Breslau

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


To chyba nie jest problem specjalnie związany z zastosowaną technologią, tylko ogólne zagadnienie inzynierii oprogramowania. Jak znajdziesz dobre rozwiązanie, to zostaniesz bogaty;)

Jak masz swoje jedno konkretne rozwiązanie, które wdrażasz u różnych klientów, to po jakimś widzisz, o jakie zmiany, jakiego typu, proszą. Możesz potem na tej podstawie tak przetworzyć swoją apkę, żeby ci się potem te zmiany łatwo dodawało. Zazwyczaj to jest jednak tak, że nie wystarczy podmienić jednego kontrolera, tabelki itd.

Ew. zanim zabierzesz się za pisanie, to możesz się zastanowić, czego klienci mogą chcieć. Wtedy tworzysz odpowiedni model aplikacji. Modułowa budowa, tworzenie dodatków (wordpress), hooki przy każdej akcji (mediawiki), generowanie kodu na podstawie jakichś xmli (magento ponoć) itd itp.

Można też dodawać te funkcjonalności do głównej wersji, ale aktywować je dopiero odpowiednią konfiguracją (dane opcje będą widoczne tylko u jednego klienta).

Jakimś sposobem jest tworzenie forków projektu i odpowiednie kasowanie klienta, żeby ci się opłacało potem robić merge.
Go to the top of the page
+Quote Post
piotrooo89
post 21.07.2011, 07:25:47
Post #4


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Czyli jak dobrze rozumiem, app'a trzeba oprzeć o moduły?
@zend no jest to dość ciekawe rozwiązanie, a co np w takiej sytuacji:

mam WebService standardowy który dostaje klient zawsze i zawsze jego funkcjonalność jest stała. Przychodzi nowy klient i chce zrobić integracje na poziome WS ze swoją app'ką i chce wystawić mu WS TYLKO dla mnie, skierowany konkretnie pod jego potrzeby. Myślałem o czymś takim:
mam folder custom w którym mam rozwiązania indywidualne i jeśli znajduje sie w tym pliku jakiś np. WS to "przejmuje" on kontrole na całością, czyli inaczej, WS standardowy przestaje obowiązywać i jego funkcjonalności przejmuje WS pisany na potrzeby klienta.


--------------------
Go to the top of the page
+Quote Post
zend
post 21.07.2011, 19:01:21
Post #5





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


Co do WS to najprościej będzie Ci to oprzeć o Zend_Loader_PluginLoader, ja osobiście korzystam z sfServiceContainer z symfony, funkcjonalność podobna + wstrzykiwanie zależności. Polecam też korzystanie z nadpisanego event dispatchera, ja nadpisałem swój tak aby korzystał z sfServiceContainer, pozwala mi to uniknąć niepotrzebnego tworzenia instancji obiektów kiedy nie są potrzebne

  1. $event -> connect('user.login' , array('model.basket', 'saveInDatabase'));


Instancja koszyka tworzona jest dopiero przy wywołaniu $event -> dispatch('user.login'), do modelu koszyka wstrzykiwany jest też automatycznie dopowiedni model bazodanowy. Wszystko jest ładnie, przejrzyście i co najważniejsze modyfikacja logiki w aplikacji jest bajecznie prosta
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: 28.06.2025 - 21:21