论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
为什么要把数据模子分为:Entity,DTO,Response,Request ...
为什么要把数据模子分为:Entity,DTO,Response,Request呢?具体有什么作用 ...
花瓣小跑
论坛元老
|
2025-1-5 19:35:24
|
显示全部楼层
|
阅读模式
楼主
主题
1947
|
帖子
1947
|
积分
5841
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
开辟中,我们通常把数据模子分为几个部分,探讨下他们具体都有那些作用。
1. Entity(实体)
实体类代表数据库表布局,与数据库表一一对应。
// 例如 User.cs
public class User : BaseEntity
{
public string Username { get; set; }
public string Password { get; set; }
// ...
}
复制代码
主要特点:
代表数据库表的实体类,与数据库表布局一一对应
包含数据库字段的完整定义,如主键、外键、索引等
通常带有 ORM 相关的特性标注(Table、Column 等)
可以包含实体间的导航属性,表示表之间的关系
不应该直接暴露给外部接口,因为可能包含敏感信息(如密码)
2. DTO(数据传输对象)
用于在不同层之间传输数据的对象。
// 例如 UserDto.cs
public class UserDto
{
public long Id { get; set; }
public string Username { get; set; }
// 不包含密码等敏感字段
}
复制代码
主要特点:
用于在不同层之间传输数据的对象
通常是实体类的精简版,只包含需要传输的字段
可以组合多个实体的数据
去除了敏感信息,更安全
可以添加额外的展示字段,更适合业务需求
3. Request(哀求模子)
专门用于吸收 API 哀求的数据模子。
// 例如 CreateUserRequest.cs
public class CreateUserRequest
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
}
复制代码
主要特点:
专门用于吸收 API 哀求的数据模子
包含数据验证特性(如 Required、StringLength 等)
只包含客户端需要提交的字段
可以根据不同的操纵(增、删、改)定义不同的哀求模子
更好地控制客户端可以提交的数据范围
4. Response(响应模子)
统一的 API 响应格式。
// 例如 ApiResponse.cs
public class ApiResponse<T>
{
public int Code { get; set; }
public string Message { get; set; }
public T? Data { get; set; }
}
复制代码
主要特点:
统一的 API 响应格式
包含状态码、消息等通用字段
可以包装任意类型的响应数据
便于统一处理成功/失败的响应
有利于前端统一处理响应结果
分层的主要好处
1. 关注点分离
每种模子都有其特定的职责
不同层级利用不同的模子,避免耦合
2. 安全性
实体类中的敏感信息不会直接暴露
可以控制客户端能够访问的数据范围
3. 灵活性
可以根据不同场景利用不同的模子
数据库布局变化时,只需修改实体类
4. 可维护性
代码布局清楚,易于明白和维护
便于举行单元测试
便于处理版本升级和 API 变更
5. 验证和转换
哀求模子可以举行数据验证
DTO 可以举行数据转换和组合
现实开辟中的数据流向
graph LR A[客户端哀求] --> B[Request模子] B --> C[业务处理] C --> D[Entity实体] D --> E[数据库] E --> F[Entity实体] F --> G[DTO转换] G --> H[Response模子] H --> I[客户端响应]这种模式虽然看起来代码量增加了,但是带来的好处宏大于维护成本,特别是在大型项目中更为显着。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
花瓣小跑
论坛元老
这个人很懒什么都没写!
楼主热帖
【电脑配置】新电脑买回来怎么配置? ...
数理逻辑第4-5章
使用axios发送post请求上传文件(multip ...
应急响应(总)
最简单易懂的ios p12证书 和描述文件的 ...
【网络攻防】常见的网络攻防技术——黑 ...
使用 Mypy 检查 30 万行 Python 代码, ...
计算机网络原理(谢希仁第八版)第六章课 ...
XXE漏洞学习
gorm操作sqlite3,高并发读写如何避免 ...
标签云
国产数据库
集成商
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表