2

MVC를 사용하여 빌드 된 응용 프로그램을 통해 여러 모델에서 요약 정보를 제공하는보기를 생성합니다. 또한, 일부 계산은 다른 데이터 세트에서 수행됩니다.MVC에서 모델 간 정보를 나타내는 방법은 무엇입니까?

시작점으로 이해할 수있는 명확한 단일 모델 (최소한 테이블에 매핑 됨)이 없기 때문에 컨트롤러의 기여 모델에서 다양한 요약을 가져 와서 뷰로 전달하고 계산이 수행됩니다.

그러나 그럴 것 같습니다. 더러운입니다. 그러나 컨트롤러는 가볍습니다. 비즈니스 로직은 현재와 같이보기에 있어서는 안됩니다.

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

(I이 아니라 주로 건축/패턴 질문을 볼 수 있지만, 나는 레일에서 일하고 있어요 FWIW.)

편집 : 좋은 모든 라운드 답변하고, 합의를 많이, 안심한다 . 나는 Railscasts와의 연결을 유지하기 위해 내가 한 대답을 "받아 들였습니다". 나는 Railscast 시청 뒤에 있습니다 - 나는 열렬한 시도를 바로 잡을 것입니다!

답변

2

브라이언이 말했듯이, 필요한 작업을 마샬링하는 다른 모델을 만들 수 있습니다. 이런 종류의 일을하는 방법에는 a great Railscast이 있습니다.

HTH

0

컨트롤러는 인 것이므로 경량 일 필요는 없습니다.

그러나 모델에 의존하는 계산이있는 경우 계산을 수행 할 모델에 대한 일종의 모델 래퍼가 필요할 수 있습니다. 뷰를 최종 결과를 얻을 수 있도록 뷰의 API에 배치 할 수 있습니다.

1

ActiveRecord::Base을 상속하지 않는 모델을 만들고 거기에서 논리를 실행하는 것이 어떻습니까? (애자 일 ... 레일즈의 장바구니 클래스를 생각해보십시오).

0

로직을보기에 표시하지 않습니다. 그러나 데이터베이스 뷰는 자유롭게 작성할 수 있습니다. 데이터베이스 측에서 작성하는 대신, 새 모델로 작성하십시오. 이렇게하면 한 곳에서 계산과 실제 논리를 수행 할 수 있습니다. 새로운 모델을 만들 때의 한 순간의 "고통"과 당신의 의견을 동기화하려고 노력하는 것의 고통 ... 나는 새로운 모델에 투표합니다.

1

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