依赖接口编程

//分层的思想:模块内部之间高内聚,模块外部之间低耦合
//当遇到跨数据库时候,数据库访问驱动层就会产生变化,就会直接影响采用高耦合使用该层的的代码块
//解决模块间高耦合的状况思路:利用接口或者抽象类来进行隔离,不再依赖具体的类的实现(new xxx)

依赖接口编程:
//UserInfoDal userInfoDal = new UserInfoDal(); //这种直接new出DAL层的内容是一种高耦合,只要DAL层的类发生变化这里也会受到很多影响
//所以不应该依赖【UserInfoDal userInfoDal = new UserInfoDal()】这种方法,而是依赖【UserInfo的接口:IUserInfo】
//依赖接口的做法:IUserInfoDal userInfoDal = new UserInfoDal(),这样字不管实例怎么变化,接口是不会变化的,而UserInfoDal是实现了接口IUserInfoDal
//IUserInfoDal userInfoDal =new UserInfoDal();//依赖接口编程,所有实现接口的类都遵从接口的规范约束

(1)基类接口:
namespace My.OA.IDal
{
//只要跨层跨模块,就一定要用接口进行隔离,哪怕这个接口没有意义,层与层之间必须依赖接口不是依赖具体的实现
//职责:数据库访问层接口基类
public interface IBaseDal<T> where T:class ,new()
{
bool AddEntityInfo(T TModel); //接口的方法默认是Ppublic的,不需要方法实体
//删
bool DeleteEntityInfo(T TModel);//实现了接口的类,必须实现它的方法,这样就形成一种约束规范,只要实现了这个接口的类都有这个接口的同名方法。实现接口方法:public bool DeleteEntityInfo(T TModel){}
//改
bool UpEntityInfo(T TModel);
//查
IQueryable<T> GetEntityInfo(Expression<Func<T,bool>> whereLambda);
//分页
IQueryable<T> GetPagingEntityInfo<s>(int pageSize, int pageIndex, out int total, Expression<Func<T, bool>> whereLambda, Expression<Func<T, s>> orderLambda, bool isDesc);
}
}

(2)实现基类接口:
public interface IUserInfoDal:IBaseDal<UserInfo>//实现公共方法接口
{
}
(3)基类;
/// <summary>
/// 职责:封装所有DAL公共的方法
/// 类的职责要单一
/// </summary>
public class BaseDal<T> where T:class ,new ()
{
//Entities myEntities = new Entities();
//这是一种依赖抽象编程,不是依赖具体的实例,能用抽象编程的地方就尽量用,做到维护性最好
public DbContext myEntities
{
get { return DataBaseContextFactory.GetDataTabelContext(); }
}
//增
public bool AddEntityInfo(T TModel)
{
myEntities.Set<T>().Add(TModel);
//if (myEntities.SaveChanges() > 0)
//{
// return true;
//}
//else
//{
// return false;
//}
return true;
}
//删
public bool DeleteEntityInfo(T TModel)
{
myEntities.Entry<T>(TModel).State = EntityState.Deleted;
//if (myEntities.SaveChanges() > 0)
//{
// return true;
//}
//else
//{
// return false;
//}
return true;
}
//改
public bool UpEntityInfo(T TModel)
{
myEntities.Entry<T>(TModel).State = EntityState.Modified;
//if (myEntities.SaveChanges() > 0)
//{
// return true;
//}
//else
//{
// return false;
//}
return true;
}
//查
public IQueryable<T> GetEntityInfo(Expression<Func<T,bool>> whereLambda)
{
//Set<T>()根据泛型T在上下文返回一个DBset实例
return myEntities.Set<T>().Where(whereLambda).AsQueryable();
}
//分页
public IQueryable<T> GetPagingEntityInfo<s>(int pageSize, int pageIndex, out int total, Expression<Func<T, bool>> whereLambda, Expression<Func<T, s>> orderLambda,bool isDesc)
{
//s是方法泛型,约束排序的类型
total = myEntities.Set<T>().Where(whereLambda).Count();
if (isDesc)
{
var temp = myEntities.Set<T>().Where(whereLambda).OrderByDescending<T, s>(orderLambda).Skip(pageSize * (pageIndex - 1)).Take(pageSize);
return temp;
}
else
{
var temp = myEntities.Set<T>().Where(whereLambda).OrderBy<T, s>(orderLambda).Skip(pageSize * (pageIndex - 1)).Take(pageSize);
return temp;
}
}
}

实现基类和接口:
public class UserInfoDal:BaseDal<UserInfo>,IUserInfoDal------这样BaseDal<UserInfo>就对接口的方法进行隐式重写了
{
}
面向接口编程
IUserInfoDal userInfoDal = new UserInfoDal()

时间: 2024-11-01 01:13:24

依赖接口编程的相关文章

C#——依赖接口编程与简单工厂

在开发一个项目的时候,有时候会碰到这样一个问题:就是项目开发到一半时,原先对数据库的访问走的是ADO.NET,中途项目经理突然要求改成使用EF实体模型去访问数据库......呃好吧!这样的话就需要去把原有的代码个修改,我们都知道在ADO.Net中,数据访问层DAL与业务逻辑层是耦合在一块的,当数据访问层的代码由原来的使用ADO.NET去访问数据库变为使用EF实体模型去访问数据库时,业务逻辑层BLL的代码也要去相应的改变(这是一件相当痛苦的事情) 1 //private UserEFDAL use

