2012-04-06 4 views
0

GAE에 작은 애플리케이션을 작성하려고합니다. 나는 데이터를 처리하기 위해 Java와 네이티브 DatastoreService를 사용하고있다. (Objectify는 가능성은 있지만 많이 변하지 않는다.)GAE의 데이터 액세스

저는 객체 지향 디자인을 유지하고 데이터 저장소를 효율적이고 트랜잭션 방식으로 사용하는 방법을 파악하는 데 어려움을 겪고 있습니다.

저는 게임을 만들어서 방, 괴물, 선수 등을 수업으로 만들고 있습니다. 플레이어가 움직이거나 공격하는 것과 같은 행동을 할 때 데이터의 일부를로드하고 수정하고 하나의 tx에 저장해야하므로 이상이 발생하지 않습니다.

호출 계층 구조 내에서 DatastoreService 인스턴스를 통과해야합니까 아니면 각 클래스에서 DatastoreService를 가져 오는 것이 좋습니까? 데이터 저장소는 트랜잭션을 시작한 후 일관성있는 뷰를 보장하고, 내가 얻을 때 Entity를 넣을 수 있기 때문에 여전히 tx에 있기 때문에 null이됩니다. 어떻게 처리해야합니까?

고맙습니다. 이도.

답변

1

먼저 Objectify를주의 깊게 살펴 봐야한다고 생각합니다. 트랜잭션과 임베드 오브젝트를 (예를 들어) 훨씬 쉽게 만듭니다.

둘째, Objective 개체 (또는 DatastoreService 개체)를 얻기 위해 Guice와 같은 종속성 주입 프레임 워크를 사용하는 것이 중요합니다. 결국 코드를 ​​상당히 깨끗하게 만들뿐만 아니라 유용한 기술을 가르칩니다. 미래를위한

의존성 주입을 사용하지 않거나 그렇게하더라도 코드를 데이터 자체와 다른 클래스로 제어하는 ​​것이 가장 좋습니다. 이것이 항상 최고의 전략은 아니지만, 나는 그것이 보통 생각합니다. 예를 들어 몬스터와 플레이어를 동시에 업데이트하고 저장하려는 경우 몬스터 나 플레이어에 코드를 넣을 위치는 어디입니까? 때로는 이런 종류의 일을하기 위해 별도의 데이터 액세스 개체를 사용하는 것이 가장 쉽다는 것을 알게되거나 단지 약간의 작업 만하는 경우 서블릿에서 수행하는 것이 좋습니다.

Objectify 샘플 앱은 Guice를 사용하지만 DAO는 사용하지 않습니다.

+0

안녕하세요, 답변 해 주셔서 감사합니다. 샘플 앱을 살펴 보겠습니다. 샘플 앱을 사용하면 멋질 것입니다. 물론 내 데이터 액세스 코드가 내 개체 안에 없습니다. 문제는 성능뿐만 아니라 걱정의 분리를 유지하기 위해 어디에 둘 것인지입니다. –