请看高质量的代码——更新
需求:
代码:
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步,提交到数据库。
注意这里异常的抛出是很随意的,这得益于一个好的架构。一个好的架构允许你的代码在任何地方随意的抛出异常,并且不要去建异常类,那样做会阻碍你抛出对终端用户有意义的错误信息。