最近在搞开发的时候原公司的框架有点疑问希望大家能指点下,情况是这样的公司在开发的时候用mvc形式,其中有dao层,但我有点不明白的是每model的数据库操作都 是一个类,但每个这样的类他都在一个空间有个接口相对就的继承,我就不明白了这样做有什么好处那?
比如,我有个user的model现在要存到数据库里 那就会有个比如接口的空间会有个 user_interface{ insert(user user);
}
然后在dao的类 user_dao:user_interface{
public void insert(User user){}...
}如果有别的model 也是采用这样的方式 我现在不理解的是 这样做有什么特别意义么?而每次在dao的类中加入方法的时候相应的interface也必须加上,这个使用的时候好像用了反射机制,就是不明白这样做有什么好处?希望大家指点下
比如,我有个user的model现在要存到数据库里 那就会有个比如接口的空间会有个 user_interface{ insert(user user);
}
然后在dao的类 user_dao:user_interface{
public void insert(User user){}...
}如果有别的model 也是采用这样的方式 我现在不理解的是 这样做有什么特别意义么?而每次在dao的类中加入方法的时候相应的interface也必须加上,这个使用的时候好像用了反射机制,就是不明白这样做有什么好处?希望大家指点下
2. 面向接口的开发,可以有效实现层间的解耦,同时也方便测试。
接口是方便了拓展,但是这样的接口最起码也要弄个泛型,没必要搞那么一大堆接口出来。
反射是可以实现调用接口里的方法,但是完全没必要。把类对象直接转换为接口就可以使用接口的方法了,不需使用反射。而且反射会有性能问题,必须在需要的情况下才能使用。
接口的使用,简单写个例子,自己的理解。
interface ITest
{
void Test();
}
class ClassTest:ITest
{
void Test()
{
……;
}
}
使用的时候:
ITest test = (ITest)new ClassTest();
test.Test();这样以后有需求,可以再写一个ClassTestII类。
class ClassTestII:ITest
{
void Test()
{
……;
}
}
调用部分只需要把类名改了就好了。
ITest test = (ITest)new ClassTestII();
test.Test();使用正确,最终应该是这个样子的。
我还以为有什么特别的功能那,看的很高深的样子,最主要的是我 晕了
哈哈 汗!!
Interface IDAO{
Insert (Object obj);
}
public class User:IDAO{
public void Insert(Object obj){
User user=(User)obj;
String sql=”insert into user values(“user.name+”,”+user.pwd+”)”;
}
}
如果使用
public static InterFace 来调用 就能体现接口的意义了
比如一个类你用了class UserDao: IUserDao{}但是并没有UserDao dao = new UserDao();
而是IUserDao dao ,并给dao设置了相应的setter和getter,代码中并没有给出具体的实例化。
使用AOP进行dao的注入,假设是<component id="someDao" type ="xxx.xxx.xxx.UserDao"/>
然后有一天你要改了,UserDao过时了,有个小伙子写了个class AccountDao:IUserDao{}
现在要改项目了,你说你愿意改代码,然后编译整个工程呢(UserDao dao = new UserDao();改成AccountDao dao = new AccountDao();) 还是只编译AccountDao所在的工程然后改改AOP配置文件?(<component id="someDao" type ="xxx.xxx.xxx.UserDao"/>改成<component id="someDao" type ="xxx.xxx.xxx.AccountDao"/>即可)AOP原理涉及到了反射,这楼上都说的很清楚了。