我正在建立一个网站,我有几个不同的部分,如指南电影等。它们都应该有一个类似的按钮。
因此,如果按下赞按钮,我想增加数据库中的赞数。
我有不同的数据库模型,比如UserGuides
等Movies
,我想要一个通用的 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,但这是一个好习惯吗?
您是否看到任何潜在的错误?
有更好的方法吗?