1

问候,让我们假设我有一个名为 的类Formater:IFormater和一个方法LoadData(),如下所示:

public interface IFormater { void LoadData(string strSomeData); }
public class Formater : IFormater { public void LoadData(string strSomeData) {/*do some magic*/} }

假设我还有一个名为的类View:IView和一个方法LoadRawData(),如下所示:

public interface IView { void LoadRawData(string strSomeData); }
public class View : IView {
    private IFormater _formater;
    public View(IFormater formater) { _formater = formater; }
    public void LoadRawData(string strSomeData) { _formater.LoadData(strSomeData); }
}

现在,在我的 prog 中,我创建了一个View类的对象并调用LoadRawData(),如下所示:

static void Main(string[] args) {
    kernel = new StandardKernel(new Modules()); //ninject
    formater = kernel.Get<IFormater>(); //ninject
    IView view = new View(formater);
    view.LoadRawData(args[0]);
}

我使用 ninject 作为 DI 机制,实际上现在一切正常。

问题:

  1. IView让接口在内部调用是否正确Formater::LoadDtata()?(就我自己而言,我没有看到任何其他方式)。

  2. 我应该为Formater::LoadData()and使用不同的名称View::LoadRawData(),还是它们应该具有相同的名称,或者可能有一种如何命名它们的做法?

对不起。看起来我做了几个严重的错误。我已经在上面更正了它们。其实我不使用MVC模式。我只是这么想的。

关键是我想将显示逻辑与解析和格式化隔离开来。

我的控制台应用程序应该打开一个文件,读取文本内容并将其传递给格式化程序类,它将进行一些格式化并将其带回(但在格式化程序将其传递给解析器以从原始文本中提取必要的内容之前),就像这个 视图<-> 格式化程序 <-> 解析器

这是一个简单的程序,我用它来更好地理解一些最佳方法和实践,如 TDD、单元测试和 DI。

我很抱歉之前的不一致。

4

1 回答 1

1

要回答问题 1),当您使用 MVC 模式时,您的具体视图(不是作为接口的 IView)不应调用IController::LoadData()。Model、View、Controller之间的关系是这样的:

在此处输入图像描述

(图片取自这篇文章,给出了 MVC 的基本定义)

相反,控制器应将 LoadData 数据放入模型中,然后控制器应返回与该模型关联(即可以访问)的视图。

例如,在 ASP.NET MVC 中,您可以执行以下操作:

public class YourController : Controller
{
 IDataRepository db;

 public YourController(IDataRepository db)
 {
  this.db = db; 
 }

 public ViewResult Index()
 {
  YourModel model = db.LoadData();
  return View(model);
 }
}

对您没有帮助的是您正在尝试从控制台应用程序中使用 MVC 模式。我建议通过 MVC 教程(例如,这非常好)来获得更好的理解。

于 2013-10-14T18:46:59.717 回答