假设正在使用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.。您的模型层存储用户。
在视图层中完成的此模型解析在webframeworks中最常见,如2所示。
答案 0 :(得分:0)
从我的主观观点来看,我没有看到设计有任何问题或是否违反了SRP。如果不需要逻辑,则可以在任何层中处理转换。但是,如果您坚持认为如果转换必须保留在服务层中,那么您也可以这样做。但让我解释为什么不需要它。例如(在C#中),您有一个转换器(或解析器):
public class UserModelConverter{
public UserModel FromJSON(string json){
// parse the JSON and return the class
}
}
现在您在服务层拥有解析器,现在您可以为用户使用统一的JSON格式。但是,请考虑一些情况:
假设UserModel有一个LastName
字段。该字段不是必需的,因此它可以为null。但是,您需要某些视图的特定默认值(例如,在“显示用户”屏幕中,您需要将默认值设置为" [LAST_NAME]",但是string.Empty或" - &#34 ;在其他领域。使用转换器会遇到困难,尤其是JSON格式。
在特定情况下,您不得不为数据使用不同的JSON格式。示例可以是UserModel
数据是屏幕中另一个对象的字段。你怎么能保持它?
通常,特别是在MVC中,数据通过使用表单发布到控制器,从而生成每个字符串字段。你会在服务层处理对象创建吗?如果没有,那么您将创建逻辑放在不同的层中。
在某些情况下,解析器适合放入服务层。那可能是:
如果操作不包含特定逻辑(业务逻辑准确),请不要将其放在服务层中。