야구 시즌을 준비하세요, ScoreMore 야구 는 최근 모든 주요 모바일 플랫폼에 앱을 출시하여 큰 성공을 거두었습니다. 이 앱의 주요 차별화 요소 중 하나는 다음과 같습니다. 카우치베이스 에서 논의된 카우치베이스 모바일 블로그를 통한 ScoreMore. 이제 이 블로그에서 앱이 객체 매퍼를 설계하고 뷰를 가져오는 방법을 살펴보겠습니다.
ScoreMore의 경우 객체 관계 맵의 설계는 다음에 대한 특정 속성을 유지하는 것입니다. "type" 의 종류를 식별하기 위해 "object" 문서입니다. 야구에서 팀은 다양한 역할을 맡은 멤버로 구성됩니다. 아래 예시에서는 "유형":"코치" 는 게임 중 코치에게 필요한 모든 정보가 담긴 문서입니다. 다른 역할은 각각의 "type"
1 2 3 4 5 6 7 |
1: { 2: "이메일": "demo@example.com", 3: "해시": "da5ce4f993719a61d531963e6242f4cb3091a497ed448c88dbn83m015", 4: "salt": "Q29iamVjdCBJbnQ4QXJyYXlf", 5: "type": "코치" 6: } |
참고: 해시 및 솔트는 비밀번호 저장용이며, _id 및 _rev는 Couchbase에서 자동으로 생성되므로 표시되지 않습니다. 사람이 읽을 수 있는 _id 버전은 향후 예제에서 "coach_1"과 같이 사용될 것입니다.
일부 문서에서는 구조의 최하위 노드를 소유 문서에서 배열로 롤업할 수 있습니다. 대표적인 예가 연락처의 모든 주소를 배열로 롤업하는 것입니다. ScoreMore Baseball에서는 모든 타자의 "hit" 은 해당 기록이 발생한 게임의 배열로 롤업됩니다. 마찬가지로 팀의 경우 각 시즌의 승패 기록이 팀에 대한 배열로 롤업됩니다. 이렇게 하면 속성 간의 구분과 관계가 명확하게 정의됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
1: { 2: "coachid": "coach_1", 3: "leagueid": "league_1", 4: "name": "드래곤", 5: "nameabbr": "DRG", 6: "record": [ 7: { 8: "손실": 16, 9: "ties": 2, 10: "wins": 24, 11: "yearid": 2014 12: }, 13: { 14: "손실": 3, 15: "ties": 0, 16: "wins": 7, 17: "yearid": 2015 18: } 19: ], 20: "type": "team" 21: } |
스코어 모어 베이스볼 팀은 또한 야구 경기 결과를 조회수, 여기서 각 보기는 하나의 문서만 반환합니다. "type". 보기를 사용하면 첫 번째 검사는 "if절" 문으로 특정 "type"에 대한 수표로 지정하거나 "type" 또는 해당 문서 유형에 고유한 필드와 비교합니다. 아래 예는 플레이어가 지금까지 수행한 모든 타격의 위치를 보여주는 스프레이 차트 보기입니다.
아래 코드는 먼저 문서(이 경우 게임)에 홈 팀 또는 원정 팀에 대한 히트 배열이 포함되어 있는지 확인하면서 동기화 게이트웨이에서 생성된 문서는 생략합니다. 그런 다음 모든 히트를 반복하고 플레이어의 검색 매개변수( 'playerid')로 지정된 시즌( 'yearid') 히트와 일치하면 'hit' 가 결과 집합에 추가됩니다. 각 히트 위치에는 'x' 그리고 'y' 세트뿐만 아니라 'type'를 눌러 타구가 플라이볼인지, 라인 드라이브인지, 그라운드볼인지를 표시합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
1: 함수 (doc, 메타) { 2: 만약(doc.홈팀배팅 && 메타.id.하위 문자열(0,5) != "_sync") { 3: 에 대한 (i=0; i < doc.홈팀배팅.길이; i++) { 4: emit([doc.홈팀배팅[i].playerid, doc.yearid], 5: [doc.홈팀배팅[i].x, doc.홈팀배팅[i].y, 6: doc.홈팀배팅[i].히트 유형]); 7: } 8: } 9: 만약(doc.원정 팀 전투 && 메타.id.하위 문자열(0,5) != "_sync") { 10: 에 대한 (i=0; i < doc.원정 팀 전투.길이; i++) { 11: emit([doc.원정 팀 전투[i].playerid, doc.yearid], 12: [doc.원정 팀 전투[i].x, doc.원정 팀 전투[i].y, 13: doc.원정 팀 전투[i].히트 유형]); 14: } 15: } 16: } |
예를 들어, 아래 스프레이 차트는 2015시즌 'player_1'의 모든 안타 위치를 (키=["player_1", 2015]) 빨간색 점은 플라이 볼, 흰색 점은 라인 드라이브, 노란색 점은 땅볼로 표시한 것입니다.
마지막으로 클라이언트 측에서는 스코어모어는 사용 가능한 다양한 문서 유형의 객체 표현인 자바스크립트 구조를 사용했습니다: 코치, 선수, 팀, 게임 등입니다. 이러한 각 객체 구조의 생성자는 뷰에서 반환된 결과를 가져와 객체 프로퍼티에 매핑합니다. 다른 방향(앱에서 데이터베이스에 저장)으로 이동하면 JSON.stringify를 사용하여 객체 구조에서 Couchbase가 POST 작업에 대해 예상하는 JSON 형식으로 변환합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
1: 함수 코치( id, 이메일, 해시, 소금, rev ) { 2: 이.coachID = id; 3: 이.이메일 = 이메일; 4: 이.해시 = 해시; 5: 이.소금 = 소금; 6: 이.rev = rev; 7: 이.일부 코치 함수 = 함수() {//Do Something 8: } 9: 이.toJSON = 함수() { 10: 반환 JSON.문자열화( { 11: _id: 이.coachID, 12: 이메일: 이.이메일, 13: 해시: 이.해시, 14: 소금: 이.소금, 15: _rev: 이.rev 16: }); 17: } 18: } |
방법 알아보기 카우치베이스 모바일 스코어모어 팀에게 야구장 밖의 야구장에서 그것을 치는 데 필요한 기술 도구를 제공했습니다. 카우치베이스의 커피: 카우치베이스 모바일 블로그를 통한 ScoreMore 지금 바로 사용 가능한 앱을 다운로드하세요. Android, iOS및 BlackBerry.
감사합니다