2012-11-21 2 views
4

breeze.js의 문서 (훌륭한 문서)를 읽었지만 EntityManager에 대한 의문점이 있습니다.breezejs의 EntityManager는 어떻게 작동합니까?

가정하자 나는이 다음과 같은 공장 방법 : 전화

em1.saveChanges(); 

이 너무 변경 사항을 저장 em2 않는 경우

em1 = createManager(); 
em2 = createManager(); 

:

var createManager = function() { 
     return new breeze.EntityManager({ 
      serviceName: serviceName, 
      metadataStore: store 
     }); 
    }; 

가 그럼 난 두의 EntityManager의 인스턴스를 정의?

em1em2은 동일한 캐시를 공유합니까?

그렇지 않으면 싱글 톤 EntityManager를 만들어야합니까? 내 프로젝트에서 여러 장소에서 EntityManager에 액세스하고 엔티티를 교환하므로 가장 적합한 (또는 올바른) 아키텍처가 무엇인지 잘 모르겠습니다.

답변

7

저는 엔티티 관리자가 클라이언트에서 자체 데이터 컨텍스트로 작동한다고 생각합니다. em1 및 em2를 만들면 서로 다른 두 개의 관리자가 만들어 지므로 서로 독립적으로 저장됩니다. 동일한 엔티티 관리자를 여러 장소에서 참조하려는 경우 (이는 장점 중 하나임) 자바 스크립트 모듈 패턴을 사용하여 생성 한 인스턴스를 참조 할 수 있습니다.

제가 선호하는 기술은 datacontext라는 모듈을 만드는 것입니다. 엔티티 관리자와 주위의 바람이 원하는 다른 사용자 지정 기능을 소유하고 있습니다. 다른 모든 모듈은이 datacontext를 참조하고 데이터를 요청합니다. datacontext는 모듈의 나머지 부분에서 breeze를 숨 깁니다. 그 유일한 방법은 아니지만 좋은 분리 패턴을 따르기 때문에 나는 그것을 좋아한다.

희망이 도움이됩니다.

+0

존 감사합니다! 나는 너의 충고를 따를 것이다. 당신이 말한대로, "라비 올리를 분리하라"! –

+3

당신이 맞습니다, 존. 두 관리자는 독립적이며 자체 캐시를 가지고 있습니다. 그들이 공유하는 것은 (a) 동일한 서비스에 대한 대화이며 (b) 동일한 메타 데이터 저장소를 공유하는 것입니다. 저장소를 공유한다는 것은 메타 데이터에 대해 서버를 한 번만 방문한다는 것을 의미합니다. 별도의 관리자는 변경 사항을 분리 할 때 유용합니다 (예 : em1에서 고객의 "샌드 박스"편집). 그 변경 사항은 em2의 엔티티에 바인드 된 UI에는 표시되지 않습니다. 그것은 또 다른 날을위한 주제입니다. – Ward

+2

@BernardoPacheco - 나는 당신의 의도를 간과했다. 존의 제안은 좋은 것입니다. 많은 앱 (아마도 여러분의 앱)은 하나의 관리자 만 필요합니다. 모든 ViewModel이 모듈 패턴을 사용하여 찾을 수있는 관리자를 지정하십시오. 더 나아가 John이 "datacontext"모듈에 해당 관리자를 제안하고 캡슐화하고 필요로하는 다른 모듈에서 해당 모듈을 사용할 수 있도록하십시오. John은 Pluralsight 과정에서 모듈성의 좋은 예를 보여줍니다. – Ward

관련 문제