假设使用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格式了。但是,考虑一些场景:
说UserModel有一个
LastName
字段。该字段不是强制性的,因此它可能为空。但是,对于某些视图,您需要特定的默认值(例如,在Display User屏幕中,您需要将默认值设置为"[LAST_NAME]",但是字符串。其他字段为空或"-"。您将很难使用转换器来处理它,特别是在JSON格式中。在特定情况下,您被迫为数据使用不同的JSON格式。如果
UserModel
数据是屏幕上另一个对象的字段,则可以使用该示例。你如何维护它?通常情况下,特别是在MVC中,数据是通过使用表单发送到控制器,从而产生每个字符串字段。你也会在服务层处理对象的创建吗?
也有一些情况下,解析器适合放在服务层。这可能是:
- 进程的一部分,例如从CSV或XML中读取一组记录。
- (可能更多,只是我还没有发现情况)
如果操作中不包含特定的逻辑(准确地说是业务逻辑),则不要放在服务层