标签: dto

使用DTO在服务层和UI层之间传输数据

我一直在试图解决这个问题,但是在ASP.NET MVC上这个特定主题的信息似乎很少.我一直在谷歌搜索几天,并没有真正能够解决这个特定的问题.

我有一个3层项目.业务,DAL和UI/Web层.在DAL中是dbcontext,存储库和工作单元.在业务层中是包含所有接口和EF模型的域层.在业务层中,还有一个服务层,其中包含用于EF模型的DTO和用于访问存储库的通用存储库服务.这张照片应该有助于解释它.

我的问题是,我似乎无法弄清楚如何使用DTO从业务层传输数据.

我已经为DTO创建了服务类.我有一个ImageDTO和模型和图像锚点相同.我为每个DTO创建了一个服务类.所以我有一个图像服务和主播服务.这些服务继承存储库服务,并且目前实现自己的服务.但就我而言,那就是那个.由于这些服务具有通过IoC接收IUnitOfWork接口的构造函数,因此我几乎陷入困境.

如果我直接从UI引用服务,一切正常,但我无法理解如何使用DTO将数据从服务层传输到UI层,反之亦然.

我的服务层:

业务/服务/ DTO的

public class AnchorDto
{
      public int Id { get; set; }
      public int x1 { get; set; }
      public int y1 { get; set; }
      public int x2 { get; set; }
      public int y2 { get; set; }
      public string description { get; set; }
      public int  imageId { get; set; }
      public int targetImageId { get; set; }

