Design patterns MVC中的模型解析器应该是哪一层

Design patterns MVC中的模型解析器应该是哪一层,design-patterns,model-view-controller,model,controller,Design Patterns,Model View Controller,Model,Controller,假设使用的是MVC设计模式,并且使用的web框架不支持从HTTP请求(JSON或XML数据)解析模型。需要将传入的转储请求数据解析为模型对象。现在,我们需要开发我们的模型解析器 我知道只有在查看层处理HTTP请求,在服务(控制器)层做所有业务工作,才是MVC的正确方法。根据这个假设,在视图层中进行模型解析操作不是一个好主意。它应该在服务层中定义。(我错了吗?)。但是很多web框架在视图层处理它。问题是,什么是不打破MVC设计模式的最佳方法,为什么 谢谢大家! 编辑: 我想更具体地讲一下webfr

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

我知道只有在
查看层处理
HTTP
请求,在
服务(控制器)层做所有业务工作,才是
MVC
的正确方法。根据这个假设,在视图层中进行模型解析操作不是一个好主意。它应该在服务层中定义。(我错了吗?)。但是很多web框架在视图层处理它。问题是,什么是不打破
MVC设计模式的最佳方法,为什么

谢谢大家!

编辑: 我想更具体地讲一下webframework的模型解析,它是在视图中进行的

假设客户端请求“添加用户”

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

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

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

4.)模型层存储用户


这种在视图层进行的模型解析在webframeworks中最为常见,如图2所示。

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

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

  • 假设UserModel有一个
    LastName
    字段。该字段不是必填字段,因此可能为空。但是,对于某些视图,您需要特定的默认值(例如,在显示用户屏幕中,您需要将默认值设置为“[LAST_NAME]”,但在其他字段中设置为string.Empty或“-”。使用转换器,尤其是JSON格式,您将很难处理它

  • 在特定情况下,您必须为数据使用不同的JSON格式。例如,如果
    UserModel
    数据是屏幕中另一个对象的字段,您如何维护它

  • 通常,特别是在MVC中,数据通过表单发布到控制器,生成每个字符串字段。您是否也在服务层处理对象创建?如果不是,则将创建逻辑放在不同的层中

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

  • 过程的一部分,例如从CSV或XML读取一组记录
  • (他们可能更多,我只是还没有发现情况)

  • 如果操作不包含特定逻辑(确切地说是业务逻辑),不要将其放在服务层。

    这没有任何意义。控制器不是服务。控制器是表示层的一部分,而服务是模型层的一部分。传入的HTTP请求应该在到达MVC三元组之前进行解释和抽象。什么是“模型解析”?为什么模型层会关心您是想将响应表示为XML还是JSON?模型层不关心请求数据我在问题中没有这样说。我对问题进行了编辑,以便更具体地了解模型解析操作,请检查。
    public class UserModelConverter{
        public UserModel FromJSON(string json){
            // parse the JSON and return the class
        }
    }