레일스는 MVC 관점에서 구조를 제공하기 때문에, 모델, 뷰 및 컨트롤러 컨테이너 만 제공되는 것이 당연합니다. 초보자 (심지어 중간 프로그래머까지도)의 전형적인 관용구는 앱의 모든 로직을 모델 (데이터베이스 클래스), 컨트롤러 또는 뷰로 밀어 넣는 것입니다.
누군가가 "뚱뚱한 모델, 스키니 컨트롤러"패러다임을 지적하고 중간 개발자는 컨트롤러의 모든 것을 급히 소비하고 모델에 던져 응용 로직을위한 새로운 쓰레기통이되기 시작합니다 .
스키니 컨트롤러는 실제로 좋은 생각이지만, 모델에 모든 것을 넣는 것은 실제로 가장 좋은 계획은 아닙니다.
루비에서는 모듈 식으로 만들기위한 몇 가지 좋은 옵션이 있습니다. 상당히 대중적인 대답은 메소드 그룹을 포함하는 모듈 (일반적으로 lib
에 있음)을 사용하고 해당 모듈을 적절한 클래스에 포함시키는 것입니다. 이 기능은 여러 클래스에서 재사용하려는 기능의 범주가 있지만 기능이 여전히 클래스에 개념적으로 연결된 경우에 유용합니다.
모듈을 클래스에 포함하면 메서드가 클래스의 인스턴스 메서드가되므로 여전히 톤 개의 메서드가 포함 된 클래스로 끝납니다.이 코드는 여러 파일로 잘 구성되어 있습니다.
이 솔루션은 경우에 따라 제대로 작동 할 수 있습니다. 다른 경우에는 코드에서 이 아닌 모델, 뷰 또는 컨트롤러 인 클래스를 사용하는 것이 좋습니다.
그것에 대해 생각하는 좋은 방법은 하나의 (또는 소수의) 사물에 대해 책임을 져야한다고 말하는 "단일 책임 원칙"입니다. 모델은 응용 프로그램의 데이터를 데이터베이스에 지속시키는 역할을합니다. 귀하의 컨트롤러는 요청을 받고 실행 가능한 응답을 반환 할 책임이 있습니다.
이러한 상자에 일관성이없는 개념 (지속성, 요청/응답 관리)이 있다면 이 해당 아이디어를 어떻게 모델화하는지 생각하고 싶을 것입니다. , 당신은 아마 또한 당신을 추가 할
config.load_paths << File.join(Rails.root, "app", "classes")
당신이 승객 또는 JRuby를를 사용하는 경우 : 당신은 응용 프로그램/클래스에서 비 모델 클래스를 저장하거나 다른 곳과 수행하여 하중 경로에 디렉토리를 추가 할 수 있습니다 열망로드 경로 경로 :
config.eager_load_paths << File.join(Rails.root, "app", "classes")
하단 라인은 당신이 당신 자신이 질문을 찾을 레일의 지점에 도착하면, 그것은 때로 믿을 모델링 클래스를 루비 갈비를 강화하고 시작하는 시간이다 Rails가 기본적으로 제공하는 MVC 클래스 일뿐입니다.
업데이트 :이 답변은 Rails 2.x 이상에 적용됩니다.
D' oh. 비 모델을위한 별도의 디렉토리를 추가하는 것은 나에게 발생하지 않았다. 나는 깔끔한 분위기가 느껴진다. –
예후 다, 고마워. 좋은 대답.컨트롤러, 모델, 뷰 및 헬퍼의 모든 것이 컨트롤러 및 뷰에 자동으로 제공됩니다. 상속받은 앱에서 볼 수있는 바로 그 것입니다. 그런 다음 lib에서 mixins를 가져 오지 만 실제 OO 모델링을 시도한 적이 없습니다. 그렇습니다. "앱/수업 또는 그 밖의 모든 곳에서." 그냥 누락 된 몇 가지 표준 답변이 있는지 확인하고 싶습니다 ... –
더 최신 버전에서는 config.autoload_paths가 app 아래의 모든 디렉토리로 기본 설정됩니다. 따라서 위에서 설명한대로 config.load_paths를 변경할 필요가 없습니다. 나는 eager_load_paths (아직)에 대해서는 잘 모르겠다. 그리고 그것에 대해 조사 할 필요가있다. 아무도 이미 알고 있니? –