在 MVC 中为数据模型创建接口

Sul*_*phy 2 c# asp.net asp.net-mvc inversion-of-control visual-studio

我有一个 MVC 项目,它将通过 HTTP 'Post' 动词接受数据。我热衷于遵循最佳实践,并想就如何最好地设置我的模型提出一个简短的问题。

通常在处理发布的数据时,我会设计我的控制器以使用具体模型。然而,当我想使用 IoC 时,我想确定我是否应该像以前一样继续或者我是否应该创建接口。

我的直觉是,我应该在整个 Web 应用程序中为我的所有模型和类使用接口,以有效地实现 IoC。我只是想得到确认我走在正确的道路上!:o)

例子:

My concrete model

public class PhoneBook : IPhoneBook
{
   public string Firstname {get; set;}
   public string LastName {get; set;}
   public string PhoneNumber {get; set;}
}


My interface

public interface IPhoneBook 
{
   string Firstname {get;set;}
   string Lastname {get;set;}
   string Phonenumber {get;set;}
}

My controller

//Accept posted data from web form
public void Post(IPhoneBook passInDetails)

{
   ... 
}
Run Code Online (Sandbox Code Playgroud)

提前致谢。

Rus*_*Cam 5

控制反转 (IoC)依赖注入 (DI)并不意味着您需要为所有模型和类使用接口。

对于“视图”模型,具体类很好,因为

  1. 它们是控制器的输入(也可能是视图的输出)
  2. 他们是有效的 DTO
  3. 它们应该是简单的并且具有离散的目的
  4. 使用数据注释属性的模型验证适用于定义它们的类型,因此它们应该适用于模型绑定中使用的具体类型。

因此,我会像您一样继续使用简单的类作为“视图”模型。另一方面,您的域/核心/业务层模型(MVC 中的M)将与您正在建模的域一样简单或复杂。