是否有经济高效的实体设计教程?
如果我做一个小样本并说我想存储用户和组。这些组有一个用户列表。如果任何用户想加入这个组,我必须检查这个组是否存在并且用户不是该组的一部分。
我的问题不是如何做到这一点。问题在于良好的实体设计或良好的对象化使用。
这是一些缩短的示例代码,我将如何做到这一点:
用户.java
@Entity
@Cache
@Embed
public class User {
@Id Long id;
@Index String name;
String passwordHash;
}
组.java
@Entity
@Cache
public class Group {
@Id Long id;
@Index Long groupAdministratorUserId;
@Index String name;
List<User> users = new ArrayList<User>();
@Index Boolean isPublic;
}
使用
if (!app.authenticate(getRequest(), getResponse()))
{
// Not authenticated
setStatus(Status.CLIENT_ERROR_UNAUTHORIZED);
}
else
{
Group newGroup = ofy().load().type(Group.class).id(Long.parseLong(id)).now(); // is it correct that the embedded data is already loaded?
// following check and insert is only for illustration!
newGroup.getUsers().contains(connectedUser);
newGroup.getUsers().add(connectedUser);
ofy().save().entity(newGroup).now();
}
我的“开销”(身份验证)
public class MyVerifier extends LocalVerifier {
private User fetched;
public User getFetched() {
return fetched;
}
@Override
public char[] getLocalSecret(String identifier) {
// this is behind search... and another list()
// User fetched = ofy().load().type(User.class).filter("name", userName).first().now();
fetched = User.searchByExactName(identifier);
if (fetched != null)
{
return fetched.getPasswordHash().toCharArray();
}
return null;
}
}
PS我知道谷歌的页面:https ://code.google.com/p/objectify-appengine/wiki/BestPractices
但这不是我要寻找的