技术架构:服务层与否?

时间:2014-04-24 16:35:14

标签: java spring jdbc factory

我们有一个由少数应用程序组成的平台。

我们必须开发一个API,它必须将所有与数据库的交互分解。 在此API中,我们也将以XML格式提供数据库版本。 XML格式将仅由一个应用程序使用。

我们的应用程序是在经典架构中开发的:道服务层 - 表示层。

DAO图层将移至API中。那点没问题。 在许多应用中,服务层只是演示和演示之间的一个网关。没有特定业务代码的dao层。

所以我的问题是:

  • 我们应该为每个dao创建一个带有Service层的API吗?
  • 如果是,那么在应用程序中保留一个服务层,从API调用服务层?
  • 我们应该在API中创建一个管理工厂(数据库/ XML)的服务层,但是这意味着每个应用程序必须提供一个信息来选择要选择的dao(当只有一个应用程序有此需要时)?
  • 或者只是在数据库和数据库的不同包中创建所有dao API中的xml,将工厂保存在有需要的应用程序中,并在所有其他应用程序中调用dao(数据库)?

需要帮助! :p 我迷路了...

仅供参考,我们使用Spring 3.1.1使用Java 1.6。 DAO中的JDBC模板。 我们正在查看关于spring数据jdbc的信息来替换JDBC Template。 任何关于这一点的建议都可以理解^^ [没有Hibernate - JPA解决方案]

谢谢。


[编辑1]

换句话说,在应用程序中保留一个服务层&在API中是一种让我拥有抽象层的方法。如果我们必须修改数据库结构,如果我们也可以直接在API的服务层进行一些更改,也许我们不必编辑所有应用程序。

想象一下3种可能性:

  1. API中的服务层与工厂选择使用哪个dao(xml / database)
  2. API中的dao
  3. 用于数据库和API的API中的服务层API for XML中的特定层
  4. 您选择什么解决方案?

    [编辑2]

    创建一个独特的类来调用API有趣吗?就像在Facade设计模式中一样。

2 个答案:

答案 0 :(得分:0)

使用服务层来实现目的:通过使用每个服务提供的一个或多个DAO(以及管理事务,清理String和其他类似的东西)来提供真实世界的服务。

如果您(与经验更丰富的同事一起)认为您不需要此服务层,那么请不要将其放入您的架构中。但请确保创建您的体系结构的概念证明(这可能包含系统或部分功能的某种复杂功能的实现),因此您可以稍后评估它以证明您是否真的不需要这样的层(或如果你这样做。)

答案 1 :(得分:0)

我的理解是,您需要从表示层解耦和重用业务层,使用相同的业务实现来拥有多个客户端应用程序。

在这种情况下,您需要在API中实现服务层。一些优点:

  1. 您不需要为处理演示文稿的任何客户端应用程序重复服务实现。
  2. 您可以轻松地将数据库模型设计与业务分离。可以很容易地引入设计模式(DTO,Facade)和横切关注点。
  3. 与持有数据库实施细节的DAO相比,设计良好的服务层需要进行最少量的修改。
  4.   

    在此API中,我们也将以XML格式提供数据库版本。 XML格式将仅由一个应用程序使用。

    通过API提供此实现,如果需要,更多客户端应用程序将来可以使用它。

    Spring Remoting为这样的设计提供了出色的工具(RMI,HTTP调用程序等)

    我没有看到为DAO证明API的任何附加价值。