为什么我们要使用DTO
基础结构解释
- UI-表现层-与控制器打交道(UI向Controller 传递数据时使用DTO(数据传输对象))
- Service-应用服务层
- Domain 领域对象
- DTO 数据传输对象,一般只包含基础的Get,Set功能,也会包含一些数据验证,如必填项,大小,自定义规则等。
一个完整的业务是通过领域实体(对象)domain建立的,而DTO是根据UI的需求来设计的。
-
比如:Customer领域对象可能会包含一些诸如FirstName, LastName, Email, Address等信息。但如果UI上不打算显示Address的信息,那么CustomerDTO中也无需包含这个 Address的数据。
-
比如:User表设计字段如下:Id,UserName,Password,RegisterTime。注册时,那这个接口的参数应该只有UserName,Password,因为RegisterTime是后台赋值的,Id是数据库自动生成的。即设计一个RegisterDto,只包含UserName,Password二个字段,作为注册接口的参数。不然,那二个参数对于开发前端的人来说是无意义的,因为传递也没有效果。所以不应该暴露给前端使用。
以上即领域对象来实现业务,DTO只注重数据。
UI->Controller(通过 DTO完成数据传输,表单验证)->Service(操作Domain,完成业务服务)。
DTO->Domain,在C#中可使用一些类库,快速将二个类相互转换。良好的设计什么要使用DTO,集成 AutoMapper
作者: 、天上月OvO
出处:https://cnblogs.com/igeekfan
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端