相关疑难解决方法(0)

MVC 3应用程序中的模型,ViewModel,DTO

我有一个带有两个子项目的Web解决方案(在VS2010中):

  1. Domain它包含Model类(通过Entity Framework映射到数据库表),Services以及(除了其他东西)负责CRUD操作

  2. WebUI 它引用了Domain项目

对于我创建的第一个页面,我在我强类型视图中直接使用Domain项目中的Model类作为Model,因为类很小,我想显示和修改所有属性.

现在我有一个页面,它只能用于相应域模型的所有属性的一小部分.我通过在Service类中使用查询结果的投影来检索这些属性.但我需要投射到一个类型 - 这里有我能想到的解决方案的问题:

  1. 我介绍ViewModelsWebUI项目中的哪些内容IQueryables以及EF data context从服务公开到WebUI项目.然后我可以直接投射到那些ViewModels.

  2. 如果我不想公开IQueryables和EF数据上下文,我将ViewModel类放在Domain项目中,那么我可以直接返回ViewModels作为来自Service类的查询和预测的结果.

  3. 除了ViewModelsWebUI我介绍项目Data transfer objects,其来自移动查询的数据在服务类的ViewModels.

解决方案1和2看起来像是相同的工作量,我更倾向于选择解决方案2来将所有数据库问题保存在单独的项目中.但不知何故,在Domain项目中使用View -Model 听起来是错误的.

解决方案3听起来更多的工作,因为我有更多的类来创建和关心Model-DTO-ViewModel映射.我也不明白DTO和ViewModels之间会有什么区别.ViewModels不是我想要显示的Model类的所选属性的集合吗?他们不会包含与DTO相同的成员吗?为什么我要区分ViewModels和DTO?

这三种解决方案中哪一种更可取,有哪些优点和缺点?还有其他选择吗?

感谢您提前的反馈!

编辑(因为我可能有太长的文本墙并且被要求提供代码)

示例:我有一个Customer实体...

public class Customer
{
    public int ID { get; set; }
    public string Name { get; set; }
    public City { get; …
Run Code Online (Sandbox Code Playgroud)

architecture asp.net asp.net-mvc asp.net-mvc-3

16
推荐指数
2
解决办法
7737
查看次数

将DTO传递给我的ViewModels构造函数以映射属性

在我的解决方案中,我有两个项目.

项目1(核心)使用Dapper将SQL映射到DTO

项目2(WebUI - ASP.NET MVC 4)这里我使用每个View的ViewModel.

控制器的示例

  [HttpGet]
    public ActionResult Edit(int id)
    {
        // Get my ProductDto in Core
        var product = Using<ProductService>().Single(id);
        var vm = new ProductFormModel(product);

        return View(vm);
    }
Run Code Online (Sandbox Code Playgroud)

ViewModel的示例

public class ProductFormModel : BaseViewModel, ICreateProductCommand
    {
        public int ProductId { get; set; }
        public int ProductGroupId { get; set; }
        public string ArtNo { get; set; }
        public bool IsDefault { get; set; }
        public string Description { get; set; }
        public string Specification { get; …
Run Code Online (Sandbox Code Playgroud)

c# architecture asp.net-mvc dapper

4
推荐指数
1
解决办法
2952
查看次数

标签 统计

architecture ×2

asp.net-mvc ×2

asp.net ×1

asp.net-mvc-3 ×1

c# ×1

dapper ×1