ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程
1.新建面向接口编程的类库
(1)在这篇博客中我们主要针对面向接口进行编程,既然是面向接口,那么我们就必须要在创建一个存放接口的类库,然后创建几个接口,下面我就详细的讲述一下创建这个接口类库和接口类的过程。
(2)首先我们在这个项目下面创建数据库访问接口层的一个类库,起名为:LYZJ.UserLimitMVC.IDAL,然后我们创建三个接口类,依此是:IBaseRepository.cs,IUserInfoRepository,IRoleRepository。我只是这样说的话可能有些人会感觉云里雾里的,所以我这里就将项目的图形放在上面,方便大家理解,如图所示:
(3)下面我们详细来分析LYZJ.UserLimitMVC.IDAL类库下面的三个接口类所实现的功能。
2. LYZJ.UserLimitMVC.IDAL类库中三个接口类的分析
(1)IBaseRepository,在这个基接口中我们封装了所有操作数据库的方法,从另外一种角度来看接口的话接口就是一个约束,我们定义接口约束了操作数据库的方法,下面因为每个数据库实体(UserInfo,RoleInfo)都需要操作数据库的接口,所以我定义了一个基接口用来实现对数据库的访问方法的封装,然后数据库实体只需要继承自这个基接口即可,代码如下:
1 public inte易做图ce IBaseRepository<T> where T : class, new()
2
3 {
4
5 // 实现对数据库的添加功能,添加实现EF框架的引用
6
7 T AddEntity(T entity);
8
10
11 //实现对数据库的修改功能
12
13 bool UpdateEntity(T entity);
14
15
16
17 //实现对数据库的删除功能
18
19 bool DeleteEntity(T entity);
20
21
22
23 //实现对数据库的查询 --简单查询
24
25 IQueryable<T> LoadEntities(Func<T, bool> whereLambda);
26
27
28
29 /// <summary>
30
31 /// 实现对数据的分页查询
32
33 /// </summary>
34
35 /// <typeparam name="S">按照某个类进行排序</typeparam>
36
37 /// <param name="pageIndex">当前第几页</param>
38
39 /// <param name="pageSize">一页显示多少条数据</param>
40
41 /// <param name="total">总条数</param>
42
43 /// <param name="whereLambda">取得排序的条件</param>
44
45 /// <param name="isAsc">如何排序,根据倒叙还是升序</param>
46
47 /// <param name="orderByLambda">根据那个字段进行排序</param>
48
49 /// <returns></returns>
50
51 IQueryable<T> LoadPageEntities<S>(int pageIndex, int pageSize, out int total, Func<T, bool> whereLambda,bool isAsc, Func<T, S> orderByLambda);
52
53 } (2)IUserInfoRepository,这个接口只需要实现继承自基接口即可,当继承基接口的时候就实现了基接口中的所有方法,代码如下:
1 public inte易做图ce IUserInfoRepository:IBaseRepository<UserInfo>
3 {
4
5 } (3)IRoleRepository,和第(2)个解释一样,代码如下:
1 public inte易做图ce IRoleRepository:IBaseRepository<Role>
2
3 {
4
5 } (4)注意:当我们操作IUserInfoRepository和IRoleRepository的时候我们需要添加LYZJ.UserLimitMVC.Model的引用,因为我们要用到数据库实体对象。
3.数据库访问层的重新设计(LYZJ.UserLimitMVC.DAL类库)
(1)角色仓储(RoleRepository)的设计
当我们完成数据访问接口层的时候,这时候我们就要重新修改数据库访问层的数据,因为要用到数据库访问接口层,所以我们要添加数据库接口层的DLL,LYZJ.UserLimitMVC.IDAL。
然后我们的角色仓储要继承数据库访问接口层的角色仓储接口,代码如下:
1 public class RoleRepository : BaseRepository<Role>, IRoleRepository
2
3 {
4
5 } (2)用户仓储(RoleRepository)的设计,和上面的解释一样,代码如下:
1 public class UserInfoRepository : BaseRepository<UserInfo>, IUserInfoRepository
2
3 {
4
5 } (3)数据库访问层的设计思路是:先继承基类,在实现接口。上面的实现正是引用了这句话来实现。
注解:数据库访问层我们就说到这里了,如果大家有什么不懂的或者不知道的,可以给我留言,我将在第一时间回复,下面我们开始研究业务逻辑层的实现
4.业务逻辑层(BLL)初探
(1)从开始到现在我们的数据库访问层只能说是暂时告一段路了,因为在后面我们还会修改数据库访问层,我们现在写的代码并不是一直不变的,而是随着写慢慢的我们就会提取出来很多东西进行封装,所以如果你仔细看我博客的话我一直在修改这些代码。
(2)业务逻辑层是什么呢?我相信如果做过asp.net三层架构的用户都是理解的,就是对数据库访问层的封装,在这里我也不详细的解释什么是业务逻辑层了,如果大家不太理解的话可以去百度或者谷歌搜索一下。
(3)下面我们对业务逻辑层开始进行操作
5.业务逻辑层(LYZJ.UserLimitMVC.BLL)的实现
(1)首先我们新建一个UserInfoService类,这个类就是对UserInfo的业务逻辑进行实现(增删改查)。
(2)如果我们要实现业务逻辑层的话,我们就要添加数据库访问层和实体层以及操作Entity FrameWork框架的的DLL,如下:LYZJ.UserLimitMVC.DAL,LYZJ.UserLimitMVC.IDAL,LYZJ.UserLimitMVC.Model,System.Data.Entity。
6.UserInfo业务逻辑类的实现
(1)首先我贴出UserInfo.cs类的代码,在这里我们要仔细的分析一下UserInfo类的代码的实现:
1 namespace LYZJ.UserLimitMVC.BLL
2
3 {
4
5 /// <summary>
6
7 /// UserInfo业务逻辑
8
9 /// </summary>
10
11 public class UserInfoService
12
13 {
14
15 //访问DAL实现CRUD
16
17 //private DAL.UserInfoRepository _userInfoRepository = new UserInfoRepository();
18
19 private IUserInfoRepository _userInfoRepository = new UserInfoRepository();
20
21
22 public UserInfo AddUserInfo(UserInfo userInfo)
23
24 {
25
26 return _userInfoRepository.AddEntity(userInfo);
27
28 }
29
30
31 public bool UpdateUserInfo(UserInfo userInfo)
32
33 {
34
35
补充:Web开发 , ASP.Net ,