문제

RoR 튜토리얼에서는 ORM이 작동하도록 테이블당 하나의 모델을 가정합니다.내 DB 스키마는 개념적으로 5 개의 기능 그룹으로 나뉘어져있는 약 70 개의 테이블이 있습니다 (예 : 주어진 테이블 하나는 하나의 기능 그룹에만 살고 있으며 다른 그룹의 테이블 간의 관계는 최소화됩니다).개념적 그룹별로 모델을 디자인해야 합니까, 아니면 단순히 70개의 Rails 모델을 갖고 그룹화를 '개념적'으로 두어야 합니까?감사해요!

도움이 되었습니까?

해결책

나는 테이블/모델이 개념적으로 이름별로 그룹화되었는지 확인하여(거의 1:1 테이블-모델 관계로) 대규모 앱 중 하나에서 이 문제를 다룹니다.예:

events
event_types
event_groups
event_attendees
etc...

이렇게 하면 TextMate 등을 사용할 때 모델 파일이 알파 정렬로 잘 그룹화됩니다.이 앱에는 80개의 모델이 있는데, 물건을 정리하기에 충분할 정도로 잘 작동합니다.

다른 팁

아마도 70개의 모델이 있어야 할 것입니다.각 그룹마다 하나씩 5개의 네임스페이스를 갖도록 모델의 네임스페이스를 지정할 수 있지만 이는 가치 있는 것보다 더 많은 문제가 될 수 있습니다.아마도 각 그룹 전체에 몇 가지 공통 기능이 있을 것입니다.이 경우 각 그룹의 동작을 포함하는 모듈을 만들고 이를 각 관련 모델에 포함시킵니다.공유 기능이 없더라도 이렇게 하면 개념 그룹에 대한 모델을 빠르게 쿼리할 수 있습니다.

ActiveRecord의 모든 기능을 활용하려면 반드시 테이블당 하나의 모델을 사용해야 합니다.

그러나 모델 디렉터리에서 70개의 파일을 관리할 필요가 없도록 모듈과 하위 디렉터리를 사용하여 모델을 네임스페이스로 그룹화할 수도 있습니다.

예를 들면 다음과 같습니다.

app/models/admin/user.rb
app/models/admin/group.rb

모델 Admin::User 및 Admin::Group의 경우

app/models/publishing/article.rb
app/models/publishing/comment.rb

게시용::기사 및 게시::댓글

기타 등등...

70개의 테이블의 성격과 개념적 관계에 대한 자세한 내용을 알지 못하면 실제로 좋은 답변을 제공하는 것이 불가능합니다.이 테이블은 레거시 테이블인가요, 아니면 처음부터 디자인한 테이블인가요?

테이블이 일종의 상속 패턴과 관련되어 있습니까? 아니면 그럴 수 있습니까?Rails는 제한된 형태의 상속을 수행할 수 있습니다.단일 테이블 상속(STI)을 찾아보세요.

개인적으로 저는 70개의 테이블 작업을 피하는 데 많은 노력을 기울였습니다. 그 이유는 작업이 엄청나게 많기 때문입니다. 70개의 모델 및 컨트롤러와 4개 이상의 뷰, 도우미, 레이아웃 및 테스트는 물론 유지 관리의 메모리 부하 문제도 포함됩니다. 산업의 디자인.물론 내가 시간당 급여를 받고 반복을 보상할 만큼 넉넉하지 않은 한.

70개의 모델을 만들기 전에 다음 질문을 고려하여 결정하는 데 도움을 받으십시오.

각 테이블이 "자동차" 테이블과 같은 "개체"로 간주됩니까? 아니면 일부 테이블이 관계 정보만 보유하고 있습니까? 예를 들어 모든 외래 키 열이 있습니까?

Rails에서는 "객체" 테이블만 모델이 됩니다!(특정 유형의 연결에 대한 일부 예외는 있음) 따라서 기능 그룹이 5개만 있는 경우 모델이 70개가 아닐 가능성이 매우 높습니다.또한 언급한 기능 그룹이 크게 다른 경우 자체 앱에 가장 적합할 수도 있습니다.

Rails 표준 단일 테이블 상속 모델을 사용할 수 있는 경우가 소수 있을 수 있습니다.아마도 하나의 특정 기능 그룹에 있는 모든 클래스는 동일한 필드(또는 거의 모두 동일)를 가질 수 있습니다.그렇다면 DRYness STI가 제공하는 혜택을 활용해보세요.하지만 이해가 되지 않는 경우에는 테이블당 클래스를 사용하세요.

테이블당 클래스 버전에서는 공통 기능을 기본 클래스로 쉽게 가져올 수 없습니다.대신 모듈로 끌어오세요.다음과 같은 계층 구조가 유용할 수 있습니다.

app/models/admin/base.rb - module Admin::Base, included by all other Admin::xxx
app/models/admin/user.rb - class Admin::User, includes Admin::Base
app/models/admin/group.rb - class Admin::Group, includes Admin::Base

이미 언급했듯이 데이터베이스 스키마 등을 모르고 적절한 조언을 제공하기는 어렵습니다. 그러나 저는 70개 이상의 모델(테이블당 하나씩)을 만드는 쪽으로 기울고 싶습니다.

일부 모델을 버리는 것만으로도 문제가 없을 수 있지만 비용을 고려하면(무시할 정도) 해당 모델을 보유하는 것이 좋습니다.

srboisvert의 답변에 따라 각 모델에 대해 컨트롤러 + 뷰를 만들 필요가 없습니다.각 리소스에 대해 컨트롤러만 필요합니다(귀하의 설명으로 판단하면 70개보다 훨씬 적을 것으로 예상됩니다. 아마도 10~15개 정도일 것입니다).

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