Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Logika Biznesowa
Forum PHP.pl > Forum > PHP > Frameworki
ptr0x0000
Witam, przygotowałem model zgodnie z http://framework.zend.com/manual/en/learni...eate-model.html Gdzie należy umieścić logikę biznesową? Czy mapper będzie dobrym miejscem czy stworzyć osobne klasy modelu zawierające logikę?

Pozdrawiam.
CuteOne
Z tego co czytałem o wzorcu DAO stosowanym w Javie, Mapper ma wprowadzać podstawową logikę modelu - CRUD. Dodatkowe operacje pakowane są do osobnej warstwy. Poszukaj na necie o tym wzorcu w językach innych niż PHP (php'owe wydania są dość ubogie w przydatne informacje)

ps. ja w swoich aplikacjach pisanych pod zenda używałem osobnych modeli jako dodatkową warstwę + serwisy np. do generowania dokumentów, wysyłki maili itp
ptr0x0000
Dziękuje za szybką odpowiedź. DAO i CRUD znam również z J2EE. Rozumiem, że klasy logiki tworzysz w osobnych plikach, czy znajdują się one w lokalizacji \application\models czy np. \application\models\logic - mają własny katalog? Czy przechowywanie ich w osobnym katalogu 'nie jest problematyczne' dla Zenda? Będę wdzięczny za przykład jak wygląda w Zendzie zastosowanie tych wzorców - jak dokładnie wygląda klasa mappera - jakie metody udostępnia dla logiki oraz jak logika je wykorzystuje.
W chwili obecnej napisałem klasę logiki, która niestety korzysta bezpośrednio z obiektu typu DbTable (udostępnianego przez mappera) co osobiście mi się nie podoba, ponieważ uważam, że tylko mapper powinien z niego korzystać, a logika jedynie z metod mappera. Nie wiem czy dobrze myślę, dlatego proszę o wskazówki.
Pozdrawiam.
irmidjusz
Cytat(CuteOne @ 13.08.2012, 18:23:29 ) *
ps. ja w swoich aplikacjach pisanych pod zenda używałem osobnych modeli jako dodatkową warstwę + serwisy np. do generowania dokumentów, wysyłki maili itp

Chyba masz na myśli services, czyli po polsku usługi? wink.gif


ptr0 od siebie dodam, że pogrupować sobie klasy możesz w jakie chcesz katalogi, od tego jest odpowiednio skonfigurowany autoloader. Grunt, żeby było logicznie i przejrzyście, jeśli już rozdzielasz modele logiki, mappery i klasy od tabel/wierszy. Nie ma tu jedynie słusznego, odgórnie narzuconego sposobu. Po prostu zrób to z sensem. Chcesz rozdzielić, to bardzo dobrze, rozdziel smile.gif
CuteOne
@up tak chodzi o services

@ptr ja w swoich aplikacjach stosuję moduły do rozdzielenia aplikacji na pomniejsze części. Dla własnej wygody "globalne" pluginy, modele itp. trzymam w osobnym module np. "modules/library", aby autoloader wiedział co i jak w bootstrapie wstawiam dodatkowy *_Module_AutoLoader
  1. $libraryLoader = new Zend_Application_Module_Autoloader(array(
  2. 'namespace' => 'Library',
  3. 'basePath' => APPLICATION_PATH.'/modules/library',
  4. 'resourceTypes' => array(
  5. 'entity' => array(
  6. 'path' => 'models/entities/',
  7. 'namespace' => 'Model_Entity',
  8. ),
  9. //itd..
  10. ),
  11. )
  12. );
  13.  
  14. $autoloader = Zend_Loader_Autoloader::getInstance();
  15. $autoloader->pushAutoloader($defaultLoader); //podstawowy autoloader
  16. $autoloader->pushAutoloader($libraryLoader);


Dodatkową warstwę logiki trzymam już w samych modułach "/module/nazwa_modułu/models/", w których na spokojnie pobieram sobie Mappery i na nich operuje
ptr0x0000
Jestem zaskoczony, Zend sam załadował wszystkie klasy bez dodawania czegokolwiek w Bootstrap - nawet mimo nazwy katalogu mappers, a nazwy klasy zawierającej 'Model_Mapper'. Dodam, że działam na wersji 1.11.12. Dziękuje za wszystkie porady i przykład.

Pozdrawiam.
CuteOne
Mappers/ i DbTables/ już istnieją jako domyślne ścieżki w autoloaderze, niestety jeżeli chcesz dodać pełną funkcjonalność DAO (Entities) trzeba w bootstrapie dodać odpowiednie ścieżki tak jak w przykładzie powyżej. Polecam przerobić aplikacje na modularną - daje większe możliwości konfiguracji, no i łatwiej jest nią zarządzać

Pozdrawiam
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.