2012-08-12 3 views
11

저는 CakePHP를 조사하려고하는 자바 프로그래머입니다 - 현재 어플리케이션 구조/디자인에 문제가 있습니다. 핵심 논리를 어디에 둘 것인지 이해할 수 없었습니다. 내가 JavaEE 어플에서 개발하고 때 CakePHP - 서비스 로직을 넣을 곳

는, 일반적인 방법은 다음과 같습니다 :

  • 모델 클래스는 데이터 엔티티 표현 간단한 콩 (제품, 사람 등)이다 - 대부분의 getter/setter를 가진 데이터 구조와 같은;

  • 컨트롤러 클래스는 필요한 데이터를 집계하여 전용 뷰 템플릿에 주입 한 다음 사용자에게 전송하는 데 필요한 간단한 클래스입니다.

  • DAO (DataAccessObject) 또는 저장소 클래스는 엔터티를로드하여 데이터베이스에 저장할 수있는 클래스입니다.

  • 서비스 클래스는 일반적으로 컨트롤러, 다른 서비스 또는 예약 된 작업에 의해 호출되는 특정 비즈니스 논리 메서드를 포함하는 단일 요소이며 다른 한편으로는 DAO/Repository 메서드를 호출하여 데이터를 페치하거나 수정합니다. 나는 사용자가 어떤 제품을 선택하고 작성해야이 Person에 대한 new Order "내 카트/바구니에 넣어 '클릭 실체 Person, ProductOrder을 가지고있는 경우이 Product이 추가되어야한다 예를 들어

Order (Person은 나쁜 채무자가 아니고, 점포 등에는 Product가있는 것을 확인할 수 있습니다) -이 모든 작업은 일부 컨트롤러에서 호출하는 OrderService의 방법으로 수행됩니다. 모든 서비스와 컨트롤러가 지금은 약간이 모두 CakePHP의에서 수행하는 방법에 대해 당황하고 등 필요한 서비스

에 대한 링크를 가질 수 있도록

일반적으로 IOC의 어떤 종류 (제어의 반전이)가 사용됩니다. 이 비즈니스 로직 등은 어디에 두어야합니까?

답변

6

CakePHP에서 모델 계층은 active record 인스턴스의 집합 인 AppModel으로 구성됩니다. 저장소와 관련된 로직 (대개 DAO 및/또는 리포지토리에 넣을 것임)을 비즈니스 로직 (보통 "모델"에 들어있는 것)과 결합합니다.

기타 도메인 관련 로직 (서비스에서 제공)은 컨트롤러의 일부가됩니다. 당신이 알고 싶은 경우에

, 당신은에 가정 얼마나 단지 활성 기록 패턴을 찬양 기사를 검색, CakePHP의에서 도메인 비즈니스 로직을 구현한다.

개인의 의견
CakePHP의 이그나이터는 PHP에서 최악의 프레임 워크의 두 가지입니다.
그들은 나쁜 습관으로 가득 차 있습니다. 당신이 올바른 틱 MVC를하고 있다면

사실, 다음 모델 층는 관련이 비즈니스 로직과 모든 것을 모두 포함한다. 모델 계층은 DAO, 리포지토리, Domain Objects ("모델"이라고 부르는) 및 서비스로 구성됩니다.

Java 기반 코드에 대한 설명에서 해당 방향으로 조금 움직이고 있음을 나타내지 만 CakePHP는 원격으로 가까이 있지 않습니다.

다시 말해 MVC의 my understanding이 잘못되었을 수 있습니다.

+0

설명 해 주셔서 감사합니다. ActiveRecord 패턴에 대해 언급하면 ​​좀 더 명확 해집니다. 귀하의 개인적인 견해에 관해서 - 어떤 PHP 프레임 워크가 MVC 아이디어와 우수 사례를 따르는 것이 더 낫다고 생각하십니까? –

+3

@RodionGorkovenko, 현재 가장 좋은 코드 연습은 Symfony2입니다. 그러나 그것은 치료 수업에서 가장 똑똑한 것과 같습니다. 그리고 Sf2는 [MVC 프레임 워크가 아닙니다] (http://fabien.potencier.org/article/49/what-is-symfony2)입니다. 하지만 MVC 디자인 패턴을 사용할 수 있어야합니다. "MVC 프레임 워크"라고 주장하는 대부분의 PHP 프레임 워크는 MVC의 RubyOnRails 해석 (뷰는 템플릿이며 ORM 모델 임)을 따르고 있으며 모든 단점이 포함되어 있습니다. –

+0

@ tereško의 답변을 사랑해주십시오. 계속 지켜주세요! –

1

컨트롤러에는 웹 응용 프로그램 전체와 관련된 논리 만 포함해야합니다. 비즈니스 논리가 모델에 속합니다. 나는 많은 cakePHP 응용 프로그램에서 발견되는 기본적인 실수 중 하나라고 생각합니다. 실제로 많은 논리가 컨트롤러에 포함되어 실제로 모델에 속합니다.

+0

흠 ... 저는 비즈니스 로직을 컨트롤러에 배치하는 것에 대해 말한 적이없는 것처럼 보입니다. 비록 내가 모델에 배치하는 것을 생각하지 않았지만. 나는 PhpCake의 Components가 java EE의 서비스와 같다고 생각했지만, 그들은 더 많은 보조 기능을 가지고있다. –

0

CakePHP. "M"은 도메인 모델 대신 데이터 모델의 무리입니다. 내 의견으로는. CakePHP는 RAD 개발을 위해 만들어졌습니다. 엔터프라이즈 응용 프로그램에는 적합하지 않습니다.

내 의견.