是否有3层Controller,BO和DAO标准方式?为什么不只是控制器和DAO?

时间:2015-06-10 07:24:10

标签: java web-services rest java-ee architecture

在REST Web Service中,有3层 - Controller,BO(Service)和DAO是标准方式吗?为什么我们需要一个单独的BO层。为什么不在Controller类中编写我们的逻辑,调用不同的DAO类?所以,基本上我想要所有JAX-RS注释,如 -

@GET

@Path("/{parameter}")

@Produces("application/json")

在Controller接口中

,在Controller实现中只有root @Path。我不想不必要地拥有另一层BO。我想通过从其他Controller类调用Controller类本身来重用代码。我知道这些类是注释的,但是JAX-RS运行时可以适当地处理它。我是否仍然可以实例化那些Controller类并从其他控制器调用不同的方法???

2 个答案:

答案 0 :(得分:1)

我认为有两个主要原因:

  1. 关注点分离
  2. 可重用性:许多控制器可能需要使用相同的业务逻辑

答案 1 :(得分:0)

要将业务逻辑与控制器分开,因为DAO只与数据库交互,因此理想情况下它不包含任何业务逻辑。

您可以考虑多个模块使用的业务逻辑,例如controllerrest serviceSOAP service等。

示例: 假设您拥有add功能,并希望它可以在GUI以及SOAP service中使用。如果您在控制器中编写业务逻辑(验证,转换,计算等),那么您还必须为SOAP服务重写它。这将导致冗余,您将无法重复使用代码。

有关更新的问题:

在开发的开始阶段,可以将事物包含在一个地方,但随着时间的推移,代码变得如此之大,以至于管理代码会产生问题。在您的情况下,请考虑在另一个控制器中使用一个控制器。将来它可能会在控制器之间产生循环依赖。

示例: ControllerA需要ControllerB中存在的功能。 ControllerB需要ControllerA中存在的功能。所以在这种情况下两者都相互依赖。因此很难理解代码流。而且在注射时,这将产生问题。