ssh开发中dao层跟buz设计需要接口层吗?

目前在开发一个网站,用的是SSH的MVC设计模式.因为以前学习的时候,一般都将dao层跟buz设计成接口层,再来实现这个接口,但是现在是在进行实际的开发,跟我一起开发的那个同事说他们以前都不用接口的,他也是新人,所以我们都不知道谁的办法好.所以在这里请教各位有经验的高手,给我指点一下,先谢过了!
[该贴被admin于2009-04-09 14:32修改过]

>以前都不用接口的
当然错误,因为他不是OO编程,当然就不用接口,接口编程是OO编程的一个象征。

真高兴banq大师能来回答我的问题!
不过我还是不明白,到底要不要接口呢?
我同事他以前开发的那个项目也是SSH的啊,他就不用接口.
我们老师教我们的时候说用接口比较容易扩展,不过我现在还没有体会.
到底要不要用接口?banq大师能讲一个例子吗?当然也欢迎其他高手赐教!

搜一下本站关于接口和面向接口编程的帖子吧

其实这是相互耦合的问题。一般情况下我们要求层与层之间尽量松一些。避免一个层的类变化了,结果所有相关类都要变。
接口的存在就是解耦,隐藏实现用的。如果你面向接口编程,那么只要接口约定不变,调用接口实现的这些类也不需要修改。如果你是具体的类,比如你把一个用JDOM生成XML的组件换成用DOM4j的,就必须修改调用组件的所有的类。

dao会经常变吗?
非要用接口吗?
从jdbc 到hibernate 到jpa
哪次变动了dao?

我觉得业务接口和DAO接口是否需要和楼主项目大小有关系,如果你们架构比较稳定,项目也不太大,而且开发方式比较单一,其实不用接口一样可以完成,但是如果你们架构本身稳定性一般,而且后期维护可能涉及到层内部的升级,比如从JDBC到HIBERNATE的升级过程,而且业务逻辑方面变动性也比较强,那我推荐你使用接口交互。

很简单的道理
比如SERVICE 和 DAO 交互中,在SERVICE 中看到的是 DAO的实现类,如果后期涉及到从JDBC到HIBERNATE的升级,或者是发现原本的DAO实现不够稳定,需要在不影响其他功能正常开发的情况下修改DAO的实现,那么你只需要去写一个完善的DAO实现类,然后注入到原本的SERVICE中就可以了。而实现类直接耦合则意味着可变化的范围比较小。

其实楼主可以去研究一下IOC以及DI 这两个概念,对于接口应该会有很多领悟的。

记得当初这个问题也是令我想了很久,我总是在想,为什么系统要这样设计,为什么,我要知道原因,而不是照猫画虎,楼上说的好,理解接口就是为了解耦,这是关键点,首先来回答你第一个问题,为什么要用DAO接口,DAO是数据访问对象,你在业务逻辑层访问数据库的时候,只要调用DAO接口的方法就好,至于这个DAO的实现类是用HIBERNATE技术也好,还是用JDBC来实现也好,可以灵活的变换DAO实现类即可,当然一般很少也不会去变动技术架构,我现在就没有用DAO接口,直接让业务逻辑层及继承HibernateDaoSupport,第二、为什么需要业务逻辑接口,同理也是为了解耦,在action里面调用业务逻辑接口就好,同时spring框架也是针对接口编程,针对接口编程我们可以利用动态代理的机制,方便的在spring里面配置我们想要的事务机制,可以很好的实现AOP机制,这是我个人的体会,说的不对的地方,还请大家指正,希望对你有些帮助。