【问题标题】:web app architecture: RESTful and web should share the same DTOs? [closed]Web 应用架构:RESTful 和 Web 应该共享相同的 DTO? [关闭]
【发布时间】:2014-07-30 09:46:12
【问题描述】:

我是 Web 应用程序开发的新手,我的目标是设计一个应用程序,该应用程序将服务于浏览器和移动设备,这些设备将使用 REST 服务与服务器进行通信。

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

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

我阅读了这个问题,如果我遵循答案中的一般准则,我将实现单独的域包,因为即使视图层使用 REST,仍然存在一些差异,这可能是我决定维护问题的根源将来改变一些东西: (Best Practice - Multi Layer Architecture and DTOs)

我的问题是关于两者兼有的应用程序,Web 层是否应该像其他 DTO 一样持有 DTO,或者让视图调用其他服务或使用相同的 rest.domain.POJO(并提取这些 POJO 从那个包到一个普通的?

谢谢。

【问题讨论】:

  • 这更适合程序员,但对于 SO 来说过于基于意见。也就是说,我尝试对 JSON 响应和 HTML 模型属性使用相同的资源表示,因为它有助于确保 REST 外观具有一致的行为,而不管正在访问什么类型的客户端。
  • 看看 Apache Olingo JPA 处理器。

标签: java spring rest web-applications


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢,谢谢。我不会生产 2 包。我指的是 web 层的内部设置。我从您的提示中得到了答案“如果您不需要单独扩展 Web/REST 并且不需要它们在不同的发布周期/版本控制中”。这一点,再加上 chrylis 关于维护访问一致性的评论,实际上让我意识到我想要两种资源使用者类型的单一 JSON 表示,以及每个访问对象的外观。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 2015-01-13
  • 2016-05-28
  • 2011-11-29
  • 2011-10-23
  • 2015-01-27
  • 1970-01-01
相关资源
最近更新 更多