2013-06-05 10 views
5

Pracuję nad projektem i jestem zdezorientowany, aby umieścić kod w miejscu. Podam prosty przykład, aby pokazać, dlaczego jestem nieco zdezorientowany.Cakephp Components VS Libs and shells

Wyobraź sobie kilka stron internetowych w aplikacji cakephp, gdzie w ten czy inny sposób można utworzyć konto - wraz z tym kontem należy wywołać kilka innych funkcji z obu modeli i bibliotek (przykład zip coś, utwórz certyfikat dla konto, ...).

Widząc, jak to musi być zrobione w kilku miejscach i nie pasuje do Modelu (+ to całkiem niezły kod), najlepszym sposobem jest użycie komponentów, które myślałem.

Działa to świetnie, o ile jesteś za serwerem internetowym, ale co, jeśli chcę mieć dostęp do wszystkich funkcji w powłoce? - wtedy nie mogę używać komponentów i mogę tylko ładować biblioteki.

Jest tak w przypadku wszystkich funkcji/kodu php, które mogę/chcę udostępnić, aby wszystkie logiki były dostępne w obu powłokach, tak jak w kontrolerach.

Tutaj przychodzą pytania :) => Tak więc wszystkie moje komponenty muszą być bibliotekami ?, czy architektura jest poprawna w celu załadowania modeli/innych bibliotek itp. Wewnątrz tych bibliotek ?, co to jest użycie komponentów? dobrze "rm -rf" je i używasz tylko bibliotek?

Do tej pory sposób, w jaki użyłem komponentów, polega na umieszczeniu całej logiki procesu, która może/musi być współdzielona między kontrolerami w nich. Libs Użyłem, gdy nie potrzebuję żadnych modeli lub tylko zestawu funkcji statycznych (przykład do manipulowania obrazami). Robiąc to, uderzyłem w ścianę, gdzie chcę/potrzebuję mieć dostęp do logiki tych komponentów podczas korzystania ze skryptów Shell.

Każdy pomysł jest na temat, gdzie moje zrozumienie idzie nie tak?

Odpowiedz

4

Wszystkie odpowiedzi zostały już przez Ciebie podane!

Tak, komponenty udostępniają funkcje między kontrolerami. Tylko kontrolery. Więc jeśli potrzebujesz tej funkcjonalności w modelu lub powłoce, niż w niewłaściwym miejscu.

Powinieneś umieścić kod, który jest używany zarówno moją powłokę i kontroler do warstwy modelu (jeśli jego model/db związane) lub libs (statyczne/calc rzeczy itp.). Następnie mogą być używane z obu stron.

Możesz używać modeli w bibliotekach i vica versa. Tylko uważaj, aby nie tworzyć zbyt wielu zależności i cyklicznych relacji. Są one również trudne do testowania/rozszerzania/modyfikowania.

Komponenty są przydatne do zawijania tych metod/modeli w celu uzyskania szybkiego i wygodnego dostępu do kontrolera, a także do wykonywania bardziej specyficznych operacji automagicznych i kontrolera. Podobnie do komponentu SessionComponent, który tylko opakowuje klasę CakeSession w celu zapewnienia łatwego dostępu do sesji w kontrolerze.

Nawiasem mówiąc: to samo opakowanie wiarowe można również wykonać w środowisku wiersza polecenia za pomocą zadań. To nic innego niż "komponenty do muszli".

+0

Dzięki za weryfikację moich początkowych myśli! Nie chcę umieszczać kodu w niewłaściwych miejscach, ponieważ utrudni to mi późniejszy rozwój/rozbudowę. – Crazy