小さなアプリケーションで作業しているときにコード設計の問題が発生しました。 (私は初心者です)コントローラーに多すぎるロジックとモデルを呼び出すモデル
機能面では、それぞれ2席のテーブルのリストがあります。 2人のプレーヤーが同じテーブルに座ると、ゲームが始まります。
この部分では、テーブルコントローラ、テーブルモデル、およびゲーム状態モデルがあります(ゲーム状態を作成すると、ゲームが開始されたことを意味します)。
ユーザが座ったときにテーブルコントローラによって処理されるajaxリクエストを起動します。このリクエストはテーブルモデルで適切なメソッドを呼び出して呼び出されます。テーブルモデルが両方の座席を満たしていることがわかったら、ゲームが始まります。これは難しい部分です。
テーブルモデルのコールゲーム状態モデルを望みませんでした。なぜなら、ゲーム状態モデルを呼び出すことが後で難しくなる可能性があるため、頭がおかしくなり、トラッキングを追跡するからです。だから私はテーブルモデルを返すようにしました:成功=>真のハッシュテーブルコントローラ、ゲーム状態モデルを呼び出すかどうかを決定します。
しかし、私はコントローラにロジックを入れていることを認識しています。これは、Rails 3 Wayによれば、ノー・ノーです。
もっと経験が豊富な人が私に何ができるのか教えてもらえますか?
また、「ユーザーが一部を切断するとゲームが失われる」という問題もあります。現在のところ、ユーザはテーブルコントローラをプルして、自分のアプリにまだ接続されていることを知らせることができます。そして、その部分がゲームを失うことを扱うことは、厄介でカップリングしているように見えます。
さらに、私はJavaScriptのコードを、リソースの種類ごとに1つのsetIntervalプルを行い、モジュール化したものを維持しようとしています。しかし、結果として、私は6〜7種類のAJAXリクエストを毎回作成しています。そしてそれは非効率的だと思われる。
ありがとう!これはすごく見えて、本当に物事をクリアします。しかし、1つのフォローアップの質問。私は、チャットメッセージ、着席状況、および他のユーザーによって開始されたすべてのものをチェックするためにポーリング(投票対プルを理解したことはない)を使用します。 (まだjuggernautのようなものを使用していない)last_checked_inアップデートを実行することは、コンピュータのクラッシュ、ブラウザのクラッシュ、およびその他の奇妙な状態でのユーザーの存在を取り除くために必要だったようだ。私はそれを間違っているのですか? – Max
チャットがあれば、それを調べる唯一の方法はポーリング(つまりsetIntervalを使用)です。 [ポーリング](http://en.wikipedia.org/wiki/Polling_(computer_science))は、外部ソース(データベース)をサンプリングするときです。コンピュータ/ブラウザクラッシュは対処するのが難しい問題です。 Juggernautは、アプリケーションが拡張されると確かに行く方法です。あなたのlast_checked_inはまともな方法です。 15秒ごとにユーザー入力が必要なゲームタイマーがある場合、アプリケーションはユーザーがまだ物理的に存在するかどうかを検出できます。そうではありません、あなたは間違っていません。 :) – vinceh