需求:
代碼:
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步,提交到數據庫。
注意這里異常的拋出是很隨意的,這得益於一個好的架構。一個好的架構允許你的代碼在任何地方隨意的拋出異常,並且不要去建異常類,那樣做會阻礙你拋出對終端用戶有意義的錯誤信息。