Playframework 在play框架中遵循服务和dao层方法将减少play';它的主要特点是什么?
我正在使用PlayFramework2.4.x开发一个web应用程序,在controller之后,我遵循了服务层和DAO层的方法。这种方法是否会对play的主要功能(如异步和线程池等)产生任何问题?我遇到了许多从控制器本身调用db连接的示例应用程序Playframework 在play框架中遵循服务和dao层方法将减少play';它的主要特点是什么?,playframework,playframework-2.4,Playframework,Playframework 2.4,我正在使用PlayFramework2.4.x开发一个web应用程序,在controller之后,我遵循了服务层和DAO层的方法。这种方法是否会对play的主要功能(如异步和线程池等)产生任何问题?我遇到了许多从控制器本身调用db连接的示例应用程序 我是否可以使用上述方法?我使用DAO等,没有问题。确保你使用的是期货 例如,不要使用像List findAll()这样的DAO方法,而是使用F.Promise findAll() 如果您使用的是不同的线程池,那么您需要为DAO和服务提供必要的exec
我是否可以使用上述方法?我使用DAO等,没有问题。确保你使用的是期货 例如,不要使用像
List findAll()
这样的DAO方法,而是使用F.Promise findAll()
如果您使用的是不同的线程池,那么您需要为DAO和服务提供必要的executor服务——在这种情况下,理想情况下,您应该为executor服务注入一个供应商。默认实现就是
public class MyExecutionProvider implements Supplier<ExecutionContext> {
public ExecutionContext get() {
return HttpExecution.defaultContext();
}
}
公共类MyExecutionProvider实现供应商{
publicExecutionContext get(){
返回HttpExecution.defaultContext();
}
}
为DI框架注册了必要的绑定
由此产生的DAO看起来像
@Singleton
public class FooDao {
private final Supplier<ExecutionContext> ec;
@Inject
public FooDao(final Supplier<ExecutionContext> ec) {
this.ec = ec;
}
public F.Promise<List<Foo>> findAll() {
return F.Promise.promise(() -> // some database call,
ec.get());
}
}
@Singleton
公共类食物{
私人最终供应商ec;
@注入
公共FooDao(最终供应商ec){
this.ec=ec;
}
公共F.承诺芬德尔(){
返回F.Promise.Promise(()->//某个数据库调用,
ec.get());
}
}
然后,使用此DAO的控制器可以使用典型的异步方法
public class FooController extends Controller {
private final FooDao fooDao;
@Inject
public FooController(final FooDao fooDao) {
this.fooDao = fooDao;
}
public F.Promise<Result> getAll() {
return fooDao.findAll()
.map(Json::toJson)
.(Results::ok)
}
}
公共类FooController扩展控制器{
私人最终食物岛食物岛;
@注入
公共食物控制员(最终食物道食物道){
this.fooDao=fooDao;
}
公共F.Promise getAll(){
返回fooDao.findAll()
.map(Json::toJson)
(结果:ok)
}
}
根据需要调整Scala、接口使用、首选体系结构等。我使用您的方法处理服务层和DAO,没有任何问题。