请看高质量的代码——更新
需求:
代码:
1 namespace Demo.Services 2 { 3 public class UserService : IUserService 4 { 5 public void UpdateByAdmin(User user, int[] roleIds) 6 { 7 using (var db = new DemoDbContext()) 8 { 9 var dbUser = db.Users.Get(user.Id); 10 if (dbUser == null) 11 { 12 throw new Exception("The user doesn't exist."); 13 } 14 if (!dbUser.Username.Eq(user.Username)) 15 { 16 if (db.Users.Exists(user.Username)) 17 { 18 throw new Exception("The username is already taken."); 19 } 20 } 21 dbUser.UpdateByAdmin(user); 22 dbUser.UpdateRoles(roleIds, db); 23 db.SaveChanges(); 24 } 25 } 26 } 27 }
以上代码代表了标准的更新流程:
- 第1步,从数据库获取实体类实例;
- 第2步,判断是否为空,抛异常;
- 第3步,检查其他数据,抛异常;
- 第4步,更新字段或关联数据;
- 第5步,提交到数据库。
注意这里异常的抛出是很随意的,这得益于一个好的架构。一个好的架构允许你的代码在任何地方随意的抛出异常,并且不要去建异常类,那样做会阻碍你抛出对终端用户有意义的错误信息。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)