在 play 框架中遵循 service 和 dao 层的方法会减少 play 的主要功能吗?
Posted
技术标签:
【中文标题】在 play 框架中遵循 service 和 dao 层的方法会减少 play 的主要功能吗?【英文标题】:Following service and dao layer approach in play framework will reduce play's main features? 【发布时间】:2016-03-09 11:28:00 【问题描述】:我正在使用 play framework 2.4.x 开发一个 Web 应用程序,并且我在控制器之后遵循了服务层和 DAO 层方法。这种方法是否会对 play 的主要功能(如异步和线程池等)产生任何问题?我遇到了很多从控制器本身调用数据库连接的示例应用程序。
我可以使用上述方法吗?
【问题讨论】:
我在服务层和 DAO 上使用你的方法没有问题。 【参考方案1】:我使用 DAO 等,没有问题。确保您使用的是期货!
例如,没有像 List<Foo> findAll()
这样的 DAO 方法 - 而是有 F.Promise<List<Foo>> findAll()
如果您使用不同的线程池,则需要为您的 DAO 和服务提供必要的执行器服务 - 在这种情况下,理想情况下,您应该为执行器服务注入一个供应商。默认实现就是
public class MyExecutionProvider implements Supplier<ExecutionContext>
public ExecutionContext get()
return 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());
使用此 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)
根据需要调整 Scala、接口的使用、首选架构等。
【讨论】:
以上是关于在 play 框架中遵循 service 和 dao 层的方法会减少 play 的主要功能吗?的主要内容,如果未能解决你的问题,请参考以下文章
来自 Google Play Services Fused Location Provider 的海拔高度