Web applications 这是模型还是控制器的一部分?

Web applications 这是模型还是控制器的一部分?,web-applications,model-view-controller,project,code-structure,Web Applications,Model View Controller,Project,Code Structure,如果web应用程序通过从客户端上传接收文本文件,使用各种规则对其进行解析,并根据某些规则输出视图,那么在MVC结构化项目中该过程的各个阶段将分配到何处 最初,我打算将上传的文件发送到一个helper方法(与我的任何模型、视图和控制器分离),该方法将解析和生成输出,并使用模型将输出推送到数据库;然后,我将使用输出从控制器渲染视图 我怀疑基于规则的输出解析和生成是业务逻辑?在这种情况下,我应该将代码放在模型下还是助手可以?到目前为止,我只使用我的模型访问数据库并存储对象的类(User,TextDoc

如果web应用程序通过从客户端上传接收文本文件,使用各种规则对其进行解析,并根据某些规则输出视图,那么在MVC结构化项目中该过程的各个阶段将分配到何处

最初,我打算将上传的文件发送到一个helper方法(与我的任何模型、视图和控制器分离),该方法将解析和生成输出,并使用模型将输出推送到数据库;然后,我将使用输出从控制器渲染视图


我怀疑基于规则的输出解析和生成是业务逻辑?在这种情况下,我应该将代码放在模型下还是助手可以?到目前为止,我只使用我的模型访问数据库并存储对象的类(
User
TextDocument
,等等);如果我的文件解析等应该放在模型中,那通常是如何构造的?我是否只是向模型中添加了一个
文件解析器
类,还是?

您考虑将内容分离出来是正确的,而且从模型中分离内容的解析显然是正确的

我有时用助手来完成这项工作。如果您希望使其更易于测试并保持模型干净(尤其是在模型是实体框架模型的情况下),那么下面所示的方法可能会有用

/// <summary>
/// Interface for file handling
/// </summary>
public interface IFileParser
{
  void Parse();
}




/// <summary>
/// An interface for the model you wish to work on
/// Will allow DI and Mocking in Unit Tests
/// </summary>
public interface IMyModel
{
  string Content { get; set; }
}


/// <summary>
/// The model that has the content you are going to work with
/// </summary>
public class MyModel : IMyModel
{
  string Content { get; set; }

  // other properties
}



/// <summary>
/// The class to handle the model.
/// </summary>
public class FileHandler : IFileParser
{
  private IMyModel _model;

  public FileHandler(IMyModel model)
  {
    _model = model;
  }

  public void Parse()
  {
    string contentToHandle = _model.Content;
    //Do stuff here to ensure all is good.
    //NOTE: you could change the interface to return an ID to work with
  }
}

不过,这可能有点过头了。取决于您的工作内容:)

数据验证应该是模型层的一部分。特别是-在内部完成。控制器(表示层的一部分)的唯一职责是根据用户的输入改变模型层的状态。
FileHandler handler = new FileHandler(thisModel);
handler.Parse();