当前位置:编程学习 > asp >>

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 interface 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 interface IUserInfoRepository:IBaseRepository<UserInfo>
3     {
4
5     }  (3)IRoleRepository,和第(2)个解释一样,代码如下:

1    public  interface 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 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,