ASP.NET MVC+EF框架+EasyUI实现权力管理系列(3)-面向接口的编程

 
 ASP.NET MVC+EF框架+EasyUI实现权力管系列
(开篇) 
(1)框架搭建
    (2):数据库访问层的计划性Demo

   
“浩然老师,今晚我们去淄博饭店吃饭,我错过那吃了饭还失广场找你,我得由个车过去,你告知我大地方应该怎么叫”

  前言:这篇博客当数额访问层的基础方面我们继续攻读对这Demo的开,希望大家还吓好理解一下者Demo的架构,到最后自己实现权力的当儿自己便简单的说一下搭建过程就是OK了,因为这个Demo的思量便按权限的计划方去规划的,下面我们开始介绍面向接口的编程思想,如果感到好的语可以触一下支撑,下面我们切入主题。

    “ 四宝山,联通路与宝山路交叉路口向北到四宝山公安局站点下车”

1.新建面向接口编程的类库

 
……广场耀眼的灯光不怕寒冷,殷勤地照着那么长红色围巾,红红的火花活泼地跳,托在展颜而笑的脸面像风中开的梅,相同之舞曲耐心地同百分之百所有循环,寒气成雪薄雾一般包围上来,又被激情的舞步驱散,一个时迅速过去了……两个与众不同的后自习,完成了常备近一个月份之课,创造了水师舞速成的吉尼斯记录。

  (1)在马上首博客中我们根本对面向接口进行编程,既然是面向接口,那么我们就非得使于开立一个存放接口的类库,然后创建几个接口,下面我就算详细的叙述一下创是接口类库和接口类的历程。

     
牛山淄水美人兮,直奔花山浩然来,为健身而舞蹈,为快而仿照,紧紧握住这,内寻那份执着,不畏严寒,我由风情万栽。这是怎么样一栽舞者精神!

  (2)首先我们以此路下创建数据库访问接口层的一个类库,起名为:LYZJ.UserLimitMVC.IDAL,然后我们创建三只接口类,依此是:IBaseRepository.cs,IUserInfoRepository,IRoleRepository。我只是这样说之说话或有些人会见倍感云里雾里的,所以自己这边就用品种之图片放在上面,方便大家领略,如图所示:

    “We are on the way back home. Nice to have met you. Thanks again”

      
   图片 1

    原谅我摔英语啦!”

  (3)下面我们详细来分析LYZJ.UserLimitMVC.IDAL类库下面的老三个接口类所实现之机能。

    “我投汉语”:“我们登上回家的路。好极了,美丽地碰到,再谢!”

2.
LYZJ.UserLimitMVC.IDAL类库中三只接口类的辨析

   
“在匪忙的下,给你少单作业:一,巩固所学舞;二,再投篇英语日记,记录转漂亮之宝山广场……”

  (1)IBaseRepository,在这基接口中我们封装了独具操作数据库的方,从另外一栽角度来拘禁接口的语句接口就是一个束缚,我们定义接口约束了操作数据库的计,下面坐每个数据库实体(UserInfo,RoleInfo)都亟需操作数据库的接口,所以自己定义了一个基接口用来落实对数据库的走访方法的包,然后数据库实体只待连续自是基接口即可,代码如下:

    “Thanks for the homework. A little hard but I will try”

 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     }

      “you are really great.”

  (2)IUserInfoRepository,这个接口就需要贯彻持续自基接口即可,当继承基接口的时候就贯彻了基接口中之所有办法,代码如下:

      …… 人下车了,包包还于车上也!

1     public interface IUserInfoRepository:IBaseRepository<UserInfo>
3     {
4 
5     }

      最后轮在自己摔半句美语了:“you are really great,too!”

  (3)IRoleRepository,和第(2)个说一样,代码如下:

图片 2

1    public  interface IRoleRepository:IBaseRepository<Role>
2 
3    {
4 
5     }

图片 3

  (4)注意:当我们操作IUserInfoRepository和IRoleRepository的时节咱们要添加LYZJ.UserLimitMVC.Model的援,因为我们要为此到数据库实体对象。

图片 4

3.数据库访问层的重规划(LYZJ.UserLimitMVC.DAL类库)

万顷文化咨询承接企业管理、法律、合同、安全、环保、消防、建设管理咨询策划、诗书交流、个人周易起名、舞蹈培训。15689302858

  (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             return _userInfoRepository.UpdateEntity(userInfo);
36 
37         }
38 
39     }
40 
41 }

  (2)因为咱们的作业逻辑层要就此到实体对象,也尽管是UserInfo,所以这边我们要添加引用,这个我再次点就涉及过了。业务逻辑层就是错开拜访数据库访问层(DAL),然后实现对数据库的增删改查,所以我们就算得定义一个数据库访问层的实例:private
