1

我正在建立一个网站,我有几个不同的部分,如指南电影等。它们都应该有一个类似的按钮。

因此,如果按下赞按钮,我想增加数据库中的赞数。

我有不同的数据库模型,比如UserGuidesMovies,我想要一个通用的 AJAX 函数。

这表示:

如果用户在指南上并且他按“喜欢”我想更新 UserGuide 等上的类似整数。

我是这样实现的。

在 AJAX 帖子中,我将类定义为我想要更新的字符串,例如,{obj: "UserGuides"}如果我想要更新 UserGuide。

现在我有一个 AJAX 处理程序来处理我的所有请求。

公共静态结果 like() 抛出 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);
            }

现在我显然必须为我的所有课程都这样做。但好处是我只需要一个处理程序。

现在我的通用函数看起来像这样

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();

    }
  • 它工作正常atm,但这是一个好习惯吗?

  • 您是否看到任何潜在的错误?

  • 有更好的方法吗?

4

1 回答 1

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

如果地图没有用户名,您将在那里获得一个 NPE。其他地方也一样..

于 2012-09-07T18:22:56.547 回答