Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZendFramework]Logika Biznesowa
ptr0x0000
post 13.08.2012, 17:10:31
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 8.08.2012

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


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.
Go to the top of the page
+Quote Post
CuteOne
post 13.08.2012, 17:23:29
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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

Ten post edytował CuteOne 13.08.2012, 17:28:55
Go to the top of the page
+Quote Post
ptr0x0000
post 13.08.2012, 22:26:25
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 8.08.2012

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


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.
Go to the top of the page
+Quote Post
irmidjusz
post 13.08.2012, 22:30:34
Post #4





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

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


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


--------------------
there is much to be learned
Go to the top of the page
+Quote Post
CuteOne
post 14.08.2012, 09:56:03
Post #5





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


@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
Go to the top of the page
+Quote Post
ptr0x0000
post 15.08.2012, 10:01:03
Post #6





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 8.08.2012

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


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.
Go to the top of the page
+Quote Post
CuteOne
post 15.08.2012, 13:18:44
Post #7





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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
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: 17.06.2025 - 07:58