yimao的gravatar头像
yimao 2014-11-04 20:37:42

java web项目中dao和service前面为什么要有接口呢??

今天面试问到项目中直接用impl对象就可以实现业务逻辑,为什么还要前面还有一个接口呢?这个问题没有想好怎么回答!希望 大家给一个答案!!!

所有回答列表(10)
zwook的gravatar头像
zwook  LV1 2014年11月5日

为了方便扩展和重用

评论(0) 最佳答案
遇见,的gravatar头像
遇见,  LV36 2014年11月5日

接口提供了一个公用的方法提供方。 接口是用来规定子类的行为的。

举个例子吧 , 比如有个需求, 需要保存客户信息, 有些客户从网站来, 有些从手机客户端来, 有些从后台管理系统录入, 假设不同来源的客户有不同的处理业务流程, 这个时候我定义接口来提供一个保存客户的方法, 然后不同平台实现我这个保存客户的接口, 以后保存客户的话, 我只用知道这个接口就可以了, 具体调用哪个方法  去实例化具体你需要用的类,这也就是JAVA的多态的体现。 而如果你不用接口的话 , 首先我需要哪个方法  我就去实例化哪个类, 冗余很高,  其次扩展很差。  接口就是一个规范, 其子类都会有他提供的方法。 统一管理。

嗼小鱼的gravatar头像
嗼小鱼  LV10 2014年11月5日

面向接口编程。定义一系列的公用接口,多子类可实现,也就是便于以后扩展,维护和节约有效的时间,相同接口,但是可有不同实现,互不干扰。

当然,谈话可维护,可扩展,可分离,这又涉及到基础上面来了,你可以看看基础!

所有的都离不开基础,都是从基础上面衍生出来的,所以别想的太复杂咯!

Even的gravatar头像
Even  LV5 2014年11月5日

面相接口编程:

1.根据客户提出的需求提出来,作为接口的;业务具体实现是通过实现接口类来完成的。

2.当客户提出新的需求时,只需编写该需求业务逻辑新的实现类。

3.假如采用了这种模式,业务逻辑更加清晰,增强代码可读性,扩展性,可维护性。

4.接口和实现分离,适合团队协作开发。

5.实现松散耦合的系统,便于以后升级,扩展。

 

shenjx的gravatar头像
shenjx  LV2 2014年11月5日

开发规范

coolyqq的gravatar头像
coolyqq  LV13 2014年11月6日

也不能简单的说全用接口,加入系统不是很大,数据库比较唯一,业务不是很复杂,不用接口又怎么样,如果你用了,反而是个麻烦事,改一下要改两下,具体情况具体分析吧

Miss_kun的gravatar头像
Miss_kun  LV16 2014年11月7日

说的简单一点吧,impl里面都是方法,假如我在其他地方要调用这个方法呢??怎么搞呢?接口就是为了实现其他地方也可以调用这个方法的功能。(个人理解....)

limtno的gravatar头像
limtno  LV23 2014年11月7日

接口说白了就是做适配的,举个例子USB接口,有了这个接口你可以在上面插任何设备;

dao和service的接口也是这个道理,你基于这个接口规范可以有任何形式的实现;

h130256240的gravatar头像
h130256240  LV5 2014年11月17日

這個好處多多啊, 所謂的接口就是只給出了函數聲明,但是沒有函數體的類嘛 ,函數體在實現類中給出.

假設你有一個數據庫Dao, 給上一級程序用的: 就是  DatabaseDao dao = new DatabaseDao();這樣子

DatabaseDao{

  insert(); 增

  delete(); 刪

  update(); 改

  query() ; 查

}

然後你突然發現你根據需要,程序要鏈接兩個數據庫 一個orcale, 一個 sql server

你就寫了 兩個Dao的實現類orcaleImpl, SQLServerImpl

orcaleImpl implement DatabaseDao(){

  insert(); 增orcale

  delete(); 刪orcale

  update(); 改orcale

  query() ; 查orcale

}

 

SQLServerImpl implement DatabaseDao(){

  insert(); 增SQL Server

  delete(); 刪SQL Server

  update(); 改SQL Server

  query() ; 查SQL Server

}

 

這樣做的好處就將 Dao層和程序上面的其他部分開了, 其他人調用的時候也只是使用DatabaseDao dao = new DatabaseDao(); Dao接口, 具體後面用什麼數據庫 就看具體哪個去實現該接口了. 

對應程序的維護有很大幫助, 假設這時候你要添加一個新數據庫 MySQL, 你也就只需創建一個MySQLImpl的類而已, 而其他地方都不用進行修改的.

server跟Dao的原理是一樣一樣的 .

具體分層 頁面 -> controller (調用server接口) -> server(調用Dao接口 ) -> Dao -> database

如果要類比現實中的物體, 就想樓上說的USB接口一個道理, 你永遠不知道USB具體是怎麼回事, 但是你永遠都知道USB接口能被上一級使用,也就是你的手機, 平板,同時使用, 此時USB接口就像一個標準一樣,被社會大眾所接收了 

 

 

 

 

 

1107608468的gravatar头像
1107608468  LV3 2014年12月4日

en

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友