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

需求:

代码:

 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 @ 2014-04-01 19:16  Leo C.W  Views(2115)  Comments(7Edit  收藏  举报