在Controller或Service层上反序列化?

时间:2013-09-11 15:12:28

标签: design-patterns symfony

我正在使用Symfony2开发一个REST API,它以JSON格式接收数据。

将JSON转换为对象的正确位置在哪里:

  • Controller将JSON转换为/从对象转换并调用Service方法传递一个PHP对象,该对象也返回一个对象?
  • Controller将JSON传递给Service方法,它将JSON转换为对象,并在返回之前将结果对象转换为JSON?

2 个答案:

答案 0 :(得分:3)

它绝对不属于服务层,因为它应该在模型对象方面起作用。您可以在应用程序中拥有许多不同的UI - HTML,REST,命令行 - 所有这些UI都将使用不同的格式进行数据交换。让服务层负责处理所有这些格式是没有意义的。

每种类型的UI都有自己的控制器层 - 或者在命令行UI的情况下是命令 - 并且这些控制器负责在将数据传递到服务层并返回之前将数据转换为模型对象或从模型对象转换数据。

您是如何做到的 - 直接在控制器操作中,或委托给其他服务,或使用AOP - 是您的选择。只需将其保留在服务层 - 域层之外,即。

答案 1 :(得分:0)

将JSON转换为对象的最佳位置是ParamConverter / listener。

请查看FOSRestBundle,特别是this pull request介绍请求体转换器。

Matthias Noback可以找到更多信息this excellent article