我不是一位经验丰富的MVC3开发人员,但我正努力做到。我熟悉POCO类和ViewModels,因为前者描述了数据库的每个类,后者用于mvc3中的强类型视图。对于经验丰富的开发人员来说,我的问题并不复杂,但我对此感到有些困惑。
问题是,我有一个包含三个项目的解决方案;
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; }
}
存储库和UnitOf工作类库
MVC应用程序
现在,我是否正确地解决了POCO课程? (我当然使用EF Code First生成数据库)如果是,那么它们也被推断为ViewModels吗?我用它们来生成强类型视图。
定义POCO类和ViewModel的最佳和实际标准方法是什么?
我很感激任何善意的指导,
答案 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框架为我排序。希望这有帮助