1

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

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

谢谢你!

编辑:

我想更具体地了解正在执行的网络框架的模型解析;

假设客户端正在询问“添加用户”。

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

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

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

4.)您的模型层存储用户。

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

4

1 回答 1

0

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

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

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

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

  2. 在特定情况下,您被迫对数据使用不同的 JSON 格式。例如,如果UserModel数据是屏幕中另一个对象的字段。你怎么能保养它?

  3. 通常,特别是在 MVC 中,数据通过使用表单发布到控制器,从而产生每个字符串字段。你也会在服务层处理对象创建吗?如果没有,那么您将创建逻辑放在不同的层中。

在某些情况下,解析器适合放在服务层。那可能:

  1. 该过程的一部分,例如从 CSV 或 XML 读取一组记录。
  2. (他们可能更多,我只是还没有找到情况)

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

于 2013-05-06T02:33:53.390 回答