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

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

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

或者说spring只有通过接口才能管理吗??
97 楼 arafat 2009-05-09  
怎么会这么想
先有接口还是先有依赖注入的?
96 楼 key232323 2009-04-26  
接口好像最初是为了解决java的多继承而设计的吧
95 楼 key232323 2009-04-26  
<div class="quote_title">akiraray 写道</div>
<div class="quote_div">
<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>
</div>
<p> </p>
<p>akiraray说穿越,指lz虽然是nspring nhibernate但还是ssh,根本没有“跳出ssh”(既穿越)</p>
94 楼 jgm 2009-04-24  
A few of the many advantages of an interface-based approach include:

The ability to change the implementing class of any application object without affecting calling code. This enables us to parameterize any part of an application without breaking other components.

Total freedom in implementing interfaces. There's no need to commit to an inheritance hierarchy. However, it's still possible to achieve code reuse by using concrete inheritance in interface implementations.

The ability to provide simple test implementations and stub implementations of application interfaces as necessary, facilitating the testing of other classes and enabling multiple teams to work in parallel after they have agreed on interfaces.

Adopting interface-based architecture is also the best way to ensure that a J2EE application is portable, yet is able to leverage vendor-specific optimizations and enhancements.
93 楼 8_bit 2009-04-23  
我认为接口就是一个代理,,,或者是一个中介,,,通过它来 把关系划分开
92 楼 lichuan 2009-04-22  
部件需要关于功能的合同文档,它的要求是,小,完整,不可改变。

只要你的软件的一部分体现了合同文档的作用,注入接口与否,属于你个人的工作习惯。

91 楼 unsid 2009-04-21  
october731 写道
unsid 写道
额,这个...
我觉得楼主的意思是在"javaEE企业级应用中的业务系统开发"前提下,提出"关于业务层面的接口唯一作用是用来依赖注入(其中包括拦截器使用)"
想法有一定代表性


有些同感    本来也想把拦截器的想法一起发表劲来的    只字未提竟然也被这位师兄察觉   深度啊


楼主如果我分析的对,你应该把你的前提表述清楚啊
那样就不会有这么多人用“SSH不能代表interface的全部应用”来批判你了
我替你总结两个前提
1、javaEE企业级应用中的业务系统开发
2、关于业务层面的接口
下,接口的唯一作用是:依赖注入(其中包括拦截器使用)
你的题目太误导

仍然不完全同意你的观点,统一前面某人的:依赖注入是手段不是目的,这其中好像并不会为某个服务接口写第二个实现类,但是这样的接口仿佛还有其他的好处,比如:带来职责上的分离,并不是所有的接口的目的都是为了有多个实现类的。

90 楼 fengfeng925 2009-04-21  
如果不用spring的依赖注入,就不需要借口了吗。面向对象的思想本就是面向抽象变成,就算你不用依赖注入,只用工厂来封装,那也要用到接口啊。把思想具体化不太好吧,尤其把这种面向抽象编程的思想给具体化成ssh这样的框架,感觉更是不好
89 楼 october731 2009-04-21  
unsid 写道
额,这个...
我觉得楼主的意思是在"javaEE企业级应用中的业务系统开发"前提下,提出"关于业务层面的接口唯一作用是用来依赖注入(其中包括拦截器使用)"
想法有一定代表性


有些同感    本来也想把拦截器的想法一起发表劲来的    只字未提竟然也被这位师兄察觉   深度啊
88 楼 tangshd 2009-04-21  
也许楼主把标题改为 依赖注入更好的体现了接口的作用 更好一些
87 楼 walle1027 2009-04-20  
  java不止只有spring,spring只是代表了一種流行的构架方式,而非全部,接口的定义早在spring之前,甚至早在java之前就有个定义,以spring的观点讨论接口,意义不大吧。
86 楼 unsid 2009-04-20  
额,这个...
我觉得楼主的意思是在"javaEE企业级应用中的业务系统开发"前提下,提出"关于业务层面的接口唯一作用是用来依赖注入(其中包括拦截器使用)"
想法有一定代表性

85 楼 shuai45 2009-04-20  
接口存在的意义只在于接口依赖注入?
spring只是对接口更好的诠释。你注入的不一定是接口
84 楼 samfisher 2009-04-17  
在没有闭包的情况下,有些场景只能依靠接口,比如动态的应用一个接口的不同实现。没有接口,所谓的oop没有意义。
83 楼 zhuxing 2009-04-17  
标题很雷人^_^
82 楼 xdwinner 2009-04-16  
接口存在的意义只在于接口依赖注入?
先有接口还是先有SPRING?
81 楼 puroc 2009-04-15  
一句话中包含“只”、“全”的时候,基本上都会受到抨击。
80 楼 maxpana0177 2009-04-14  
接口的作用是非常的重要的,在JAVA的类的抽象和整体框架中都起着非常大的作用
79 楼 pdw2009 2009-04-14  
抛出异常的爱 写道
由于设计失败我看见过的N多项目dao是以页面逻辑分块开发的.....正常的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