MVC3中的POCO类和ViewModel

我不是一个经验丰富的MVC3开发人员,但我想成为。 我熟悉POCO类和ViewModels,因为前者描述了数据库的每个类,后者用于mvc3中的强类型视图。 对于经验丰富的开发人员来说,我的问题并不复杂,但我对此感到有些困惑。

问题是,我有一个包含三个项目的解决方案;

  1. 我在其中编写了POCO类的Model类库。 这是一个例子:

public class Service { [Key] [DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)] public int ServiceID { get; set; } //------------------------------------------------------------// [Required, MaxLength(30)] [LocalizedAttribute("Name")] public string Name { get; set; } //------------------------------------------------------------// [MaxLength(100)] [LocalizedAttribute("Description")] public string Description { get; set; } //------------------------------------------------------------// [Required] public long ModifiedByUserID { get; set; } [ForeignKey("ModifiedByUserID")] public virtual User OperatorUser { get; set; } //------------------------------------------------------------// [Required, MaxLength(10)] public int ModifiedDate { get; set; } } 
  1. 存储库和UnitOf Work类库

  2. MVC应用程序

现在,我是否正确地解决了POCO课程? (我当然使用EF Code First生成数据库)如果是,那么它们也被推断为ViewModels吗? 我用它们来生成强类型视图。

定义POCO类和ViewModel的最佳和实际标准方法是什么?

我很感激任何善意的指导,

说实话,这取决于项目的大小。

如果你看一下大多数微软的例子,他们只是因为他们的例子是小项目而将他们的POCO用作模型。

但是,如果您正在开发企业级应用程序附近的任何东西,那么您真的不应该使用POCO作为模型。 应该明确区分关注点。 严格来说,您的Web项目甚至不应该知道这些场景中的POCO对象,典型的实现是POCO和View Model都可以实现和查看的通用接口。 这样可以节省您将POCO对象暴露给Web层的过程。

ViewModel是数据(Poco)和View之间的中间层,它通常包含控制UI的附加逻辑。

如果ViewModel没有任何特定数据,我没有看到不将Poco用作ViewModel的原因。

在其他情况下,为了将数据保存为Poco,您可以使用与Poco类相同的字段创建ViewModel,并使用Automapper进行Poco-> ViewModel,ViewModel-> Poco转换。

我同意mt_serg。 在我的应用程序中,如果它是一个简单的案例,我会直接使用POCO类。 但是,如果在我的视图中我还需要显示从db填充的示例下拉列表,那么我创建一个ViewModel,其中包含带有附加列表的POCO类,并在从控制器传入的视图中使用VM。 但是,我不会重做我的工作,并使用与POCO +附加字段相同的字段创建VM。 我觉得这个方法适合我,因为我自己不需要处理转换,我让MVC框架为我排序。 希望这可以帮助