`
october731
  • 浏览: 86700 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

接口存在的意义只在于接口依赖注入

 
阅读更多
关于接口存在的意义,之前有一篇帖子讨论过(http://www.iteye.com/post/957921?page=1),并且跟帖无数,我也看过,这里发表一点自己的看法。抛砖引玉。
我的立场是站在spring的依赖注入的角度上来思考这个问题的。个人认为,接口存在的意义只在于接口依赖注入的时候得到淋漓尽致的体现。至于其他时候,作用则并不是那么大了。其理由如下:
1. 在非接口注入的情况下,接口的定义,某种程度上可以理解为对类的一个总的设计,因为其方法并不需要实现,所以可以更多的去思考业务上的逻辑问题,一方面更多心思的去想如何把功能点设计的更加全面,另一方面当我们在实现这个接口的时候,就会受到这个接口的方法定义的约束,这个时候尽可能多的就是考虑如何实现具体的业务的问题,而不用去考虑业务的设计的是否周全的问题。
2. 我的第二点略带否定第一点的意味。如果说只是起一个总领的作用的话,相信当初在设计这个类的时候的UML图里面就已经写的很详细了。即使我不需要这一个接口,我根据我设计完备的UML图,我一样的可以在写类的方法的时候只关注我的类的方法的实现,而不用去考虑类的方法设计是否完备。
3. 在spring的接口注入的时候,这个时候方才体现了接口的优势。我们只调用接口,接口的具体实现可以有一个,也可以有N个,但是具体调用哪一个实现,我们可以动态的根据配置文件,在具体运行的时候再来决定。这就相当于用调用接口,把更多的灵活性留给了以后的开发和维护,以及功能模块的添加。
更多的暂时还没有去想,比较仓促就先写到这里。我先抛出观点。欢迎拍砖。
分享到:
评论
18 楼 ramus 2009-04-10  
skydream 写道
这个结论下的有点过了。

接口存在的意义和注入没有直接关系的,注入只是一种手段,远不是目的。


这一点,我非常同意。。楼主有点的结论有点过。。而且我敢打赌,楼主是看过那篇文章后,并切加上实际工作的经验,突然感觉就是这么回事,所以就把这个结论下了。。。


不知楼主是不是我这样想的`


http://www.iteye.com/post/958826
17 楼 akiraray 2009-04-10  
<div class="quote_title">october731 写道</div>
<div class="quote_div">
<div class="quote_title">akiraray 写道</div>
<div class="quote_div">
<div class="quote_title">october731 写道</div>
<div class="quote_div">
<div class="quote_title">guooscar 写道</div>
<div class="quote_div"><span style="color: #ff0000;">java的世界</span>其实很大的,并不是只有SSH.....</div>
<br />对   是很大的  但是我们<span style="color: red;">目前不是SSH</span>  <span style="color: #ff0000;">中间</span>不是struts <span style="color: #ff0000;">整个</span>是<span style="color: #ff0000;">.NET</span>上的spring.net+NHibernate<br /></div>
<br />是我穿越了……还是你穿越了……</div>
<br />what does it mrean??</div>
<p> </p>
<p>我太笨……完全没理解两位在讨论什么……</p>
<p>一下子从java穿越到了.net的……</p>
16 楼 maoxiaolu2000 2009-04-10  
就算大家自己不写接口,但我们还是经常享受到接口的好处。比如从我们上学时学JDBC的时候。

这就是接口的其中一个意义
15 楼 whaosoft 2009-04-10  
october731 写道
抛出异常的爱 写道
由于设计失败我看见过的N多项目dao是以页面逻辑分块开发的.....正常的DAO与页面逻辑关系非常的小.
我想说的只有这句话.

不可否认   被你说中了   我们的项目 目前的dao是和页面逻辑有很大的关联,及相似程度,但是 总的来说 页面和dao的关系,不是1:1的关系  而是N:N的关系



我现在也是 ,我也就看见象字典类的表 是1:1的
14 楼 guoxu1231 2009-04-10  
针对接口编程的话 可以利用JDK dynamic proxy机制提供很多功能扩展 像Spring里使用的声明式事务管理.
实际开发里 一个功能类维护2份文件(接口和实现类)确实有点烦, 快速开发一般应用的话不要也罢了 事务管理直接用实现类上的CGLIB增强好了. 有需求变更就直接改代码 省事~~

小项目会被Java的那一套繁文缛节搞死的, 实际开发还是灵活一点好.

13 楼 logicgate 2009-04-10  
接口的作用远远大于依赖注入
12 楼 vearn 2009-04-10  
8vip 写道
fjlyxx 写道
akiraray 写道
october731 写道
guooscar 写道
java的世界其实很大的,并不是只有SSH.....

对   是很大的  但是我们目前不是SSH  中间不是struts 整个是.NET上的spring.net+NHibernate