      public AnchorDto(int Id, int x1, int y1, int x2, …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc repository unit-of-work dto n-tier-architecture

14
推荐指数
1
解决办法
1万
查看次数

AutoMapper展平嵌套映射会要求自定义解析程序

我对AutoMapper有些新意,并希望将POCO-ish对象映射到可能更复杂的DTO,后者试图表示Google Books API的Volume资源:

Book.cs

public class Book
{
    public string Isbn10 { get; set; }
    public string Isbn13 { get; set; }
    public string Title { get; set; }
    public string Author { get; set; }
    public string Publisher { get; set; }
    public DateTime Publication { get; set; }
    public int Pages { get; set; }
    public string Description { get; set; }
    public bool InStock { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

BookDto.cs

public class BookDto
{
    public …
Run Code Online (Sandbox Code Playgroud)

.net mapping dto automapper

13
推荐指数
1
解决办法
1万
查看次数

在创建,更新和获取休息终点时相同/不同的DTO对象?

考虑使用UserDTO类和UserController公开端点来创建,更新和获取用户.

在UserDTO类中具有id属性对于创建和更新没有意义.如果我使用swagger或其他自动生成的API文档,那么它会显示id可以在create end point中传递.但系统不使用它,因为ID是在内部生成的.

如果我看看get那么可能我可以摆脱id属性,但它肯定是在列表用户端点.

我想在get/list端点返回内部用户域对象.这样我就可以从UserDTO类中删除id属性.

我可以为此采用更好的选择吗?

public class UserDTO {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

@RestController
@RequestMapping(value = "/users", produces = MediaType.APPLICATION_JSON_VALUE)
public class UserController {
    @RequestMapping(method = RequestMethod.POST)
    @ResponseBody
    public ResponseEntity<Void> create(@RequestBody UserDTO user) {
    }

    @RequestMapping(value = "{id}", method = RequestMethod.GET)
    @ResponseBody
    public …
Run Code Online (Sandbox Code Playgroud)

java rest spring-mvc dto content-negotiation

13
推荐指数
2
解决办法
9264
查看次数

如何在控制器、服务和存储库模式中使用 DTO

我正在遵循控制器、服务和存储库模式,我只是想知道 DTO 从何而来。

控制器应该只接收 DTO 吗?我的理解是你不想让外界知道底层的领域模型?

从域模型到 DTO 的转换应该发生在控制器层还是服务层?

java spring dto spring-boot

13
推荐指数
3
解决办法
9693
查看次数

IN 和 OUT DTO 有命名约定吗?

如果我必须使用 MVC 架构创建某种 API,我就必须为控制器接收的 DTO 和控制器生成的 DTO 确定命名约定,是对的吗?

\n

例如,给出以下代码:

\n
public class InStudentDTO\n{\n    public int Id { get; set; }\n    public List<int> Grades { get; set; }\n}\n\npublic class OutStudentDTO\n{\n    public int Id { get; set; }\n    public bool HasApprovedCourse { get; set; }\n}\n\n[HttpPost]\npublic OutStudentDto StudentHasApprovedCourse(InStudentDto dto)\n{\n    OutStudentDto outStudentDto = _someService.CalculateStudentApprovedCourse(dto);\n    return outStudentDto;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这只是一个愚蠢的示例,但要点是我想在具有该属性的服务内执行一些计算List<int> Grades,并且稍后不在控制器的输出上显示它。因此,据我了解,我应该创建一个全新的 DTO,但不会公开该List<int> Grades属性,对吗?如果是这样,这个“生成的 DTOs\xc2\xa8”的正确命名约定如何?或者应该将它们命名为 Viewmodels?

\n

谢谢!

\n

c# api naming dto viewmodel

13
推荐指数
1
解决办法
1万
查看次数

如何使用 Nestjs 验证枚举值数组

我觉得这个线程这个线程的组合就是我需要实现的,我很难将它们放在一起。

我有一个包含enum.

使用 Postman,我正在发送一个PurchasableTypeofFOO并期望收到某种错误。看完上面的链接,感觉这个过程还是挺复杂的;这让我觉得我完全没有抓住要点。

如何使用验证管道来确保仅purchasable-type.enum.ts允许使用中的值?

感谢您的任何建议!

// create-order.dto.ts

import { IsEmail, IsNotEmpty, IsEnum } from 'class-validator';
import { PurchasableType } from '../enum/purchaseable-type.enum';

export class CreateOrderDto {
  @IsNotEmpty()
  readonly userId: string;

  @IsNotEmpty()
  readonly locationId: string;

  @IsNotEmpty()
  @IsEnum(PurchasableType)
  readonly purchasableType: PurchasableType;

  @IsNotEmpty()
  @IsEmail()
  readonly email: string;
}
Run Code Online (Sandbox Code Playgroud)
// purchasable-type.enum.ts

export enum PurchasableType {
  CLINIC = 'CLINIC',
  EVENT = 'EVENT',
  LESSON = 'LESSON',
  RESERVATION = 'RESERVATION',
  TEAM = 'TEAM',
}

Run Code Online (Sandbox Code Playgroud)

编辑 …

dto nestjs

13
推荐指数
2
解决办法
3万
查看次数

NestJS 在 DTO 创建期间执行验证之前使用 ValidationPipe 转换属性

我使用内置的 NestJS ValidationPipe 以及类验证器和类转换器来验证和清理入站 JSON 正文有效负载。我面临的一种情况是入站 JSON 对象中混合使用大小写属性名称。我想在新的 TypeScript NestJS API 中纠正这些属性并将其映射到标准的驼峰式模型,这样我就不会将遗留系统中不匹配的模式耦合到我们的新 API 和新标准,本质上是使用 @Transform DTO 作为应用程序其余部分的隔离机制。例如,入站 JSON 对象的属性:

"propertyone",
"PROPERTYTWO",
"PropertyThree"
Run Code Online (Sandbox Code Playgroud)

应该映射到

"propertyOne",
"propertyTwo",
"propertyThree"
Run Code Online (Sandbox Code Playgroud)

我想使用 @Transform 来完成此任务,但我认为我的方法不正确。我想知道是否需要编写自定义 ValidationPipe。这是我目前的方法。

控制器:

"propertyone",
"PROPERTYTWO",
"PropertyThree"
Run Code Online (Sandbox Code Playgroud)

测试我模型:

"propertyOne",
"propertyTwo",
"propertyThree"
Run Code Online (Sandbox Code Playgroud)

测试我请求Dto:

import { Body, Controller, Post, UsePipes, ValidationPipe } from '@nestjs/common';
import { TestMeRequestDto } from './testmerequest.dto';

@Controller('test')
export class TestController {
  constructor() {}

  @Post()
  @UsePipes(new ValidationPipe({ transform: true }))
  async get(@Body() testMeRequestDto: TestMeRequestDto): Promise<TestMeResponseDto> {
    const response = do something useful …
Run Code Online (Sandbox Code Playgroud)

validation dto class-validator nestjs class-transformer

13
推荐指数
2
解决办法
4万
查看次数

列出差异:DTO、VO、实体、域、模型

现在正在研究JAVA平台的Spring Boot。

我面临的一个问题是如何区分 DTO、VO、Entity、Domain 和 Model 之间的区别。

老实说,这一切看起来都太相似了,无法区分。

我已经检查了一些有关“DTO 和 VO 之间的差异”之类的 stackoverflow 答案。

然而,我仍然想知道他们在使用 Spring Boot 的开发人员方面有何不同。

java dto spring-boot

13
推荐指数
3
解决办法
2万
查看次数

如何使用AutoMapper将Dto映射到具有嵌套对象的现有对象实例?

我有以下Dto和实体与嵌套的子实体.

public class Dto
{
    public string Property { get; set; }
    public string SubProperty { get; set; }
}

public class Entity
{
    public string Property { get; set; }
    public SubEntity Sub { get; set; }
}

public class SubEntity
{
    public string SubProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何使用AutoMapper设置映射,这将允许我使用Dto中的值更新现有的Entity实例.

我正在使用Mapper.Map(dto, entity)更新现有实体但是当我尝试映射Dto.SubProperty到时,Entity.Sub.SubProperty我得到一个例外,"必须解析为顶级成员.参数名称:lambdaExpression".

如果我从创建一个映射DtoSubEntity使用FromMember,然后Entity.Sub被用的新实例所取代SubEntity,但是这不是我想要的.我只是想让它更新属性的现有实例SubEntity …

.net c# nested dto automapper

12
推荐指数
1
解决办法
1万
查看次数

DTO模式+延迟加载+实体框架+ ASP.Net MVC +自动映射器

首先,抱歉对于冗长的问题,但我必须提供一些基本信息.

我们正在创建一个使用ASP.net MVC,JQuery模板,实体框架,WCF的应用程序,我们使用POCO作为我们的域层.在我们的应用程序中,有一个WCF服务层与ASP.net MVC应用程序交换数据,它使用从WCF到MVC的数据传输对象(DTO).

此外,在我们的WCF服务层中转换Domain-TO-DTO时,应用程序使用AutoMapper在实体框架中使用延迟加载.

我们的后端架构如下(WCF服务 - >管理器 - >存储库 - >实体框架(POCO))

在我们的应用程序中,我们不使用View Models,因为我们不想要另一个MVC应用程序的映射层,我们只使用DTO作为View Models.

通常,我们有针对域的Normal和Lite DTO,例如Customer,CustomerLite等(Lite对象具有少于Normal的属性).

现在我们在DTO方面遇到了一些困难,因为我们的DTO结构变得越来越复杂,当我们认为可维护性(使用DTO的一般分层结构)时,我们失去了性能.

例如,

我们有Customer View页面和DTO层次结构,如下所示

 public class CustomerViewDetailsDTO
 {
   public CustomerLiteDto Customer{get;set;}
   public OrderLiteDto Order{get;set;}
   public AddressLiteDto Address{get;set;}
 }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们不希望OrderLiteDto的某些字段用于此视图.但是其他一些视图需要该字段,因此为了便于我们使用该结构.

在Auto Mapping中,我们映射CustomerViewDetailsDTO,我们将从Lazy Loading(实体框架)获取其他数据(特定视图不需要).

我的问题:

  1. 在考虑可维护性的同时,我们是否可以使用任何机制来提高性能?

  2. 是否可以使用Automapper为相同的DTO提供更多基于地图视图的映射功能?

asp.net-mvc entity-framework lazy-loading dto automapper

12
推荐指数
1
解决办法
7425
查看次数