首页 > 代码库 > 一步一步搭建开发框架(一)依赖抽象编程

一步一步搭建开发框架(一)依赖抽象编程

1,从一开始学.NET变学了最简单的框架,三层框架,多层框架应用的也比较广泛。自从从事SharePoint开发以后,对.NET方面的知识都渐渐的遗忘了,ASP.NET和ASP.NET MVC也感觉越来越陌生,但一直感觉框架很优美,设计的很合理。晚上无聊的时候还是学一下!本来有一些疑惑的地方,写一写博客,从头到尾缕一遍,也会特别清晰!

2,常见的三层框架Dal层,Bll层,UI层!

3,(1)第一种变化:现在有这么一种情况,Dal层和数据库连接有可能用ORM框架,也有可能使用原生的ADO.NET!这个时候就有了一种变化,所以一定要充分利用C#的面向对象的特性,来封装这种变化。面对这种变化,尽量做到少修改代码或者不修改代码!将Bll层和Dal层的耦合关系降到最低!不管Bll层依赖AdoNetDal还是ORMDal一旦Dal层的实例发生变化,Bll都需要变化,这儿有一种思想叫依赖抽象编程!

(2),假设数据库中有UserInfor表,那么根据三层开发模式,就有UserInforDal.cs,UserInforBll.cs等类!面对不同的访问数据库的方式,又有了不同的类库,AdoNetDal,EFDal等类库,为了做到依赖抽象编程,降低Bll层和Dal层的耦合度,还需要有个类库IDal,其中包含,IUserInforDal.cs等接口。AdoNetDal,EFDal类库中的UserInforDal.cs都实现该接口,在该接口中定义增删改查方法。

 1 public interface IUserInforDal 2     { 3         UserInfor Add(UserInfor userInfor); 4     } 5  6 namespace PCITC.OA.Dal 7 { 8     public class UserInforDal:IUserInforDal 9     {10         public UserInfor AddUserInfor(UserInfor userInfor)11         {12             DataModelContainer dbc = new DataModelContainer();13             dbc.UserInfor.Add(userInfor);14             dbc.SaveChanges();15             return userInfor;16             17         }18 19         public UserInfor Add(UserInfor userInfor)20         {21             return null;22         }23     }24 }25 namespace PCITC.OA.AdoNetDal26 {27     public class UserInforDal:IUserInforDal28     {29         public UserInfor AddUserInfor(UserInfor userInfor)30         {31             return null;32         }33 34         public UserInfor Add(UserInfor userInfor)35         {36             return null;37         }38     }39 }
View Code

 此处的接口做到了,约束实例的方法名,在Bll层切换Dal层实例的时候,不必修改,只要更换实例即可!这样做到了Bll依赖数据库访问层的接口,只有当接口变化的时候,Bll层才需要变化。而Dal层的实例则可以任意变化,不会对Bll造成影响。抽象编程:Bll依赖一个不怎么变化的契约接口,而具体的实现无论怎么变化,都始终在接口约束范围内,不会对Bll造成影响!

private IDal.IUserInforDal userInforDal=new PCITC.OA.AdoNetDal.UserInforDal();        public UserInfor Add(UserInfor userInfor)        {            return userInforDal.Add(userInfor);        }
View Code

 

代码写到这儿算是比之前好了一点,但是还是不太完美,因为当需要更换具体Dal的实例时,我们还需要更改New的实例!程序中可能有很多地方都用到了这个实例,改动起来也比较麻烦!下一步就要解决这个问题!