작은 응용 프로그램에서 작업하는 동안 코드 디자인 문제가 발생했습니다. (나는 초급반이다.)컨트롤러에 너무 많은 논리가 있고 서로를 호출하는 모델
특징의 측면에서 각각 2 석을 가진 테이블 목록이있다. 두 명의 플레이어가 같은 테이블에 앉으면 게임이 시작됩니다.
이 부분에서는 테이블 컨트롤러, 테이블 모델 및 게임 상태 모델이 있습니다 (게임 상태 만들기 란 게임이 시작되었음을 의미합니다).
사용자가 앉으면 테이블 컨트롤러에서 처리하는 ajax 요청을 실행합니다.이 요청은 테이블 모델에서 적절한 메소드를 호출하여 호출합니다. 테이블 모델이 양쪽 시트가 채워진 것을 발견하면 게임이 시작됩니다. 까다로운 부분입니다.
테이블 모델의 게임 상태 모델을 갖고 싶지 않습니다. 게임 상태 모델을 호출하는 것이 나중에 어려워 질 수 있습니다. 그래서 테이블 모델을 리턴하게 만들었습니다 : success => 테이블 컨트롤러에 true hash. 게임 상태 모델을 호출할지 여부를 결정합니다.
그러나 그렇다면 Rails 3 Way에 따르면 컨트롤러에 논리를 넣고 있음을 알 수 있습니다.
내가 경험할 수있는 것보다 더 경험이 많은 사람이 내가 더 잘할 수 있는지 말해 줄 수 있습니까?
"사용자가 부분 연결을 끊으면 게임을 포기합니다."라는 문제가 있습니다. 현재 사용자는 테이블 컨트롤러를 가져 와서 앱이 계속 연결된 상태임을 알 수 있습니다. 그리고 그 부분을 처리하는 게임이 결점을내는 것은 어색하고 결합하는 것처럼 보입니다.
또한 자바 스크립트 코드를 사용하여 각 유형의 리소스에 대해 하나의 setInterval을 가져 와서 모듈화 된 상태로 유지하려고합니다. 그러나 결과적으로 매 간격마다 6-7 개의 AJAX 요청을 생성합니다. 그리고 그것은 비효율적 인 것처럼 보입니다.
고마워요! 이것은 멋지게 보이며, 실제로 일을 정리합니다. 하나의 후속 질문. 나는 채팅 메시지, 좌석 상태 및 다른 사용자가 시작한 모든 것을 확인하기 위해 폴링 (폴링과 풀링을 이해하지 못함)을 사용합니다. (juggernaut 같은 것을 아직 사용하지 않았습니다.) 컴퓨터 충돌, 브라우저 충돌 및 기타 이상한 상황에서 사용자 존재를 제거하기 위해 last_checked_in 업데이트를 수행해야했습니다. 내가 잘못하고 있니? – Max
채팅이있는 경우 폴링을 수행하는 유일한 방법은 setInterval을 사용하는 것입니다. [폴링] (http://en.wikipedia.org/wiki/Polling_ (computer_science))은 외부 소스 (데이터베이스)를 샘플링 할 때 사용됩니다. 컴퓨터/브라우저 충돌은 처리하기 어려운 문제입니다. Juggernaut는 응용 프로그램이 확장되면 확실히 갈 수있는 방법입니다. last_checked_in은 괜찮은 방법입니다. 15 초마다 사용자 입력이 필요하도록하는 게임 타이머가 있으면 응용 프로그램은 사용자가 실제로 있는지 여부를 감지 할 수 있습니다. 그래서 아니, 당신은 틀리지 않아. :) – vinceh