是我穿越了……还是你穿越了……


JAVA只是一种语言  SSH只是一种框架  只是WEB的应用比较多而已   WEB不是JAVA的全部  那么用JAVA开发的MQ  NIO  数据库整合   这些底层的东西又是什么呢???


请问穿是什么意思


眼睛一闭再一睁,发现在你上面的人变了。。。
11 楼 8vip 2009-04-10  
fjlyxx 写道
akiraray 写道
october731 写道
guooscar 写道
java的世界其实很大的,并不是只有SSH.....

对   是很大的  但是我们目前不是SSH  中间不是struts 整个是.NET上的spring.net+NHibernate

是我穿越了……还是你穿越了……


JAVA只是一种语言  SSH只是一种框架  只是WEB的应用比较多而已   WEB不是JAVA的全部  那么用JAVA开发的MQ  NIO  数据库整合   这些底层的东西又是什么呢???


请问穿是什么意思
10 楼 skydream 2009-04-10  
这个结论下的有点过了。

接口存在的意义和注入没有直接关系的,注入只是一种手段,远不是目的。
9 楼 october731 2009-04-10  
akiraray 写道
october731 写道
guooscar 写道
java的世界其实很大的,并不是只有SSH.....

对   是很大的  但是我们目前不是SSH  中间不是struts 整个是.NET上的spring.net+NHibernate

是我穿越了……还是你穿越了……

what does it mrean??
8 楼 october731 2009-04-10  
dada 写道
和spring有啥关系,随便举个例子,你所在的系统是一个总公司集中项目,某个功能中你将要面对分公司以及不同业务线两个纬度叠加造成的业务差异,UML中定义的东西不是接口的话你咋玩?

但是至少这种方式  接口的定义是在UML当中 而不是在具体的程序设计里面   专门一个包或一个类库来装接口
7 楼 dada 2009-04-09  
和spring有啥关系,随便举个例子,你所在的系统是一个总公司集中项目,某个功能中你将要面对分公司以及不同业务线两个纬度叠加造成的业务差异,UML中定义的东西不是接口的话你咋玩?
6 楼 fjlyxx 2009-04-09  
akiraray 写道
october731 写道
guooscar 写道
java的世界其实很大的,并不是只有SSH.....

对   是很大的  但是我们目前不是SSH  中间不是struts 整个是.NET上的spring.net+NHibernate

是我穿越了……还是你穿越了……


JAVA只是一种语言  SSH只是一种框架  只是WEB的应用比较多而已   WEB不是JAVA的全部  那么用JAVA开发的MQ  NIO  数据库整合   这些底层的东西又是什么呢???
5 楼 akiraray 2009-04-09  
october731 写道
guooscar 写道
java的世界其实很大的,并不是只有SSH.....

对   是很大的  但是我们目前不是SSH  中间不是struts 整个是.NET上的spring.net+NHibernate

是我穿越了……还是你穿越了……
4 楼 october731 2009-04-09  
guooscar 写道
java的世界其实很大的,并不是只有SSH.....

对   是很大的  但是我们目前不是SSH  中间不是struts 整个是.NET上的spring.net+NHibernate
3 楼 october731 2009-04-09  
抛出异常的爱 写道
由于设计失败我看见过的N多项目dao是以页面逻辑分块开发的.....正常的DAO与页面逻辑关系非常的小.
我想说的只有这句话.

不可否认   被你说中了   我们的项目 目前的dao是和页面逻辑有很大的关联,及相似程度,但是 总的来说 页面和dao的关系,不是1:1的关系  而是N:N的关系
2 楼 guooscar 2009-04-09  
java的世界其实很大的,并不是只有SSH.....
1 楼 抛出异常的爱 2009-04-09  
由于设计失败我看见过的N多项目dao是以页面逻辑分块开发的.....正常的DAO与页面逻辑关系非常的小.
我想说的只有这句话.