DAL.UserInfoRepository _ userInfoRepository=new
UserInfoRepository();但是要我们这么做的语句虽净的背了俺们说之依赖性接口编程,所以我们不建议这样写,既然我们都产生矣接口了,那么我们得因接口定义:private
IUserInfoRepository _ userInfoRepository=new
UserInfoRepository();,那么这半种植写法的异样在何呢?它们有什么异样也?下来自己大体的游说一下:

  (3)上面两种概念的分别在何

      上面立有限种写法,可能有的人会当并未分,其实不然,这里如此描写的区分很酷,如果我们于底下来成千上万办法吧,我们拥有的办法还使失去调整用存储里面的主意,而者蕴藏也是接口实例,跟现实的兑现就无什么关联,也就是说我们工作逻辑层依赖之数码访问层的接口,只要接口不转移,那么下的代码都是匪会见转移之,如果某平等龙我们用为此ADO来实现这意义的话,我们只需要替换掉new后面的UserInfo仓储,换成ADO.NET实现之贮存,这样的话我们下面的方式还是免欲扭转之,这就是所谓的凭接口编程。只要接口不弯,那么我们下面的代码永远不见面转。

7.不想new
UserInfoRepository();仓储,怎么办?

  (1)通过上面我们定义接口来实例化对象就采取了借助接口的编程,但是现在己还无思new
UserInfoRepository();实例,因为这个目标极其有或变动,有或采用EF实现的积存,有或行使ADO实现之囤,而且我们筹到事情逻辑层的实例都要定义仓储对象,那么当我们实体很多之时光,维护起来老之免便于,我们需要每个页面的去窜这些东西,所以当此地我们就是会想在用相同种植啊法以之蕴藏做为同样栽参数传递进去,而我辈仅仅需要在传递参数的切近中进行保障,下面我们虽分析一下如何采取。

  (2)遇到变化点,我们即便假设惦记方法看能无可知封装起来,这里当好了,我们拿获取这仓储实例的计放到一个共用的地方,改变之上一直改动是集体的地方就尽了,
那么这里怎么搞也?我们先是想到的最简易的即使是大概工厂,那么什么是略工厂也?其实十分粗略,我们设了解使是厂,就是也我们创建实例的类,既然我们这边用一个公共的地方,那么我们便设当LYZJ.UserLimitMVC.DAL这个类库下面加加一个RepositoryFactory类,这个近乎里我们建立了一个UserInfoRepository属性,这个静态属性之中纵使啊我们回去这个蕴藏即可。那么此时要我们想只要改的讲话就是直接去改变UserInfoRepository属性即可

  (3) RepositoryFactory类的贯彻

      (1)同咱地方的分析,下面我们实现这仿佛的代码,代码如下:

 1 namespace LYZJ.UserLimitMVC.DAL
 2 
 3 {
 4 
 5     public static class RepositoryFactory
 6 
 7     {
 8 
 9         public static IUserInfoRepository UserInfoRepository
10 
11         {
12 
13             get { return new UserInfoRepository(); }
14 
15         }
16 
17     }
18 
19 }

       
 (2)然后我们修改工作逻辑层的概念实例化仓储的代码如下:

      private IUserInfoRepository
_userInfoRepository = RepositoryFactory.UserInfoRepository;

   (3)这时候我们即便好了之蕴藏的包裹,现在咱们若想使替换仓储的言辞,我们仅待去替换RepositoryFactory中之艺术即可,这为不怕是一个简便的粗略工厂,当我们加加上此简单工厂之后,我们数据库访问层以及作业逻辑层之间的依赖性就越是的减少了耦合度。

8.小结

  (1)到此地就首博客终于就了,现在自才知对正在型写博客真心不好写,语言组织没写技术点那么便宜,导致自家当时首文章写了5独小时,不过功夫不负有心人,终于成功了,相比大家看得下会比较为难理解,如果大家发出什么不理解的得咨询我,我将这首博客的代码上传到CSDN中,大家好错过下载一边看代码一边看博客,我眷恋然大家好掌握。

  (2)下面是今天描绘了这篇博客之后现在底花色架构

     图片 5

  (3) 依赖接口编程图纸

     图片 6

源码下载

 

   (1):一体化源码下载

 

  Kencery回来本系列开篇

  

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图