2013-05-05 67 views
1

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

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

谢谢!

编辑:

我想具体谈谈模型解决了这是做它在视图中webframework;

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

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

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

3.)您的服务层验证用户(验证电子邮件,用户名等)。它在这里完成,因为它是一个商务工作,它发送给用户模型层坚持。

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

在2

+0

这没有任何意义。控制器不是服务。控制器是表示层的一部分,而服务是模型层的一部分。传入的HTTP请求应该在你打击MVC黑社会之前就被解释和抽象。什么是“模型解析”?为什么模型层关心您是否想将响应呈现为XML或JSON? – 2013-05-05 14:12:04

+0

模型层不关心请求数据我没有在我的问题中这样说。我编辑了关于模型解析操作的更具体的问题,请检查它。 – 2013-05-05 14:26:36

回答

0

看到从我的角度主观角度该模型解决这是在视图层做的是最常见的webframeworks,我看不出有什么问题的设计,或者如果它违反了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中,数据通过使用form发布到控制器,导致每个字符串字段。你是否也会在服务层中处理对象创建?如果没有,那么你将创建逻辑放在不同的层。

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

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

如果操作不包含具体的逻辑(业务逻辑要准确),不要把它在服务层。

相关问题