请看高质量的代码——更新

需求:

代码:

复制代码
 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步,提交到数据库。

 注意这里异常的抛出是很随意的,这得益于一个好的架构。一个好的架构允许你的代码在任何地方随意的抛出异常,并且不要去建异常类,那样做会阻碍你抛出对终端用户有意义的错误信息。

 

posted @   Leo C.W  Views(2117)  Comments(7Edit  收藏  举报
编辑推荐:
· 从 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)
点击右上角即可分享
微信分享提示