模型解析器应该在MVC中的哪一层?



假设使用MVC设计模式,并且使用的web framework不支持从HTTP请求(JSON或XML数据)中解析模型。需要将传入的转储请求数据解析为模型对象。现在,我们需要发展我们的model resolver

我知道只有在view layer上处理HTTP请求,在Service(Controller) layer上做所有业务工作是MVC的正确方式。根据这一假设,在视图层中进行模型解析操作并不是一个好主意。它应该在服务层定义。(我说错了吗?)但是很多web框架在视图层处理它。问题是,不破坏MVC design pattern的最好方法是什么,为什么?

谢谢!

<标题>编辑:

我想更具体地说一下webframework的模型解析它在视图中进行模型解析;

假设客户端要求"添加用户"。

1)。它通过HTTP发送用户数据,并假设它是JSON

2)。视图层正在处理它,将用户JSON数据解析到用户模型对象(模型解析器),并将用户发送到服务层(这里控制器层开始工作)

3)。您的服务层正在验证用户。(验证电子邮件,用户名等)。它是在这里完成的,因为它是一个业务作业,它发送给用户到模型层进行持久化。

4)。你的模型层存储用户。

在视图层中完成的模型解析在web框架中最常见,如2所示。

从我的主观角度来看,我不认为这个设计有任何问题,也不认为它违反了SRP。如果不需要逻辑,则可以在任何层中处理转换。但是,如果您坚持必须在服务层进行转换,那么您也可以这样做。但让我解释一下为什么不需要它。例如(在c#中),你有一个转换器(或解析器):

public class UserModelConverter{
    public UserModel FromJSON(string json){
        // parse the JSON and return the class
    }
}

现在你有了服务层的解析器,现在你可以为用户使用统一的JSON格式了。但是,考虑一些场景:

  1. 说UserModel有一个LastName字段。该字段不是强制性的,因此它可能为空。但是,对于某些视图,您需要特定的默认值(例如,在Display User屏幕中,您需要将默认值设置为"[LAST_NAME]",但是字符串。其他字段为空或"-"。您将很难使用转换器来处理它,特别是在JSON格式中。

  2. 在特定情况下,您被迫为数据使用不同的JSON格式。如果UserModel数据是屏幕上另一个对象的字段,则可以使用该示例。你如何维护它?

  3. 通常情况下,特别是在MVC中,数据是通过使用表单发送到控制器,从而产生每个字符串字段。你也会在服务层处理对象的创建吗?

也有一些情况下,解析器适合放在服务层。这可能是:

  1. 进程的一部分,例如从CSV或XML中读取一组记录。
  2. (可能更多,只是我还没有发现情况)

如果操作中不包含特定的逻辑(准确地说是业务逻辑),则不要放在服务层

最新更新