2012-08-12 12 views
11

Jestem programistą Java, który próbuje zbadać CakePHP - aktualnie mam problem ze strukturą aplikacji/projektem. Nie mogłem zrozumieć, gdzie umieścić główną logikę aplikacji.CakePHP - gdzie umieścić logikę usługi

Kiedy Zajmuję się JavaEE, wspólne podejście wygląda jak następuje:

  • klas modelu są proste fasola reprezentujące podmioty danych (produkty, ludzie itp) - jak w większości struktur danych z pobierające/ustawiające;

  • Klasy sterowników są dość prostymi klasami, które sumują niezbędne dane i wprowadzają je do dedykowanego szablonu widoku, który następnie jest wysyłany do użytkownika;

  • Klasa DAO (DataAccessObject) lub Repository to te, które mogą ładować i przechowywać jednostki w bazie danych;

  • Klasy usług są zwykle pojedynczymi, które zawierają pewne metody logiki biznesowej - są one wywoływane przez kontrolery, inne usługi lub zaplanowane akcje, z drugiej strony same wywołują metody DAO/Repozytorium w celu pobrania lub modyfikacji danych.

Na przykład jeśli mam podmioty Person, Product i Order, gdy użytkownik wybierze jakiś produkt i kliknięcia „włóż ją do mego Koszyk/kosz” new Order tego Person powinny być tworzone i to Product należy dodać do tego Order (możemy sprawdzić, czy Person nie jest złym dłużnikiem i że Product jest obecny w sklepie itp.) - wszystkie te prace są wykonywane w metodach OrderService, wywołanych przez jakiegoś kontrolera.

Zazwyczaj jakaś MKOl (Inversion of Control) jest używany tak, że wszystkie usługi i sterowniki linki do niezbędnych usług itp

Teraz jestem nieco zdezorientowany o tym, jak to wszystko odbywa się w CakePHP. Gdzie powinienem umieścić tę logikę biznesową itp.?

Odpowiedz

6

W CakePHP warstwa modelu składa się z kolekcji instancji active record, o nazwie AppModel. Łączą logikę związaną z pamięcią masową (którą zwykle umieszczasz w DAO i/lub Repositories) z logiką biznesową (co zwykle wchodziło w twoje "modele").

Dowolna inna logika związana z domeną (z Twojej Usługi) staje się częścią kontrolera.

Jeśli chcesz wiedzieć, jak jesteś ma realizować logikę biznesową domeny w CakePHP, wystarczy spojrzeć w górę artykuły, które chwalą aktywny rekord wzoru.

Osobista opinia
CakePHP i CodeIgniter są dwa z najgorszych ram w PHP.
Są wypełnione złymi praktykami.

Właściwie, jeśli robisz poprawną-owski MVC, następnie modelu warstwa będzie zawierać wszystkie logiki biznesowej i wszystkiego, co jest z nim związany. Warstwa modelu składa się z DAO, repozytoriów, Domain Objects (tak zwanych "modeli") i usług.

Podczas gdy twoje opisy kodu opartego na Java wskazują, że jesteś nieco w tym kierunku, CakePHP nie jest nawet blisko niego.

Z drugiej strony może być tak, że my understanding z MVC jest po prostu błędne.

+0

Dzięki za wyjaśnienie. Wzmianka o wzorze ActiveRecord czyni mnie bardziej zrozumiałym. Jeśli chodzi o twoją osobistą opinię - które frameworki PHP są bardziej zgodne z ideą MVC i dobrymi praktykami? –

+3

@RodionGorkovenko, obecnie najlepszy, pod względem kodowania, uważany jest za Symfony2. Ale to jak bycie najmądrzejszym rodzajem w klasie zaradczej. A Sf2 to [nie jest to framework MVC] (http://fabien.potencier.org/article/49/what-is-symfony2). Ale powinieneś być w stanie użyć wzoru projektu MVC. Większość frameworków PHP, które podają się za "frameworki MVC", jest zgodna z interpretacją MVC RubyOnRails (widok to szablon i model to ORM), z uwzględnieniem wszystkich minusów. –

+0

Uwielbiam swoją odpowiedź @ tereško. Proszę, nie przestawaj! –

1

Kontrolery powinny zawierać wyłącznie logikę odnoszącą się do całego elementu będącego aplikacją internetową. Twoja logika biznesowa należy do modeli. Myślę, że jest to jeden z podstawowych błędów, które można znaleźć w wielu aplikacjach CakePHP, że wiele logiki umieszcza się w kontrolerach, które faktycznie należą do modeli.

+0

Hm ... Wygląda na to, że nigdy nie mówiłem o umieszczaniu logiki biznesowej w kontrolerach. Chociaż nie myślałem o umieszczeniu go również w modelach. Myślałem, że komponenty w PhpCake są czymś w rodzaju naszych usług w java EE, ale wyglądają bardziej pomocniczo ... –

0

W CakePHP. "M" to tylko kilka modeli danych zamiast modeli domenowych. Moim zdaniem. CakePHP jest stworzony do rozwoju RAD. Nie nadaje się do zastosowań korporacyjnych.

Moja opinia jednak.

Powiązane problemy