我正在考虑将Google Guice集成到我的新项目中,该项目使用objectify进行数据存储操作
考虑以下用于客观化服务的基类
public abstract class OfyService<T> {
private Class<T> clazz;
public OfyService(Class<T> clazz) {
this.clazz = clazz;
}
... service methods
}
,以下是用户实体服务类
public final class UserService extends OfyService<User> {
static {
factory().register(User.class);
}
private UserService() {
super(User.class);
}
public static UserService getInstance() {
return UserServiceSingleton._userService;
}
private static class UserServiceSingleton {
public static final UserService _userService = new UserService();
}
}
我的所有实体服务类都将遵循这种模式。所以我正在检查Google Guice是否可以让它更好或当前的实施是否良好?
如果Guice模块可以很好地处理依赖关系,那么有人可以解释一下我在实现中究竟是如何应用的吗?
答案 0 :(得分:0)
首先与Objectify有关,你看了Objectify Best practices。看起来他们可能会提出更直接的方法。
不使用ObjectifyService static ofy()方法,而是使用自己的方法。
public class OfyService {
static {
factory().register(Thing.class);
factory().register(OtherThing.class);
...etc
}
public static Objectify ofy() {
return ObjectifyService.ofy();
}
public static ObjectifyFactory factory() {
return ObjectifyService.factory();
}
}
现在在您的代码中,导入您自己的静态ofy():
import static com.yourcode.OfyService.ofy;
Thing th = ofy().load().type(Thing).id(123L).now();
通过这种方式,实体注册仅在您需要之前进行一次。
关于启动性能,它取决于实例类和使用的实体的复杂性。通常即使在最低的实例类中,也可以在不到一秒的时间内实现大约20种实体类型。最有可能的情况是,如果您有数百种实体类型,则另一种方法可能是有意义的调查。
关于Guice。它与提供的代码有什么关系并不明显,但我会提出一些建议: