2013-11-25 2 views
1

일부 제 3 자 제품 DB API에 Ruby 래퍼를 사용하고 있습니다.다른 모듈을 만들기 위해 루비 모듈을 "상속"할 수 있습니까?

API는 REST-ish이며 API 엔드 포인트가 /api/Product.getInfo 인 Product, Category, Company, Event 등과 같은 모델이 있습니다.

내 접근 방식은 API 호출 래퍼와 편리한 메소드를 사용하여 해당 API 모델에 해당하는 Ruby 클래스를 만드는 것이다. 이러한 모델 클래스는 모두 API 호출을 추상화하고 다른 공통 기능을 가진 동일한 상위 클래스 인 Base를 공유합니다.

Theese API 모델에는 많은 유사점이 있습니다. 예를 들어 제품, 회사 및 이벤트 모델에 태그를 지정할 수 있으므로 createTag, deleteTag, getTags과 같이 태그 지정을위한 API 호출 집합을 가질 수 있으며 태그 지정 기능을 추상화하기 위해 Taggable 모듈을 생성하고 포함 시켰습니다 이 세 가지 모델.

이제 제품, 이벤트, 회사 및 일부 다른 모델 (간략화를 위해 생략 됨)간에 공유되는 두 가지 기본 API 호출 인 createReviewgetReviews이있는 "검토"기능이 있습니다. 그러나 제품 및 이벤트 모델 만 createRiviewgetReviews을 지원하고 나머지는 getReviews 만 지원합니다.

그럼 두 모듈 (ReviewableWithReviews)을 사용하는 것이 좋을 것 같았습니다. 이전 (읽기/쓰기)은 후자 (읽기 전용)를 "상속"하지만 분명히 루비는 하위 모듈화를 지원하지 않습니다.

지금 어떻게해야합니까?

  1. 읽기/쓰기 버전 (예 : Reviewable) 대신 쓰기 전용 버전을 만들고 두 모듈을 모두 제품 및 이벤트 모델에 포함해야합니까?
  2. 어떻게 든 루비가 "상속" (읽기 전용)으로 Reviewable (읽기/쓰기)을 만들 수 있습니까?
  3. 아니면 완전히 벗어나 이런 종류의 문제를 해결할 수있는 더 좋은 방법이 있습니까 ???

또한 내 모듈 이름은 무엇이라고 생각하십니까?

처럼,

  • Taggable = 읽기 및 리뷰에 대한 상기와
  • 검토 가능한 = 같은 모델에 태그를 쓰기
  • WithReviews = 읽기 전용 검토

내가 생각하는 기능 첫 번째 두 개의 변수는 괜찮지 만 읽기 전용 버전의 이름을 지정하는 더 좋은 방법이나 규칙이 있습니까? WRITE-ONLY 모듈 명명을위한 권장 사항이 있습니까?

감사합니다.

SAKI = D

+0

'읽기/쓰기','읽기 전용 '이란 무엇입니까? – Newben

+0

죄송합니다. 거기에 분명히 없었습니다 ... "읽기/쓰기"=> 검토 모듈은 createReview (write) 및 getReviews (read) API 호출을 래핑합니다. "읽기 전용"=> WithReviews 모듈은 getReviews (읽기) API 호출 만 래핑합니다. 감사합니다. – Sacki

+0

여기에는 많은 의견을 제시하는 질문이 있으며 사실은 거의 대답 할 수 없습니다. –

답변

1

WithReviews 모듈을 Reviewable 모듈에 포함시킬 수 있습니다.

module WithReviews 
    def getReviews;end 
end 
module Reviewable 
    include WithReviews 
    def createReview;end 
end 
+1

감사합니다. 내가 원했던 것은 정확하게 여기에 적힌 것입니다! – Sacki

+0

내 기쁨입니다. :-) – uncutstone

0

질문을 이해하는 것은 간단하지 않습니다.하지만 여기에 몇 가지 일반 사항이 있습니다.

모듈 내부에 모듈을 만들 수 있습니다. 그래서 당신은 다른 사람의 내부 include 또는 extend 모듈은이

module A 
    module B 
    ... 
    end 
end 

Btw는 수 있습니다을 writting. 둘 사이의 차이점은 주먹이 인스턴스 메서드를 전송하고 두 번째 클래스 메서드를 전송한다는 것입니다. 이것을 볼 수 있습니다 doc

+0

감사합니다! 내가 원했던 것은 Reviewable 내에서 WithReviews를'include'합니다! – Sacki

관련 문제