문제

여러 모델에 대한 요약 정보를 제공하는보기를 생성하는 MVC를 사용하여 빌드 된 애플리케이션이 있습니다. 또한 여러 데이터 세트에 대해 일부 계산이 수행됩니다.

이에 대한 출발점으로 이해되는 것처럼 보이는 명확한 단일 모델 (적어도 테이블에 매핑 됨)이 없으므로 컨트롤러의 기여 모델에서 다양한 요약을 가져 와서보기 및 계산으로 전달합니다. 거기에서 공연됩니다.

하지만 더러워 보입니다 . 하지만 컨트롤러는 가벼워 야합니다. 그렇죠? 그리고 비즈니스 로직이 뷰에 있으면 안됩니다.

그러면이 정보는 어디에서 수집되어야합니까? 테이블에 매핑되지 않는 새로운 모델? 라이브러리 함수 / 모듈? 아니면 다른 것?

(대부분 아키텍처 / 패턴 질문으로 보지만 FWIW의 Rails에서 일하고 있습니다.)

수정 : 모든면에서 좋은 답변과 많은 합의가있어 안심입니다. 나는 Railscasts에 대한 링크를 맨 위에 유지하기 위해 내가 한 대답을 "수락"했습니다. 저는 Railscast보기에 뒤쳐져 있습니다. 바로 잡기 위해 열심히 노력할 것입니다!

도움이 되었습니까?

해결책

Brian이 말했듯이 수행해야하는 작업을 정리하는 또 다른 모델을 만들 수 있습니다.이러한 유형의 작업을 수행하는 방법에 대한 훌륭한 Railscast 가 있습니다.

HTH

다른 팁

컨트롤러는 특정 모델이나 뷰에 매핑 할 필요가 없습니다.모델은 데이터베이스 테이블에 일대일로 매핑 할 필요가 없습니다.그것은 일종의 프레임 워크 아이디어입니다.모두 개별적으로 테스트 할 수있는 우려 사항 분리

ActiveRecord::Base 를 상속하지 않는 모델을 만들고 실행하지 않는 이유논리 (Agile ... With Rails의 Cart 클래스를 생각해보십시오).

컨트롤러가 그렇게 가벼울 필요는 없습니다.

그러나 모델에만 의존하는 계산이 있다면 모델이 계산을 수행하기 위해 일종의 모델 래퍼가 필요할 것입니다.그런 다음 뷰에 대한 API에 배치하여 뷰가 최종 결과를 얻도록 할 수 있습니다.

논리가보기에 표시되는 것을 원하지 않습니다.그러나 데이터베이스보기를 자유롭게 만들 수 있습니다.단, 데이터베이스 측에서 생성하는 대신 새 모델로 생성합니다.이를 통해 한 곳에서 계산 및 실제 논리를 수행 할 수 있습니다.새 모델을 만드는 데 따르는 한 번의 "고통"이 아닌 동기화 된 뷰를 유지하려는 노력의 고통 ... 저는 새 모델에 투표합니다.

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