문제

MVC에 대한 나의 이해는 다음과 같습니다.

  1. 모델은 데이터베이스와 인터페이스하는 것입니다
  2. 보기는 페이지의 디자인/레이아웃입니다
  3. 컨트롤러는 모든 것이 시작되며 본질적으로 페이지 논리입니다.

사용 중입니다 Codeigniter 그러나 나는 그것이 단지 그것에만 국한된 것이 아니라 PHP 프레임 워크에만 국한되지 않을 것이라고 생각합니다.

글로벌 수업을 어디에 두어야합니까?

제품 모델이있을 수 있으며 데이터베이스에서 20 개의 제품을 수집하는 쿼리를 실행합니다. 이제 20 가지 모델을 만들거나 별도의 클래스가 있어야합니까? 후자 가이 클래스를 어디에 두어야하는지 (다른 컨트롤러도 사용해야합니다)

도움이 되었습니까?

해결책

모델은 제품으로 무엇을 해야하는지 논의 할 때 사용하기에 잘못된 단어입니다. 각 제품은 값 객체 (VO) (또는 데이터 전송 OBJET/DTO, 입에 더 잘 맞는지). 값 객체는 일반적으로 테이블과 동일한 필드를 가지고 있습니다. 귀하의 경우 ProductVo에는 제품 테이블에있는 필드가 있어야합니다.

모델은 a입니다 데이터 액세스 개체 (DAO) 그것은 같은 방법이 있습니다

findByPk --> returns a single value object
findAll --> returns a collection of value objects (0-n)
etc.

귀하의 경우에는 위의 방법과 같은 제품이있는 제품이 있습니다. 이 ProductDao는 ProductVo와 컬렉션을 반환합니다.

데이터 액세스 개체도 반환 할 수 있습니다 비즈니스 개체 (BO) 여기에는 비즈니스 사례에 따라 다중 VO 및 추가 방법이 포함될 수 있습니다.

부록 : 컨트롤러에서 원하는 제품을 찾기 위해 ProductDao를 호출합니다. 그런 다음 반환 된 ProductVo (들)를 뷰로 전달합니다 (Java의 요청 속성으로). 그런 다음보기는 ProductVo의 데이터를 통해 반복/표시합니다.

다른 팁

모델 비즈니스 로직이 발생하는 응용 프로그램의 일부입니다. 모델은 다음과 같은 객체 간의 실제 관계 및 종속성을 나타냅니다. 직원 보고서 관리자, 관리자는 많은 직원을 감독하고 관리자는 직원에게 작업을 할당 할 수 있으며, 작업이 기한이 지났을 때 알림을 보냅니다. 모델은 데이터베이스와 인터페이스 할 수 있지만 대부분은 필요하지 않습니다.

보다 기본적으로 표시하거나 표시하는 데 도움이 될 수있는 모든 것입니다. 보기에는 템플릿, 템플릿 객체, 손잡이 템플릿 구성 및 중첩, 헤더 및 바닥 글로 랩을 포함하며 잘 알려진 형식 중 하나 (X/HTML뿐만 아니라 XML, RSS/Atom, CSV)로 출력을 생성합니다.

제어 장치 사용자 작업을 모델 작업으로 변환하는 번역 계층입니다. 다시 말해, 모델에 무엇을 해야하는지 알려주고 응답을 반환합니다. 컨트롤러 방법은 가능한 한 작아야하며 모든 비즈니스 처리는 모델에서 수행해야하며, 로직 처리를 볼 수 있어야합니다.

이제 질문으로 돌아갑니다. 각 제품마다 별도의 클래스가 필요한지에 따라 달라집니다. 대부분의 경우 하나의 클래스로 충분하고 20 개의 인스턴스가 생성되어야합니다. 제품은 비즈니스 로직을 나타내므로 응용 프로그램의 모델 부분에 속해야합니다.

~ 안에 케이크 "부품"이 3 개 더 있습니다.

  1. 행동
  2. 구성 요소
  3. 도우미

많은 모델이 사용하는 논리는 행동으로 만들어야합니다. CodeIgniter 가이 논리를 가지고 있는지 여부는 모르겠지만, 그렇지 않다면, 나는 그것을 구현하려고 노력할 것입니다. 행동에 대해 읽을 수 있습니다 여기.

(구성 요소는 컨트롤러가 논리를 공유하는 데 도움이되고 도우미는 동일한 방식으로보기를 도와줍니다).

가장 간단한 방법은 다음과 같습니다.

  1. 데이터베이스 테이블 당 모델 클래스가 있습니다. 이 경우 모든 제품 세부 사항을 보유한 객체입니다.
  2. 이 클래스를 패키지 / 네임 스페이스에 넣습니다.
  3. dao 클래스를 com.company.model.dao와 같은 패키지에 넣습니다
  4. 귀하의보기는 세션/요청/컨트롤러에서 데이터를 소비합니다.이 경우 목록이 있습니다.u003CProduct> .
  5. 아, PHP를 사용하고 있습니다. Dunno가 어떻게 변화하는지, 그러나 나는 그것이 어떤 현대 언어와 같은 컬렉션 프레임 워크를 가지고 있다고 생각합니다.

@alexander는 CakePhps를 언급합니다 행동, 구성 요소 그리고 도우미. 이들은 일반적인 기능을 추상화하는 데 탁월합니다. 물론 대부분의 비즈니스 논리가 모델에 전달되는 동작이 특히 유용하다는 것을 알았습니다. 저는 현재 다음과 같은 행동이있는 프로젝트를 진행하고 있습니다.

  • 잠금 가능
  • 게시 가능
  • 태그가 가능합니다
  • 평가할 수 있는
  • 주석

등.

MVC 프레임 워크 IE 코드 라이브러리조차도 초월하는 코드의 경우 사용중인 특정 프레임 워크에 연결되지 않은 다양한 것들에 사용하는 코드 라이브러리를 초월합니다. 우리의 경우 비디오 인코딩 클래스 등과 같은 것들. CakePHP는 다음과 같습니다. 공급 업체 폴더.

CakePHP와 효과적으로 관련이없는 것은 거기에 들어갑니다.

나는 CodeIgniter가 유연한 구조를 가지고 있지 않다고 생각합니다. CakePHP보다 작고 가볍습니다. Cakephp 매뉴얼 동작, 구성 요소, 도우미 및 공급 업체 폴더가 어떻게 도움이 될 수 있는지 확인하기 위해.

모델의 일반적인 도우미 클래스를 포함시키는 것은 쉬운 일이어야합니다. 마른

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top