MVC3中的POCO类和ViewModel

时间:2013-06-05 08:09:50

标签: c# asp.net-mvc-3 ef-code-first poco

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

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

  1. 我在其中编写了POCO类的Model类库。这是一个例子:
  2. 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工作类库

    2. MVC应用程序

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

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

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

3 个答案:

答案 0 :(得分:6)

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

如果查看大多数Microsoft示例,他们将POCO用作模型只是因为他们的示例是小项目。

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

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