2016-06-14 4 views
2

저는 작업중인 응용 프로그램의 레일 엔진을 만들고 있습니다.레일 마운트 가능한 엔진 기본 응용 프로그램의 db 스키마 사용

기본적으로 응용 프로그램은 두 부분으로 나뉩니다

  1. 개인
  2. 공공

개인 사이트가 기본 응용 프로그램입니다 모든 관리 기능의 삶과 공개 사이트 (엔진) 비공개 앱에서 모델에 액세스 할 수 있어야합니다.

그것은 내게 반대로 들리지만 이것은 사양에서 요구하는 것입니다.

난 당신과 같은 주요 응용 프로그램에 엔진 모델에 액세스 할 일반적으로 알고

EngineName :: 모델

가 어떻게 엔진 내부의 주요 응용 프로그램에 액세스 할 것인가?

예 :

개인 사용자가 foo.bar/videos/new 새로운 비디오를 만들 갈 것입니다.

공개 사용자는 foo.bar/public/videos로 이동하여 동일한 동영상에 액세스 할 수 있습니다.

+0

기능을 개인 섹션과 공개 섹션으로 분리하는 것이 좋습니다.하지만이 상황에서 왜 엔진 패턴을 사용해야합니까? – declan

+1

좋은 질문 인 것 같지만 불필요한 장애물을 뛰어 넘는 것처럼 보입니다. "spec"을 만족시키는 것 외에도 이렇게하는 것으로 정말로 무엇을 성취하려고합니까? 프로그래머가 사양을 작성 했습니까? –

+0

일반적으로 다른 곳에서 다시 사용하기 때문에 기능을 엔진에 패키지화합니다. 엔진에 호스트 응용 프로그램의 코드 호출이 포함되어 있으면 재사용 할 수 없습니다. 이 경우 엔진으로 작성하려고하면 어떤 이점이 있는지 궁금합니다. 공개 및 비공개 사이에 명확한 선을 그려보고 싶다면 네임 스페이스 사용이 더 쉬울 수도 있습니다 (http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing) – declan

답변

1

방금 ​​테스트 한 결과 아무런 문제없이 엔진 내부의 호스트 응용 프로그램에서 코드를 참조 할 수있었습니다.

# In the main application 
# lib/test_library.rb 
TestLibrary 
    def self.say_something 
    "Hello! I am defined in the host application, not the Engine." 
    end 
end 

# Then, inside the engine 
# app/views/your_engine_name/some_resource/index.html.erb 
<%= TestLibrary.say_something %> 

엔진 템플릿에 잘 인쇄됩니다. 따라서 Video 모델을 사용하는 경우 컨트롤러가 응용 프로그램의 일부인 것과 마찬가지로 엔진 내부의 컨트롤러에서 참조 할 수 있습니다.

그 말로는 엔진 패턴이 요구 사항에 가장 잘 맞는지 잘 모르겠습니다.

이렇게 쓰는 것은 엔진 코드를 다른 곳에서 재사용 할 수 없다는 것을 의미합니다. 재사용이 신경 쓰지 않는다면 Engine은 아마도 필요한 것보다 더 중량이 큰 솔루션 일 것입니다. namespace을 사용하는 것이 좋습니다.

+0

고맙습니다. 그렇습니다. 네임 스페이스가 더 의미가 있다는 데 전적으로 동의하지만 팀 단장은이 방법으로 작업하기를 원하며 솔루션을 고맙게 생각합니다! – sump