私はウェブサイトを構築しており、ガイド映画などのいくつかの異なるセクションがあります。それらにはすべて「いいね」ボタンが必要です。
したがって、いいねボタンが押された場合は、DB 内のいいねの数を増やしたいと考えています。
UserGuides
などのさまざまな DB モデルMovies
があり、一般的な AJAX 関数が必要です。
これの意味は:
ユーザーがガイドにいて、「いいね」を押した場合、ユーザーガイドなどでいいねの整数を更新したい.
こんな感じで達成しました。
AJAX の投稿では、たとえば{obj: "UserGuides"}
UserGuide を更新する場合などに、更新する文字列としてクラスを定義しました。
これで、すべてのリクエストを処理する 1 つの AJAX ハンドラーができました。
public static Result like() throws UnknownHostException, MongoException, DbAuthException {
Map<String, String[]> map = request().body().asFormUrlEncoded();
String username = map.get("username")[0];
String title = map.get("title")[0];
String obj = map.get("obj")[0];
if (username.equals("") || title.equals("") || obj.equals("")) {
return badRequest();
}
if (obj.equals("UserGuides")) {
ajaxLike(UserGuides.class, new UserGuides(), username, title);
return ok();
}
return badRequest();
したがって、「クラス名」が一致するかどうかを確認し、一致する場合は汎用関数を呼び出します。
if (obj.equals("UserGuides")) {
ajaxLike(UserGuides.class, new UserGuides(), username, title);
}
今、私は明らかに、すべてのクラスでこれを行う必要があります。しかし、利点は、必要なハンドラーが 1 つだけになることです。
今、私の一般的な関数は次のようになります
private static <T> void ajaxLike(Class<T> objClass, T obj, String username,
String title) throws UnknownHostException, MongoException,
DbAuthException {
Datastore ds = getDatabase();
Query<T> q = ds.createQuery(objClass).field("title").equal(title);
UpdateOperations<T> submitUpdate = ds.createUpdateOperations(objClass)
.inc("likes");
ds.update(q, submitUpdate);
ds.ensureIndexes();
}
それはうまく動作しますが、これは良い習慣ですか?
潜在的なエラーはありますか?
より良いアプローチはありますか?