CakePHP에서 더 나은 모델 기능을 리팩터링하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1855191

  •  13-09-2019
  •  | 
  •  

문제

나는 모범 사례를 프로그래밍하고 있으며 함수를 만들 때 단일 특정 작업 만 수행해야한다고합니다.

데이터를 검색하고 관련 데이터를 검색하는 모델 기능이 있습니다. 예시:

$ this-> Student-> StudentAssignments ();

현재이 기능은 학생의 과제와 각 과제에 대한 질문과 학생에 대한 데이터를 검색합니다. 나는 그들 모두를 사용합니다. 내 딜레마는 관련 데이터 (학생 및 질문 데이터)를 검색하는 별도의 기능을 만들려고한다면 DB에 더 많은 전화를 걸고 있기 때문에 세금이 부과됩니다.

너희들은 무엇을 제안 하시겠습니까?

도움이 되었습니까?

해결책

이런 종류의 리팩토링을 할 때 명심해야 할 것 ...

나는 일반적으로 모델에 모델-> getSomethingandsomethingElse 기능이 있습니다. 이러한 기능은 공개적이며 복잡한 (또는 어떤) 컨트롤러에서 호출을 찾기위한 대체물로 불려집니다.

내가 일반적으로 할 일은 모델에 작은 개인 기능 모음을 구축하는 것입니다. 당신의 경우 나는 줄을 따라 무언가를 가질 수 있습니다 ...

학생-> getStudentAssigmentsWithQuestions

그런 다음 일부 개인 기능을 부릅니다

학생-> GetStudent는 학생-> joinstudentAssignment라고 부를 수 있습니다.

Markdown이 그들 때문에 대담한 것을 원하기 때문에 이중 밑줄 접두사가 제거되었습니다. PHP5를 사용하는 경우 "개인"또는 "보호 된"키워드를 사용하는 한 밑줄은 어쨌든 중요하지 않습니다.

기본적으로 저는 공개 방법을 모델 내에서 매우 구체적인 쿼리 빌딩 또는 협회 구축 개인 기능의 컨테이너로 사용합니다. 이를 통해 복잡한 데이터가 반환되는 API를 가질 수 있지만 작은 부분에서 쿼리 또는 결과 세트 (데이터 유형, 관련 관계 또는 쿼리 복잡성에 따라)를 작성할 수 있습니다. 하나의 공개 기능 호출.

다른 팁

나는 당신이 잘하고 있다고 생각합니다. 그러나 당신은 당신의 기능을 바꾸는 것을 재고해야합니다

$this->Student->getStudentAssignmentsWithQuestions

또는 당신이 적합하다고 생각하는 것은 무엇이든. 특정 방법으로 각 요소 세트를 가져 오는 대신 가능한 한 데이터베이스에 대한 호출을 최대한 적게 요청해야한다고 생각합니다 (어딘가에 가입을하고 있다고 가정합니다). 이것은 더 많은 방법을 얻을 수 있다는 사실로 이어질 수 있으므로 (더 많은 테스트를 작성해야 함) 이것이 올바른 방법이라고 생각합니다.

디자인 인수를 방어하기 위해 : 귀하의 방법은 단 하나의 작업 만 수행합니다. 각 과제의 질문에 따라 학생의 과제를 가져옵니다.

아니요, 코드 리팩토링에 대해 엄격히 걱정된다면 해당 블로브를 단일 작업을 수행하는 단순한 기능으로 분류해야합니다. 그렇습니다. 데이터베이스를 더 많이 칠 수 있지만 CakePHP에서 캐싱으로 작업하는 것이 얼마나 쉬운 지 고려하면 성능이 문제가되지 않아야합니다. 그렇다면이 시점에서 코드 리팩토링에 대해 걱정하지 않아야합니다.

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