문제

로직을 컨트롤러에서 모델로 전환하는 것이 좋습니다. 그러나 모든 복잡한 시스템에서, 이것은 대부분의 방법이 레일 방식에 따라 하나의 라이너라도 매우 큰 파일로 이어집니다.

예를 들어 모델을 다른 모듈로 분할하고 원래 모델에 포함시키는 데 의지했습니다. model_flags, model_validation, 더 나은 방법이 있습니까?

편집 : ActiveCeCerner를 사용하여 제안하는 새로운 답변을 선택했습니다. 또한 코드 구성에 관심이있는 사람이라면이 기사, ActiveRecord 모델을 얇게 만듭니다, 크게 도움이 될 것입니다.

도움이 되었습니까?

해결책

나는 이것이 상당히 오래된 질문이라는 것을 알고 있으며 대답으로 표시되어 있지만 여전히 좋은 Google 주스가 있으므로 추가 할 가치가 있다고 생각했습니다.

Rails 3은 ActiveSupport :: 관심사를 소개했으며, 이는 모델에서 공유되는 동작을 모듈화하는 데 사용할 수 있습니다. 또는 그 문제에 대해 너무 뚱뚱해진 모델을 낮추는 것.

DHH 자신은 여기에 멋지고 간결한 예를 제공합니다.

https://gist.github.com/1014971

다른 팁

나는 몇 가지 이유로 이것을하지 않을 것입니다.

먼저 당신은 사물이 어디에 있어야한다는 가정을 위반합니다. 아마도 처음에는 레일에 가장 큰 보너스 일 것입니다. 새로운 사람이 프로젝트를 걸어 모델에 모델을 고수하면 프로젝트를 쉽게 탐색 할 수 있습니다. 꺼내면 지연과 혼란을 추가하면 특히 모듈로 무언가를 제거하기위한 유일한 논리가 모델 크기를 줄이는 것입니다.

둘째, 당신은 그것으로부터 거의 아무것도 얻지 못하고 당신은 무언가를 잃습니다. 요즘 거의 모든 편집자와 IDE가 큰 파일의 탐색 통증을 완화 할 때 파일 크기는 중요하지 않습니다. 모듈로 물건을 옮기는 것은 실제로이 현대의 편의성을 없애고 당신과 동료 또는 미래의 관리자가 하나의 모델에서 작업하는 동안 여러 파일을 더 많이 뛰어 넘어야합니다.

즉, 하드 코어 레일 모범 사례 Posse가 당신의 모델이 크고 복잡하다면 디자인이 결함이 있고 모델이 모듈이 아닌 별도의 모델로 만들 수있는 몇 가지를 나타냅니다.

글쎄, 나는 여러분 중 누구라도 모든 것을 하나의 모델에 넣는 것이 잘못되었다고 말하지는 않지만 다양한 문제를 분리 할 수있는 것이 매우 유효하다고 생각합니다. 그것은 최소한 트레이드 오프입니다.

그리고 나는 내 자신의 질문에 대한 답을 게시하고 있습니다.http://github.com/jakehow/concerned_with

자세한 내용은 여기를 참조하십시오.http://m.onkey.org/2008/9/15/active-record-tips-and-tricks

객체 모델에 대한 지식이 없으면 조언하기가 조금 더 어렵지만 모든 검증/연관/콜백을 절대적으로 확신한다면 필요 그 장소에 있으면 여전히 일반적인 행동을 고려하는 방법이 있습니다. 따라서 큰 코드를 한 파일에서 다른 파일에서 다른 파일로 옮기지는 않지만 클래스를 다시 열 수 있지만 모듈/플러그인을 사용하여 일반적인 유형의 동작을 설명하는 것이 좋습니다.

예를 들어, Facebook-esque 활동 피드를 구축하고 모든 것이 "이벤트"를 생성 해야하는 경우, 포함 시점에서 연관/검증을 정의하는 "이벤트 가능한"동작을 모듈로 옮기고 싶을 것입니다. /등. 나는 접근 방식이 실제로 코드의 명확성을 향상시킬 것이라고 말하고있다. 왜냐하면 모든 곳에서 해당 연관성을 수동으로 지정하는 것은 이벤트 가능한 것으로 선언하는 것만 큼 표현력이 없기 때문이다. , 논리가 바뀌면 나머지를 알고 있습니다 ...)

그래도 대체로, 나는 당신의 객체 모델을 크게 살펴 보라고 말하고 싶습니다. 테스트 스위트에서 모든 테스트에 많은 설정이 필요하다는 것을 알게되면 객체 모델에 무언가가 누락된다는 좋은 지표가 될 수 있습니다. 다시 말하지만, 일부 샘플 코드는 좋을 것입니다.

모듈은 합리적으로 들립니다. 메소드 호출 (유효성 검사, 콜백, 플러그인 등)을 모듈로 추출하지는 않지만 추출을 내 방법으로 제한합니다.

그리고 항상 그렇듯이 샘플 코드를 게시하면 도움이됩니다. 모델을 정리하는 일반적인 전략을 상상하기가 어렵다는 것을 알게되며 코드의 특성에 따라 다릅니다.

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