2013-05-10 6 views
1

저는 새로운 RoR이고 내 응용 프로그램을 구조화하는 방법을 파악할 수없는 것 같습니다.타사 API를 사용하는 레일 응용 프로그램의 구조

Google 웹 로그 분석에서 데이터를 가져 오는 앱이 garb입니다. 데이터로 숫자를 계산하면 앱에서 Report 모델을 채우고 보고서를 사용자에게 표시합니다.

지금 당장은 우려를 사용하여 Google 애널리틱스 로직을 분리하려고합니다. 내 우려 폴더에서 데이터를 가져 오는 책임이있는 GoogleAnalytics 모듈이 있습니다. Report 모델에는 GoogleAnalytics 모듈이 포함되어 있습니다. Report 모델에서 번호 계산이 수행되기 전에 데이터를 정리하고 다시 포맷해야합니다. 이것은 GoogleAnalytics 모듈 또는 도우미의 책임일까요?

제 3 자 서비스를 포함하는 것이 더 나은 방법이 있습니까?

답변

1

Google 애널리틱스에서 데이터를 가져 오는 책임은 무엇이든 다시 포맷해야합니다. 나머지 앱 중 Google 애널리틱스가 데이터를 반환하는 방식을 알아야하는 것은 아닙니다. 모듈은이를 합리적인 표준 인터페이스로 변환하고 다른 모든 인터페이스를 숨겨야합니다.

또한이 자료를 모듈이 아닌 서비스 객체에 넣는 것이 좋습니다. 모듈을 포함시키는 것은 엉망이됩니다. 왜냐하면 여러분이 객체에서 메소드를 호출 할 때 그 메소드가 어디에 정의되어 있는지 모르기 때문입니다. 다른 모델에도 똑같은 모듈을 포함 시켰을 때 나는이 패턴을 사용할 것입니다.

class GoogleAnalyticsDataFetcher 

    attr_accessor :data 

    def new ga_id 
    @ga_id = ga_id 
    end 

    def fetch 
    @data = do_some_stuff 
    end 

end 

을 한 다음 컨트롤러에서 하나를 호출하거나 Report 내부를 마무리 할 수 ​​:

서비스 객체 (사용자가 데이터를 가져 오는 데 사용할 필요가 PARAMS 내용에 따라)과 같을 것 모델 어딘가에. 그렇다면 GoogleAnalyticsDataFetcher.new(id).fetch으로 가면 무슨 일이 벌어지고 어디에 정의되어 있는지가 매우 분명합니다.

관련 문제