RailsアプリはRedisとどのように通信する必要がありますか?
Railsアプリを作成しているときに、別のデータストアを使用するとより簡単に解決できる問題が発生する可能性があります。たとえば、サイトの質問に回答するためにユーザーが獲得したポイント数でユーザーをランク付けするリーダーボードがあるとします。 Redisのソート済みセットを使用すると、多くの実装が自動的に行われます。素晴らしい!しかし、Redisと相互作用するコードはどこに配置しますか?
あなたのUser
モデルはRedisと通信できます:
class User < ActiveRecord::Base
def award_points(points)
Redis.current.zincrby("leaderboard", points, id)
end
end
しかし今あなたのUser
モデルは、ユーザーを代表し、Redisと話し、および責任を負います。 リーダーボードの管理!これにより、User
理解しにくく、テストしにくく、それはあなたが望むものの反対です。
代わりに、RedisリクエストをRedisを使用しているものを表す新しいオブジェクトでラップすることができます 。たとえば、Leaderboard
を作成できます Redis通信をラップするクラス。しません ActiveRecord::Base
から継承 、ただし、app/models
に引き続き存在します ディレクトリ。これは次のようになります:
class Leaderboard
def award_points_to_user(user_id, points)
Redis.current.zincrby("leaderboard", points, user_id)
end
end
class User < ActiveRecord::Base
def award_points(leaderboard, points)
leaderboard.award_points_to_user(id, points)
end
end
これらのクラスは両方ともapp/models
に存在できます 、ただし、ActiveRecordモデルを追加のロジックで汚染することはありません。 Leaderboard
クラスはRedisとの通信を管理するため、User
クラスは、リーダーボードがどのように実装されているかを気にする必要がなくなりました。これにより、テストも簡単になります。
新しい責任のために新しいクラスを作成し、app/models
を作成することで、多くのことを得ることができます。 それらを保持するのに最適な場所です。コードを簡単に操作できるようにしながら、機能の実装のために別のサービスに頼ることができるというメリットがあります。
ActiveRecordモデル、コントローラー、またはビューから直接呼び出されるネットワークサービス通信について考えてみてください。そのコードを非ActiveRecordデータモデルに移動してみて、コードが理解しやすくなり、操作し、テストしやすくなるかどうかを確認してください。次に、私にメールを送って、それがどのように進んだかを知らせてください!
覚えておいてください:
コンピュータサイエンスのすべての問題は、別のレベルの間接参照によって解決できます。
—デビッド・ウィーラー
…間接参照の層が多すぎるという問題を除いて。
—ケヴリン・ヘニー
-
Windows 10でアプリをミュートする方法
Windows 10 では、すべてのオーディオ デバイスと、インストールした多くのアプリが優れたオーディオ コントロールを備えています。Windows 10 でアプリをミュートする方法を知りたいですか?次に、この記事が役に立ちます。ヘッドフォンのレベルを個別に選択できます。接続すると、Windows 10 によって自動的に変更されます。同様に、ボリューム ミキサーを使用して特定のアプリの音量を調整することもできます。 Windows 10 でアプリをミュートする方法 PCまたはラップトップで同時に実行されている多くのアプリの音量を調整する簡単な手法があります.音量ミキサーは、アプリごと
-
SwiftUI で GameKit Leaderboard を実装する方法
この記事では、GameCenter の Leaderboard をアプリ内に実装する理由と方法について説明します。 GameCenter が大幅な復活を遂げている理由 スコアボードなしで iPhone ゲームを作成することもできますが、リーダーボードを使用すると、世界中の人々が互いに競争しているように、ゲームの競争力を高めることができます。 独自のバックエンドを作成して管理する代わりに、GameCenter Leaderboard を使用すると、トラフィックに合わせて無限にスケーリングしたり、認証のためにログイン ページ全体をスキップしたり、画像、名前、同じゲームをプレイしている友達を