我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:六合图库 > 多态逻辑 >

业务逻辑层的封装

归档日期:06-11       文本归类:多态逻辑      文章编辑:爱尚语录

  前言:前面几篇博客我们基本已经介绍完了搭建整个项目和数据库访问层以及一些业务逻辑层的实现,当然了,我们的数据库访问层这样还是可以在进行封装的,但是我到这里就行了吧,项目也不大,不需要那么麻烦的,那么我们今天开始介绍我们需要介绍的内容,那就是我们对业务逻辑的封装,这个博客如果大家要看的话,我建议从第一张开始看是最容易理解的,废话不多说了,我们直接切入主题。

  (1) 从昨天我们对rLimitMVC.BLL类库的操作,我们在这个类库下面添加了UserInfoService,那么其他的实体对象也是有Service,那么这时候又是重复性的动作,UserInfo含有操作数据库的所有方法,Role也含有操作数据库的方法,其他的表一样,那么我们怎么办呢,当然就是封装了,这时候我们就需要建立一个基类来实现这个动作。

  (1)首先BaseService类肯定是一个泛型,限制其继承自类,这里面就会实现相应的增删改查的方法。

  (2)那么这时候我先将BaseService的一部分代码帖上来,然后进行讲解,想必如果开发过这类项目的人都知道这块的使用,但是下面我还是解释一下,解释的不太好,完全是自己的语言,如果谁会解释的更好,希望能够给我留言,我将非常感谢。

  首先写了方法Public T AddEntity(){return CurrentRepository.AddEntity(entity);},那么当我们对实体进行添加的时候,我们首先需要调用T对应的数据库访问层来调用相应的Entity方法,我们在昨天写UserInfoService的时候,我们是直接调用了UserInfoRepository(仓储)的Entity方法,但是现在我们在UserInfoService中的代码都要放到基类中去实现,那么基类中的T对应的是那个数据库访问层的仓储我们是不知道的,那么我们怎么办呢?

  不要慌,我们仔细分析代码的话我们会发现解决之法,现在T对应的仓储是谁呢?我们需要在方法里面调用来实现添加工作,现在首先假设我们知道我们T对应的仓储叫CurrentRepository,我们只需要将entity参数传递给方法即可CurrentRepository.AddEntity(entity);,但是假设是假设,还是不成立的,但是这时候这就是我们的思想,我们已经知道这样可以解决,所以我们只需要找到解决的办法即可。

  当前在我们基类中T对应的仓储是谁我们不知道,这里可以使用反射来实现,但是我这里就不这么做了,既然我们基类不知道T对应的仓储是谁?那么我们子类肯定T对应的仓储是谁,因为子类对应的就是实体,所以这时候我们有办法了,这时候我们只需要让子类来设置这个属性的实例不就完事了吗,这时候我们在基类下面写入一个属性,注意:我们当前仓储可能针对的是所有的表的仓储,那么我们这样写:public abstract void SetCurrentRepository();,那麽下面我们调用接口的属性就完事了。

  这时候我们就想这里我们为什么要这么写呢?因为当前仓储可能指向任何一个仓储,有可能指向UserInfo仓储,也有可能指向RoleInfo仓储等,那么这里我们使用IDAL.IBaseRepositroy完全可以,因为当你仔细看我花的那张图的时候就看到了仓储基本都间接地继承自IBaseRepository仓储,那麽我们使用IBase仓储接收当前的仓储是没有任何问题的。

  关键当我们这么定义的时候CurrentRepository是null,这时候我们下面方法如果调用的话可能会报出异常,那么在调用这个方法之前我们必须为CurrentRepository属性赋值,那麽给这个属性赋值在哪里比较合适呢,我想到了构造方法,构造方法给这个属性赋值最合适,在这当前我们基类中也不知道CurrentRepository赋什么值,只有子类中才知道,这时候父类就想让子类给这个属性赋值,那麽怎么办呢?我们定义一个抽象方法,当我们定义抽象方法的时候我们的类也要改成抽象的,抽象方法如下:public abstract void SetCurrentRepository(); ,这个抽象方法子类必须实现,在这里我在构造函数里面再去调用这个抽象方法。

  在基类里面的构造函数调用父类的纯的抽象方法,那麽经过多态的话最终调用方法的时候去执行子类里面的仓储。

  到这里我关于业务逻辑层的基类解释已经完成了,个人感觉语言真心组织的不好,如果哪位看不懂或者怎么的,可以加群,我们在共同探讨一下,到这里我们的rLimitMVC.BLL类库完成了

  (1)因为这个类库的实现我已经在上面讲玩了,所以这里不累赘的再说了,下面我直接贴最后的代码,大家可以参考一下。

  (1)那麽我们业务逻辑层需不要一个接口层呢?我觉得需要,为什么呢?因为我们涉及到层与层之间的调用了,UI层调用业务逻辑层,我们一定要依赖接口来编程。那麽下面我们来实现业务逻辑接口层,这个和数据访问接口层的作用基本一致。

  (2)首先我们添加一个类库rLimitMVC.IBLL,用来实现对于业务逻辑接口层的封装,然后我们新建三个接口:IUserInfoService,IRoleService,IBaseService。我们需要给这个类库添加Model层的引用。下面我们写出这三个接口层的代码,我这里就不解释了,和前面的意思都差不多。

  (1)当我们实现完业务逻辑接口层的时候,我们就需要让BLL去实现这个接口,我们给BLL的类库添加IBLL的引用,然后让UserInfoService,RoleService实现各自的继承关系,我这里就只贴出RoleService的代码,其他的都一样。

  (1)到这里我们今天的业务逻辑层完成了,从今天开始,我们这个Demo的后台涉及已经全部完成,我们明天开始涉及其前台页面。今天的这篇文章本人感觉写的也不是很好,重点是语言太难组织,灵活性太大,所以需要看此博客的博友们我建议从第一篇博客看起,那麽就能很容易的理解这些讲的是什么。

本文链接:http://lcvam.com/duotailuoji/552.html