Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebApi项目中的ViewModels或RequestModels以及automapper的附加映射层_C# - Fatal编程技术网

C# WebApi项目中的ViewModels或RequestModels以及automapper的附加映射层

C# WebApi项目中的ViewModels或RequestModels以及automapper的附加映射层,c#,C#,我有Api项目、业务项目和数据库上下文 我想到这样的设计: api项目中的viewmodels,以及与automapper的映射。汽车制造商 这里将viewmodel映射到业务dto模型 业务项目中的dto模型,以及与automapper的映射。Automapper将在这里将dto模型映射到实体模型数据库。 问题1:我应该在api项目中使用OperationViewModel还是OperationRequestModelResponseModel 问题2:viewmodel和dto模型之间的额外

我有Api项目、业务项目和数据库上下文

我想到这样的设计:

api项目中的viewmodels,以及与automapper的映射。汽车制造商 这里将viewmodel映射到业务dto模型 业务项目中的dto模型,以及与automapper的映射。Automapper将在这里将dto模型映射到实体模型数据库。 问题1:我应该在api项目中使用OperationViewModel还是OperationRequestModelResponseModel


问题2:viewmodel和dto模型之间的额外映射是否过火了,或者分离这些关注点并进一步解耦是一种良好的做法,还是我应该将dto模型映射到实体模型并在api项目中使用这些dto模型?

首先,我要祝贺您“获得了它”。我看到很多项目在UI层都有数据库访问权限

起初,您可能会觉得为ViewModel、业务和数据层提供不同但几乎相同的类是一件痛苦的事情,但这正是AutoMapper的卓越之处。大多数时候,你不需要做任何事情,它只是工作

一旦您的代码有了更多的内容,您将发现添加数据库字段就更容易了,而不必担心对视图模型的影响,创建视图所需的视图模型就更容易了,而不必担心数据库字段。双赢。我还将为每个函数创建一个单独的视图模型,即使它们是相同的,如果需要,使用继承,但确保每次都有不同的类

在我看来,模型应该由创建和使用它们的层公开,因此ViewModel应该有XXXViewModel,businesss层应该有XXXDto等等

public IndexViewModel Index()
{
    var vm = new IndexViewModel()
    {
        Items = _mapper.map<List<Item>>(_service.GetSomeData())
    };
    return vm;
}
public GetViewModel Get(int id)
{
    var vm = _mapper.Map<GetViewModel>(_service.get(id));
    return vm;
}

非常感谢,如果在crud中添加和更新类似字段是好是坏,重新创建viewmodel也是一个难题。例如,如果我们在创建时自动保存一些字段,而不是通过客户端保存,那么在更新时,我们必须通过客户端更新它们。因此,我认为我更喜欢viewmodles的复制分离而不是继承,但我认为这是我个人的观点——看看这个