mvc中的POCO类和视图模型

本文关键字:视图 模型 中的 POCO mvc | 更新日期: 2023-09-27 18:17:03

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

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

    模型类库,我在其中编写了POCO类。下面是一个例子:

.

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. repository and UnitOf Work类库

  2. MVC应用

现在,我是否正确地处理了POCO类?(我使用EF代码首先生成数据库当然)如果是这样,他们被推断为ViewModels太?我已经使用它们来生成强类型视图。

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

mvc中的POCO类和视图模型

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

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

然而,如果您正在开发接近企业级应用程序的任何东西,那么真的不应该使用POCO作为模型。应该有明确的关注点分离。严格地说,在这些场景中,您的Web项目甚至不应该知道您的POCO对象,典型的实现是POCO和视图模型都可以实现和看到的公共接口。这样可以避免将POCO对象暴露给Web层。

ViewModel是数据(Poco)和视图之间的中间层,通常包含额外的逻辑来控制UI。

如果ViewModel没有任何特定的数据,我不认为有理由不使用Poco作为ViewModel。

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

我同意mt_serg的观点。在我的应用程序中,如果是简单的情况,我会直接使用POCO类。但是,如果在我的视图中,我还需要显示例如从数据库填充的下拉列表,那么我创建一个ViewModel,其中包括带有附加列表的POCO类,并在从控制器传入的视图中使用VM。然而,我没有重做我的工作,并创建具有与POCO +附加字段相同字段的VM。我发现这种方法适合我,因为我不需要自己处理转换,我让MVC框架为我排序。希望对大家有所帮助