我声明一个IUser这样的接口,只有一个方法就是获取用户名称
public interface IUser
{
string getUserName();
}
{
string getUserName();
}
业务逻辑在使用时只对接口进行操作string UserName=user.getUserName();(user是IUser类型)
好,假设我当前要实现的是对SqlServer进行操作读取用户名称
public class SqlUser:IUser
{
public string getUserName(){.}
}
{
public string getUserName(){.}
}
如果有一天要换成Oracle的话怎么办呢?如果是你的业务逻辑在调用用户名称都是针对接口编程的话,那么很简单,你只要加一个实现类和更改你的配置即可
public class OracleUser:IUser
{
public string getUserName(){.}
}
{
public string getUserName(){.}
}
你的业务逻辑一字也不用动。
**说明一下,通常是这样创建IUser类型:
建立一个具有实际操作的类的实例,然后把该实例显式转换成对应的接口类型,如下:
SqlUser sqluser = new SqlUser();
IUser user = (IUser)sqlUser;
IUser user = (IUser)sqlUser;
照这样思考,如果改成了Oracle数据库,除了修改实现的类,还要修改以上两行代码,通常的做法是建立一个Factory类,作为中间加工厂,里面是代码较少的静态方法,里面主要实现上面两句.