Web应用程序架构:RESTful和Web应该共享相同的DTO吗?

时间:2014-06-09 19:13:34

标签: java spring rest web-applications

我是Web应用程序开发的新手,旨在设计一个应用程序,它将为浏览器和移动设备提供服务,这些应用程序将使用REST服务与服务器进行通信。

为此我想到为web和rest创建2个单独的层。 我按照spring io入门指南完整教程(http://spring.io/guides#gs)进行操作,该教程使用一个架构,该架构在其余层中包含一个域包,构建将作为对休息请求的回复发送的对象。

在另一个网络教程中,他们在网络层下面有一个类似的包,用于在显示域对象之前处理它们。

我读了这个问题,如果我按照答案中的一般指导原则,我会实现单独的域包,因为即使视图层使用REST,仍然存在一些差异,如果我决定使用它可能会导致维护问题。改变未来的一些事情: (Best Practice - Multi Layer Architecture and DTOs

我的问题是关于具有两者的应用程序,如果Web层保持DTO与其余的一样,或者让视图调用其余服务或使用相同的rest.domain是一个好习惯。 POJO(并从这个包中提取这些POJO到一个普通的?

感谢。

1 个答案:

答案 0 :(得分:1)

考虑到问题标签,实现您想要的最简单的体系结构将是一个简单的Spring MVC项目,它同时提供Web内容和REST服务。更复杂的体系结构可能需要某种“公共”项目,其中包含所有模型(DTO),服务,存储库,工具等等 - 这将产生可供Web和REST项目使用的JAR。

如果您不需要单独扩展Web / REST并且在不同的发布周期/版本控制中不需要它们,则可能不需要它们是单独的可部署的。如果Web / REST组件本身并不需要存在,请不要过度设计它。

我会倾向于KISS并从一个项目开始,同时做出设计决策,以便在需要时转移到更复杂的架构。例如,利用包来从REST分割Web控制器,分离“公共”类,使用依赖管理(例如Maven)。

至于组织你的DTO,它将严重依赖你的用例。尽可能使用通用模型,但不要害怕在需要时为Web或REST创建轻量级模型。