2012-08-03 3 views
2

사용자가 만든 약속에 대한 모델과보기가 있습니다. 직원이 '공식'약속을 수립 할 수있는 능력을 추가하고 있습니다. 이러한 약속에는 추가 옵션과 이벤트가 제공되지만 약속 모델에는 대부분 비슷한 특성 (날짜, 위치, 클라이언트)이 있습니다.백본의 여러보기간에 모델 공유

사용자 또는 직원이 약속을 생성했는지에 따라 모든 약속을 처리하고 매개 변수를 전달하여 기본 특성을 만드는 단일 모델을 갖고 싶습니다.

깨끗한 방법으로 약속을 구성 할 수 있습니까? 아니면 각 약속 유형마다 별도의 모델을 사용해야합니까?

답변

2

기존 Appointment 모델을 확장하고자하는 곳처럼 들립니다. 누가 그것을 작성하는지에 따라 다른 속성을 설정하지 마십시오.

1

나는 항상 클래스 다이어그램을 만드는 것이 내 개체와 관련하여해야 할 일을 식별하는 데 도움이된다는 것을 발견했습니다. 귀하의 경우, 내가 상상 한 것은 다양한 유형의 약속에 대한 하위 클래스가있는 주요 약속 클래스입니다.

Class diagram of appointment

이 사소한 보일 수도 있지만,이 통과하는 것은 상위 클래스에 배치 할 수 있습니다 수업 사이에 공통점을 식별하는 데 도움이됩니다, 그리고 당신은 쓰기 방지하는 데 도움이됩니다 다음은 간단한 UML의 클래스 다이어그램 표현이다 당신이 무언가를 놓친 경우에 대비하여 서브 클래스에 코드 묶음이 있습니다. 관심이 있으시면 아스타 커뮤니티 에디션을 찾아보십시오. 무료이며 매우 사용하기 쉽습니다.

1

여러 Appointment 모델의 문제점은 다른 모델이 동일한 컬렉션에 살 수 없으므로 (일부 모델 클래스에서 모델을 저장할 수 있기 때문에) 객체 지향 관점에서 보면 해당 부분이 깨끗하지 않다는 것입니다.).

제한된 양의 다른 약속 유형 만 사용하려는 경우 하나의 약속 모델을 사용하고 유형 특성을 추가하여 해당 모델 유형을 정의하는 것이 좋습니다. 그런 다음 initialize 방법을 사용하여 밑줄 _.defaults() 기능을 다음과 같이 사용하여 설정할 수 있습니다.

initialize: function(){ 
    var defaults; 

    switch(this.get("type"){ 
    case "USER": 
    defaults = {...}; 
    break; 
    case "STAFF": 
    defaults = {...}; 
    break; 
    case default: 
    defaults = {}; 
    }; 

    _.defaults(this.attributes, defaults); // this doesn't use the set functions and doesn't trigger any change events, neither does the default implementation in the Backbone.Model constructor 
} 
관련 문제