0

给定一个 Web 应用程序,它通过从客户端上传接收文本文件,使用各种规则对其进行解析,并根据一些规则输出一个视图,在 MVC 结构化项目中,该过程的各个阶段将分配到哪里?

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

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

4

1 回答 1

1

将事物分离出来的想法是正确的,将内容解析从模型中分离出来似乎是正确的。

我有时会使用助手来完成工作。如果您希望使其更具可测试性并保持模型清洁(尤其是模型是实体框架模型的情况),那么可能会使用类似于下面显示的方法。

/// <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();

不过,这可能有点矫枉过正。取决于你在做什么:)

于 2014-01-17T12:50:48.160 回答