【问题标题】:Suggestion On Integrating Google Guice In Objectify Service Classes关于在 Objectify 服务类中集成 Google Guice 的建议
【发布时间】:2013-09-14 12:04:38
【问题描述】:

我正在考虑将 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 模块在我的情况下可以很好地处理依赖关系,谁能解释一下这在我的实现中是如何应用的?

【问题讨论】:

    标签: java google-app-engine guice objectify


    【解决方案1】:

    首先与 Objectify 相关的您是否看过Objectify Best practices。看起来他们可能会提出更直接的方法。

    不要使用 ObjectifyService 静态 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。它与提供的代码的关系并不明显,但我会建议几件事:

    • 通常,如果您注入实体类,您会给自己造成 DI 头痛,因此如果您确实必须注入类,您很可能希望避免这样做或使用实体中的工厂。
    • 至于数据控制器或 UserService(不是您当前的形式)等。它们通常会成为合理的候选者,将依赖项注入或用作注入的依赖项。

    【讨论】:

    • 是的,我遵循了客观化的最佳实践并根据我的需要实现,除了我用抽象类封装的实体注册部分,但仍然有可能在查询其他一些实体时未注册实体部分,将解决这个问题。谢谢!
    猜你喜欢
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多