从零开始写C# MVC框架之--- 服务接口与实现

阳光穿透心脏的1/2处 2022-09-25 15:15 371阅读 0赞

服务层,设计时添加了接口与实现,而面向接口编程也是好处多多。来上图看服务层结构

Center

Zy.Xn.IServices是接口,Zy.Xn.Services是接口的实现,在对应的项目下建立了System文件夹,系统框架的方法放在此文件夹下,所有接口服务需要继承 IService 类(依赖注入释放资源),在Zy.Xn.Service的实现类中需要继承 ServiceBase 类(提供EF context上下文)

在项目中很大的好处是,不需要知道具体业务,在页面设计未出前,就能直接开发 增、删、改方法,缩短整体开发时间

描述完它们的作用后,上一段用户接口与服务的代码:

IUserService:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Zy.Utility.Core;
  7. using Zy.Xn.Model.System;
  8. namespace Zy.Xn.IServices
  9. {
  10. public interface IUserService : IService
  11. {
  12. /// <summary>
  13. /// 创建用户
  14. /// </summary>
  15. /// <param name="user"></param>
  16. /// <returns>用户Id</returns>
  17. int CreateUser(User user);
  18. /// <summary>
  19. /// 修改用户
  20. /// </summary>
  21. /// <param name="user"></param>
  22. void UpdateUser(User user);
  23. /// <summary>
  24. /// 删除用户
  25. /// </summary>
  26. /// <param name="id"></param>
  27. void DeleteUser(int id);
  28. /// <summary>
  29. /// 获取用户
  30. /// </summary>
  31. /// <param name="id"></param>
  32. /// <returns></returns>
  33. User GetUser(int id);
  34. /// <summary>
  35. /// 获取用户
  36. /// </summary>
  37. /// <param name="loginUserName"></param>
  38. /// <returns></returns>
  39. User GetUser(string loginUserName);
  40. /// <summary>
  41. /// 获取组织机构下的用户
  42. /// </summary>
  43. /// <param name="deptId"></param>
  44. /// <returns></returns>
  45. IEnumerable<User> GetUsers(int deptId);
  46. /// <summary>
  47. /// 获取组织机构下的用户列表
  48. /// </summary>
  49. /// <param name="query"></param>
  50. /// <returns></returns>
  51. PageModel<User> GetPageUsers(UserQuery query);
  52. }
  53. }

UserService:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Zy.Utility.Core;
  7. using Zy.Xn.IServices;
  8. using Zy.Xn.Model.System;
  9. namespace Zy.Xn.Services
  10. {
  11. public class UserService : ServiceBase, IUserService
  12. {
  13. /// <summary>
  14. /// 创建用户
  15. /// </summary>
  16. /// <param name="user"></param>
  17. public int CreateUser(User user)
  18. {
  19. user.LoginEncryptKey = "key";
  20. user.IsDel = false;
  21. user.CreateTime = DateTime.Now;
  22. context.Users.Add(user);
  23. context.SaveChanges();
  24. return user.Id;
  25. }
  26. /// <summary>
  27. /// 修改用户
  28. /// </summary>
  29. /// <param name="user"></param>
  30. public void UpdateUser(User user)
  31. {
  32. var userModel = context.Users.FirstOrDefault(item => item.Id == user.Id);
  33. if (userModel != null)
  34. {
  35. userModel.UserName = user.UserName;
  36. userModel.UserNumber = user.UserNumber;
  37. userModel.LoginUserName = user.LoginUserName;
  38. userModel.LoginPassword = user.LoginPassword;
  39. userModel.LoginEncryptKey = user.LoginEncryptKey;
  40. userModel.Sex = user.Sex;
  41. userModel.State = user.State;
  42. userModel.SortIndex = user.SortIndex;
  43. context.SaveChanges();
  44. }
  45. }
  46. /// <summary>
  47. /// 删除用户
  48. /// </summary>
  49. /// <param name="id"></param>
  50. public void DeleteUser(int id)
  51. {
  52. var user = context.Users.FirstOrDefault(item => item.Id == id);
  53. if (user != null)
  54. {
  55. //user.IsDel = true;
  56. context.Users.Remove(user);
  57. context.SaveChanges();
  58. //删除用户角色信息
  59. var roleUsers = context.RoleUsers.Where(item => item.UserId == id).ToArray();
  60. context.RoleUsers.RemoveRange(roleUsers);
  61. context.SaveChanges();
  62. }
  63. }
  64. /// <summary>
  65. /// 获取用户
  66. /// </summary>
  67. /// <param name="id"></param>
  68. /// <returns></returns>
  69. public User GetUser(int id)
  70. {
  71. return context.Users.FirstOrDefault(item => item.Id == id);
  72. }
  73. /// <summary>
  74. /// 获取用户
  75. /// </summary>
  76. /// <param name="userName"></param>
  77. /// <returns></returns>
  78. public User GetUser(string loginUserName)
  79. {
  80. return context.Users.FirstOrDefault(item => item.LoginUserName == loginUserName);
  81. }
  82. /// <summary>
  83. /// 获取组织机构下的用户
  84. /// </summary>
  85. /// <param name="deptId"></param>
  86. /// <returns></returns>
  87. public IEnumerable<User> GetUsers(int deptId)
  88. {
  89. return context.Users.Where(item => item.DeptId == deptId).ToArray();
  90. }
  91. /// <summary>
  92. /// 获取组织机构下的用户列表
  93. /// </summary>
  94. /// <param name="query"></param>
  95. /// <returns></returns>
  96. public PageModel<User> GetPageUsers(UserQuery query)
  97. {
  98. var users = context.Users.Where(item => item.DeptId == query.DeptId && item.IsDel == false);
  99. if (!string.IsNullOrWhiteSpace(query.UserName))
  100. {
  101. users = users.Where(item => item.UserName.Contains(query.UserName));
  102. }
  103. if (!string.IsNullOrWhiteSpace(query.Sex))
  104. {
  105. var sex = (User.UserSexs)Convert.ToInt32(query.Sex);
  106. users = users.Where(item => item.Sex == sex);
  107. }
  108. if (!string.IsNullOrWhiteSpace(query.State))
  109. {
  110. var state = (User.UserStates)Convert.ToInt32(query.State);
  111. users = users.Where(item => item.State == state);
  112. }
  113. int total = users.Count();
  114. users = users.OrderByDescending(item => item.Id).Skip(query.PageSize * (query.PageNo - 1)).Take(query.PageSize);
  115. var page = new PageModel<User>()
  116. {
  117. Total = total,
  118. Data = users.ToArray()
  119. };
  120. return page;
  121. }
  122. }
  123. }

注意:以上只是编写了接口和实现,那怎样在控制器中调用接口,接口自动调用实现方法获取结果呢,这就需要用到autofac依赖注入了,不对之处欢迎指正,谢谢

发表评论

表情:
评论列表 (有 0 条评论,371人围观)

还没有评论,来说两句吧...

相关阅读