那些年搞不懂的高深术语——依赖倒置?控制反转?依赖注入?面向接口编程

那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力.然而,你一定曾为这些“高深术语”感到过困扰.也许时至今日,你仍对它们一知半解.不过就在今天,这一切都将彻底改变!我将带领你以一种全新的高清视角进入奇妙的编程世界,领略涵泳在这些“高深术语”中的活泼泼的地气,以及翩跹于青萍之末的云水禅心. ·内聚 内聚,通俗的来讲,就是自己的东西自己保管,自己的事情自己做. 经典理论告诉我们,程序的两大要素:一个是数据(data),一个是操作(opration).而 PASCA

大话依赖倒置?控制反转?依赖注入?面向接口编程

那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力.然而,你一定曾为这些“高深术语”感到过困扰——依赖倒置•控制反转•依赖注入•面向接口编程.也许时至今日,你仍对它们一知半解.不过就在今天,这一切都将彻底改变!我将带领你以一种全新的高清视角进入奇妙的编程世界,领略涵泳在这些“高深术语”中的活泼泼的地气,以及翩跹于青萍之末的云水禅心. ·内聚 内聚,通俗的来讲,就是自己的东西自己保管,自己的事情自己做. 经典理论告诉我们,程序的两大要素:一个是数据(data),

面向接口编程

系列——MEF实现设计上的“松耦合”(终结篇:面向接口编程) 序:忙碌多事的八月带着些许的倦意早已步入尾声,金秋九月承载着抗战胜利70周年的喜庆扑面而来.没来得及任何准备,似乎也不需要任何准备,因为生活不需要太多将来时.每天忙着上班.加班.白加班,忘了去愤,忘了去算计所谓的价值.天津爆炸事故时刻警示着我们生命的无常,逝者安息,活着的人生活还得继续,珍惜生命,远离伤害.武汉,这座炙热的城市,虽值金秋,却依然经受着“秋老虎”的烘烤,马路上蒸腾的热气迎面袭来,全身毛孔张开,汗流不止,在这般高温下,似乎

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

1,从一开始学.NET变学了最简单的框架,三层框架,多层框架应用的也比较广泛.自从从事SharePoint开发以后,对.NET方面的知识都渐渐的遗忘了,ASP.NET和ASP.NET MVC也感觉越来越陌生,但一直感觉框架很优美,设计的很合理.晚上无聊的时候还是学一下!本来有一些疑惑的地方,写一写博客,从头到尾缕一遍,也会特别清晰! 2,常见的三层框架Dal层,Bll层,UI层! 3,(1)第一种变化:现在有这么一种情况,Dal层和数据库连接有可能用ORM框架,也有可能使用原生的ADO.NET!

java面向接口编程

在oop中有一种设计原则是面向接口编程,面向接口编程有非常多优点,详细百度一大片.我来谈一下详细的使用中的一些不成熟的见解.! 首先面向接口编程能够消除类之间的依赖关系,使得业务仅仅依赖接口. 这样有什么优点呢? 这种优点大大的.比方说我们声明一个car的接口.我们对车有下面行为,我们能够开车.洗车,推车,修车,拆车等等, 详细用代码实现: package com.panther.dong.faceinterface; /** * Created by panther on 15-8-9. */

Spring中di配合接口编程

一:DI基本概念 依赖注入(DI),是spring容器实现的基础,在spring-core模块中实现的.所谓DI,就是指对象是被动接受依赖类而不是自己主动去找,换句话说就是指对象不是从容器中查找它依赖的类,而是在容器实例化对象的时候主动将它依赖的类注入给它. DI作用: di配合接口编程,的确可以减少层(web层) 和 业务层的耦合度. 二:DI配合接口编程案例 1.项目截图 2.基本代码 package com.cloud.inter; public interfaceChangeLetter

iOS开发之接口编程那些事

来自:庞海礁 链接:http://www.olinone.com/?p=429 接口是一系列可调用方法的集合.何为接口编程?接口编程是指当写一个函数或一个方法时,我们应该更加关注具体的接口,而不是实现类.具体理解可以参考这篇文章 http://www.vaikan.com/program-to-an-interface-fool/ 在OC中,接口又可以理解为Protocol,面向接口编程又可以理解为面向Protocol编程,或者面向协议编程.在Swift中,苹果大幅强化了 Protocol 在这

设计模式后的设计理念:需求变化,针对接口编程,优先使用聚合

模式的基本元素:模式的名称,该模式所能解决的问题(模式应用的场景),解决方案,使用该模式后的结果(包括优点和缺点) 模式的分类: 架构模式:架构模式描述了软件系统基本的结构组织策略,实际上就是关于软件的宏观组织的规则和指南 设计模式:设计模式描述的是在软件系统的某一局部不断重现的核心解决方案,这种解决方案以完善的设计结构出现,可以被应用到以后出现的类似的语境中 通用职责分配软件模式(GRASP模式):描述了在面向对象设计过程中把职责分配给系统中不同对象的有效经验和基本原则,GRASP模式只是对职