2012-02-20 2 views
6

JSON 데이터 (자동 완성 결과, 캘린더 이벤트, 작업, 동적 폼 조작 등)에 크게 의존하는 새로운 레일스 3.2 회사 관리 앱을 개발 중입니다. 백엔드 시스템은 이미 상당히 견고하여 UI 부분에 투자하고 있으며 Google에서 제공하는 것과 같은 다른 '팻 클라이언트'앱의 동작을 미러링하여 웹 애플리케이션과 같은 방식으로 만들고 싶습니다. 이 목적을 달성하기 위해 가장 좋은 디자인 패턴은 무엇입니까? Backbone.js와 같은 MVC JS 프레임 워크를 사용하여 데이터 조작의 좋은 부분을 UI에 위임하고 JSON API와 인터페이스하거나 원격 JS로 작업합니다 (즉, js.erb 템플릿)을 사용하면 Ruby 코드를 더 많이 사용할 수 있습니까?레일스 용 디자인 패턴 3.2 JS 무거운 앱

일부보기에서는 이미 매우 조잡한 Backbone.js를 사용하고 있지만 이전 접근 방식은 JS가 코드 작성이 더 어려워 많은 개발자 자원을 사용하는 것처럼 보였습니다. UI에서 일부 모델 코드를 미러링하는 추가 부담이 있습니다. 최종 사용자에게는 훨씬 더 반응 적입니다. 후자의 접근법은 응답 시간을 희생시키면서보다 희소 한 View 코드를 허용하며, 모두 모두 괜찮은 느낌을주지는 않지만, 확실히 더 빨리 개발할 수 있고 유연합니다.

우리는 JS/Coffeescript/Backbone.js에서 많은 Rails 경험이 있고 소량의 팀이 아니므로 만나기에 마감 기한이 있습니다. 어떤 접근 방식을 선택 하시겠습니까? 필자가이 문제를 놓치고있는 이유는 우리 회사가 코드의 품질과 현대적인 디자인 패턴에 자부심을 갖고 있기 때문에 원격지 JS를 사용하는 것이 ' 나쁜 지름길 '이니, 정말 당신들의 의견을 고맙게 생각합니다. 어쩌면 나는 편파적일지도 모른다.

+0

일반적으로 다음과 같은 네임 스페이스 계층 구조를 사용

@module 'MyProject', -> @module 'Model', -> [...] 

: 또한 도우미를 겹쳐 수

m = new MyProject.Model.MyModel 

: 그래서 당신은 루트 네임 스페이스에서 같은 모델 (document)에 액세스 할 수 있습니다 말하자면, 마감 기한이 끝나면 팀이 가장 편한 것을 고수해야합니다. 이제는 실험 할 시간이 아닙니다. 그러나 Rails를 사용하여 JSON API를 만드는 것이 그리 어렵지 않다는 것을 이미 알고있을 것입니다. 팀이 자바 스크립트보다 좋지 않은 경우 백본에서 속도를 높이는 데 다소 시간이 걸릴 수 있습니다.하지만 일단 그렇게하면 몇 가지 훌륭한 작업을 수행 할 수 있습니다. 시도하고있는 내용에 대한 구체적인 사용 사례를 제공하고 더 많은 사람들이 조언을 받아 소리를 낼 수 있도록해야합니다. – PhillipKregg

답변

2

글쎄, 나는 당신을 결정할 수 없다. 그것은 마감 시간이 얼마나 가까운가에 달렸지 만, 나는 personnaly가 Backbone.js 접근법을 선호한다.

정적 인 캐시 가능 JS 스크립트와 가벼운 AJAX 요청 (JSON 만)이 있다고 말할 수있는 반면, 다른 접근 방식을 사용하면 더 무겁고 캐시 할 수없는 스크립트를 다운로드 할 것이라고 말할 수 있습니다.

하지만 무엇보다도 백본 방식이 코드를 체계적이고 유지 보수하기에 가장 좋은 방법이라고 생각합니다.

  1. Coffeescript는 매우 빠르고 배우기 쉽습니다. JS 구문을 단순화하고 재미있게 만듭니다. 그럴만 한 가치가있어. 3 천만 명에게 배웠다.

  2. Backbone.js는 배우기가 아주 멋지고 빠릅니다. 이 방법을 사용하면 이벤트에 의존 할 수 있으며, 이는 우리가 할 수있는 것보다 훨씬 깨끗합니다.

    애셋 파이프 라인 덕분에 뷰/모델/라우터 클래스를 별도의 파일로 분리 할 수 ​​있습니다. 매우 훌륭합니다.

    덕분에 당신이 그와 같은 매우 깨끗한 구문을 사용하여 백본 오브젝트를 작성할 수 있습니다 커피 스크립트하기 : 내가 네임 스페이스에 내 개체를 구성하는 내 프로젝트에 약간의 @module 도우미를 추가로

    class @MyView extends Backbone.View 
        events: 
        'click obj': 'handler' 
        [...] 
    

    합니다.

그러나 좋은 파일 구성을 찾으려면 시간이 필요합니다.

gem rails-backbone으로 시작하고 일부 발전기는 레일과 유사하게 만들 수 있습니다. 나는 그것을 personnaly 싫어하지만 나는 그것이 좋은 시작이라고 생각합니다. 그것은 레일에 적용된 Backbone.sync 기능을 포함합니다.

편집 여기

@module 도우미에 대한 몇 가지 세부 사항. 내 클래스 파일에서

@module = (names, fn) -> 
    names = names.split '.' if typeof names is 'string' 
    space = @[names.shift()] ||= {} 
    space.module ||= @module 
    if names.length 
    space.module names, fn 
    else 
    fn.call space 

:

@module 'MyProject.Model', -> 
    class @MyModel extends Backbone.Model 
    [...] 

(@this.의 커피 스크립트 바로 가기 있음을 유의하십시오.)

을 나는 (require_self하는 것을 잊지 마세요) application.js.coffee이 포함 도우미는 필요한 경우 MyProjectMyProject.Model 객체를 만들고 (null 인 경우) this이 지정된 함수를 MyProject.Model에 바인딩하여 실행합니다. 내가

MyProject 
    Model 
    View 
    Router 
    Runtime (to store all runtimes objects and don't pollute the root namespace, easier for debug) 
+0

안녕하세요, Artimuz, 귀하의 의견에 감사드립니다. 백본 방식이 더 낫다는 것에 나는 동의합니다. Backbone 및 원격 JS로 애플리케이션의 일부를 시도한 고객과의 빠른 실험을 수행했습니다 (해를 끼치 지 않음). 백본 구현은 구성하기가 어렵지만 분명히 빠릅니다. 이 @module 도우미를 어떻게 사용합니까? – marcelowiermann

+0

@marcelow 안녕하세요. 나는 귀에 행복하다! 내 편집을보고, 나의'@ module'에 대해 약간의 설명을 덧붙인다. 나는 곧 당신이 백본 (Backbone)을 쉽게 사용할 수 있기를 희망하며 좋은 파일 조직을 발견하게 될 것입니다. –