1

私はウェブサイトを構築しており、ガイド映画などのいくつかの異なるセクションがあります。それらにはすべて「いいね」ボタンが必要です。

したがって、いいねボタンが押された場合は、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();

    }
  • それはうまく動作しますが、これは良い習慣ですか?

  • 潜在的なエラーはありますか?

  • より良いアプローチはありますか?

4

1 に答える 1

1
String username = map.get("username")[0];

マップにユーザー名がない場合は、そこに NPE が表示されます。同様に他の場所も..

于 2012-09-07T18:22:56.547 に答える