2013-06-05 2 views
5

나는 프로젝트에서 일하고 있는데 어떤 코드를 어디에 넣어야하는지 혼란 스럽다. 나는 왜 내가 다소 혼란스러워하는지 보여주는 간단한 예제를 여기에 넣을 것이다.Cakephp Components VS Libs and shells

cakephp 앱에 여러 웹 페이지가 있다고 상상해보십시오.이 계정과 함께 계정과 함께 모델과 라이브러리의 다른 여러 함수를 호출해야합니다 (예 : zip something, 계정, ...).

여러 위치에서 수행해야하며 Model (+ 코드는 상당 부분)에 속하지 않으므로 가장 좋은 방법은 생각했던 구성 요소를 사용하는 것입니다.

웹 서버를 사용하는 한 훌륭하게 작동하지만 쉘에서 사용할 수있는 기능을 모두 갖고 싶다면 어떻게해야합니까? - 그럼 구성 요소를 사용할 수없고 libs 만로드 할 수 있습니다.

컨트롤러에서와 같이 두 논리 모두에서 모든 논리를 사용할 수 있도록 공유 할 수있는 모든 기능/PHP 코드의 경우입니다.

여기에 질문이 왔습니다 :) => 내 모든 구성 요소가 libs가되어야합니까?, 모델을로드하는 데 올바른 아키텍처/다른 libs 등이 있습니까? 그 다음 구성 요소를 어떻게 사용합니까?, 잘 'rm -rf'그들 만 libs를 사용합니까?

지금까지 컴포넌트를 사용한 방법까지는 컨트롤러간에 공유 할 수있는 모든 프로세스 로직을 배치하는 것까지입니다. Libs 모델이나 정적 함수의 모음 (이미지 조작 예제)이 필요하지 않은 경우에 사용했습니다. 셸 스크립트를 사용할 때 해당 구성 요소의 논리에 액세스하고 싶거나 필요가있는 벽을 쳤습니다.

내 아이디어가 어디에서 잘못 되었습니까?

답변

4

너는 이미 너 자신 모든 응답을 주었다!

예, 구성 요소는 컨트롤러간에 기능을 공유합니다. 컨트롤러 만. 모델이나 셸에서 해당 기능이 필요하다면 잘못 배치 된 것보다.

내 쉘과 컨트롤러 모두 모델 레이어 (해당 모델/db 관련) 또는 libs (정적/calc 물건 등)에 사용되는 코드를 넣어야합니다. 그러면 양쪽에서 사용할 수 있습니다.

libs 및 그 반대의 모델을 사용할 수 있습니다. 너무 많은 의존성과 순환 관계를 생성하지 않도록주의하십시오. 또한 테스트/확장/수정하기가 어렵습니다.

구성 요소는 신속하고 편리한 컨트롤러 액세스를 위해 lib/model 메서드를 래핑하고 자동화 및 컨트롤러 특정 처리를 수행하는 데 유용합니다. 컨트롤러에서 쉽게 세션 액세스를 제공하기 위해 CakeSession 클래스 만 래핑하는 SessionComponent와 유사합니다.

그건 그렇고 : 당신도 작업을 사용하여 명령 줄 환경에서 할 수있는 같은 convinience 포장. 그것들은 "쉘을위한 구성 요소"입니다.

+0

초기 생각을 확인해 주셔서 감사합니다. 나중에 개발/확장 할 때 방해가 될 수 있으므로 코드를 잘못된 위치에 배치하고 싶지 않습니다. – Crazy