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.AdoNetDal 26 { 27 public class UserInforDal:IUserInforDal 28 { 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 }
此处的接口做到了,约束实例的方法名,在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); }
代码写到这儿算是比之前好了一点,但是还是不太完美,因为当需要更换具体Dal的实例时,我们还需要更改New的实例!程序中可能有很多地方都用到了这个实例,改动起来也比较麻烦!下一步就要解决这个问题!
一步一步搭建开发框架(一)依赖抽象编程,布布扣,bubuko.com