相关推荐

    一个轻量级的PHP依赖注入框架

    依赖注入(Dependency Injection,简称DI)是一种设计模式,它在软件工程中被广泛应用于解耦组件,提高代码的可测试性和可维护性。在PHP世界里,依赖注入框架可以帮助开发者更方便地管理类之间的依赖关系,减少硬...

    PHP依赖注入容器库

    4. **接口注入**:除了基于类的依赖注入,Auryn还支持基于接口的注入,这使得代码更加灵活,易于扩展。 5. **回调注入**:如果一个依赖需要通过特定的逻辑生成,你可以提供一个回调函数,Auryn会在需要时调用它来...

    Spring 核心机制(依赖注入)

    - **降低耦合度**:依赖注入允许组件之间通过接口进行通信,而不是直接引用具体的实现类,从而降低了组件之间的耦合度。 - **提高可测试性**:由于依赖可以通过注入的方式传递给组件,因此可以在测试时轻松替换依赖...

    Spring 学习笔记《依赖注入》源文件

    在Java开发领域,Spring框架是不可或缺的重要组成部分,它以其强大的依赖注入(Dependency Injection,简称DI)特性而闻名。依赖注入是面向对象设计的一种模式,它允许我们解耦组件之间的依赖关系,使代码更加灵活,...

    利用xml解析完成依赖注入 源码

    XML解析在依赖注入中的作用在于,它提供了声明依赖关系的结构化方式。在XML配置文件中,我们可以定义bean及其依赖,Spring框架会读取这些配置并根据指示创建bean实例,建立它们之间的依赖关系。以下是一个简单的XML...

    arcgis server flex 中的依赖注入

    依赖注入的核心在于利用接口的多态性,使类之间可以通过接口来进行交互,而无需知道具体的实现细节。例如,在上述部分内容中提到了一个`Controller`接口: ```as package com.example { public interface ...

    InterfaceInjector接口注入模拟(源码下载)

    接口注入的核心在于接口,它定义了依赖对象的行为。通过定义接口,我们可以确保各个组件之间只依赖于接口,而不是具体的实现。这使得更换或升级组件变得更加简单,只需要改变接口的实现即可,无需修改依赖它的其他...

    控制反转-依赖注入详解

    控制反转(IoC)和依赖注入(DI)是软件设计模式中的重要概念,主要用于降低组件间的耦合度,提高代码的可维护性和可扩展性。IoC的核心思想是将对象的创建和管理交给一个外部容器,而不是由对象自身负责,从而实现...

    Martin Fowler 控制反转与依赖注入

    除了构造函数注入和设值方法注入之外,还有一种不太常见的依赖注入方式称为接口注入。在这种模式下,依赖项通过接口传递,而不是通过构造函数或setter方法。这种方法的优势在于它可以更灵活地处理依赖关系的变化,但...

    深入刨分依赖注入

    依赖注入(Dependency Injection,简称DI)是软件设计模式中的一种,它主要解决的是对象之间的依赖关系,使得代码更易于测试和维护。在这个主题下,我们将深入探讨依赖注入的核心概念、实现方式以及它在实际开发中的...

    模拟Spring的依赖注入

    在Java开发中,Spring框架是应用最广泛的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)容器。它极大地简化了组件之间的依赖管理,提高了代码的可测试性和可维护性。本篇文章将深入...

    Spring依赖注入使用setter设注入demo

    在Java世界中,Spring框架是应用最广泛的轻量级框架之一,它以其强大的依赖注入(Dependency Injection,简称DI)特性而闻名。依赖注入是面向切面编程(AOP)的一个重要概念,它允许我们解耦组件,使得代码更加灵活...

    依赖注入:Dependency injection-英文书签文字版

    在Spring中,依赖注入主要通过构造器注入、setter方法注入和接口注入三种方式实现。 1. 构造器注入:通过在类的构造函数中传递依赖对象的实例,Spring会根据配置在XML或注解中的信息创建依赖对象并注入到目标类中。...

    mvc4 ioc 依赖注入简单示例实现

    2. **定义接口与实现**:为了演示依赖注入,我们先定义一个简单的服务接口`IService`,以及它的实现类`Service`。例如: ```csharp public interface IService { void DoSomething(); } public class ...

    struts hibernate spring 集成时使用依赖注入的方式的秘籍

    Struts、Hibernate和Spring是Java开发中非常流行的三大框架,它们各自在Web应用程序的不同层面上发挥作用:Struts处理MVC模式中的Controller部分,Hibernate负责数据持久化,而Spring则提供了全面的依赖注入...

    用Roboguice实现依赖注入-.rar

    依赖注入有三种主要方式:构造器注入、setter注入和接口注入。 **Roboguice的工作原理** Roboguice通过扫描应用的注解(Annotations)来识别对象的依赖关系。它在应用程序启动时,会自动注入所有需要的依赖。开发者...

    NetCoreDemo(依赖注入).zip

    在.NET Core中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它允许开发者将对象的创建和管理从实际的业务逻辑中分离出来,提高了代码的可测试性、可维护性和灵活性。本示例"NetCoreDemo(依赖...

    轻量级 Swift 依赖注入框架.zip

    5. **代码解耦**:通过依赖注入,组件之间的耦合度降低,每个组件只需要知道它依赖的接口,而不关心具体的实现。 6. **测试友好**:在单元测试中,可以轻松替换具体依赖,使用模拟(Mocks)或存根(Stubs)来隔离...

    PHP依赖注入容器库.zip

    依赖注入是一种设计模式,它允许我们解耦代码,通过外部组件将依赖关系传递给一个对象,而不是由该对象自己创建或查找依赖。这样做的好处在于,对象不再直接与特定的实现绑定,而是可以通过配置来改变其依赖关系,...

Global site tag (gtag.js) - Google Analytics