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; }
}
repository and UnitOf Work类库
MVC应用
现在,我是否正确地处理了POCO类?(我使用EF代码首先生成数据库当然)如果是这样,他们被推断为ViewModels太?我已经使用它们来生成强类型视图。
定义POCO类和viewmodel的最佳和标准方法是什么?老实说,这取决于你的项目的大小。
如果你看一下大多数微软的例子,他们使用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框架为我排序。希望对大家有所帮助