论坛首页 Java企业应用论坛

请教:关于接口的设计

浏览 70857 次
该帖已经被评为精华帖
作者 正文
   发表时间:2005-03-18  
Trustno1 写道
aggregation  就是聚合的意思。
一个抽象类总能分解成一个类和若干接口的聚合,接口之间聚合的重要性在于他们之间是正交的。如果一个抽象类能够进行分解,那么就说明这个抽象类不是正交的。


一个抽象类总能分解。。。。

如果一个抽象类能够进行分解。。。。

抽象类不是总能分解的吗?为什么要说“如果”?
从你的阐述中,结论是不是所有的抽象类都不是正交的呢?
0 请登录后投票
   发表时间:2005-03-18  
partech 写道
husthxd 写道
用什么数据库其实跟业务逻辑的实现关系不大了.
我还是坚持,单一的业务逻辑是不需要设计接口的.


假如还没有发现接口带来的好处,那大可以只使用类。
接口和实现,这个虚与实的关系可是绝大多数设计模式的关键所在啊,呵呵。
不说这些虚的。
具体来说
接口可以屏蔽具体实现对调用方的影响。
我曾经涉及一个需要计算费用的系统,计算费用是作为一个接口设计的。
在不同的时期,客户会要求不同收费方案。然而业务流程是没有变化的。
最终都需要从客户账户中扣除这部分费用。修改收费方案同业务流程分别
放在不同的包中,这样当收费方案变动时,业务流程不需要任何变动。

另外,使用接口,有利于并行开发,测试起来也会方便些。
在上面的例子中一个人可以负责业务流程的编码,具体如何计算费用,
是另外一个人负责。通过该接口调用方不需要引用实现方的类,
这样他们就可以同时开发业务的不同方面。
如果调用方需要测试自己的程序,他就可以做一个实现该接口的简单测试类先用。

接口的这些分离效果,使程序能够更加灵活和清晰。


partech的回答非常清晰,而且易懂。提倡同时也感谢!
1 请登录后投票
   发表时间:2005-06-16  
接口设计,就象刷牙一样,我们常常忘记,看看人家成熟公司怎么做得好
比如说吧
1,1层概要设计 定好模块,和模块的功能
2,2层概要设计 定好模块与模块之间的接口,模块的主要类,类与类之间的关系,在这个时候设计好,各种接口类
3,3层概要设计 设计类的各种方法....主要是public 方法
4,实施编码,实现public,杜撰自己的private方法

接口在二层概要设计的时候就应该做的很好,那么在以后的编码中尽量使用接口
少直接调用类的public方法,但是呢,我们常常缺少这方面经验,很多人呢都是想到什么功能些什么类-我就是这样的,做的好点的,在后期重构的时候专门用些时间来提炼接口,如果说你的产品,真能达到cmm三级水平,那么接口设计就不是问题,而象刷牙一样已经成为习惯啦
0 请登录后投票
   发表时间:2005-06-28  
凤舞凰扬 写道
在Java中,面向对象的编程其实就是面向接口的编程。接口是非常重要的,当然你不用它,也并不是什么。
  没有一个人一开始就能很好地做到面向接口编程(面向对象的语言不是那么容易掌握),但是如果就因为不熟悉带来的更改以及其他麻烦就不采用的话,那么面向对象的设计能力是得不到提高的。
   采用接口的方式是让程序耦合度降低,内聚度提高,是增加更好的维护性。
   当然,在Java中不采用接口编程和数据库中不采用关联的比喻是非常不恰当的。数据库的关联是要合理使用(不能什么关系都用关联),而面向对象的设计是提倡都用接口的。


这种观点比较通俗易懂,完全支持,感觉就像沐浴春风,非常好。偶从事OO编程这一行业也有半年之余,还是没有悟出其真正的内涵,实为惭愧!!看到这里,顿时开窍,多谢多谢!
0 请登录后投票
   发表时间:2005-06-30  
3.0的extract interface还是在一个package里,嘿嘿。所以不爽。
0 请登录后投票
   发表时间:2005-07-01  
不用接口,抽象类,覆盖 这些东西,将会失去很多快乐的。
0 请登录后投票
   发表时间:2005-07-04  
孤魂一笑 写道
jaqwolf 写道
如果没有List这个接口,那很多返回类型应该是ArrayList,Vector,LinkedList.但大部分人一般返回类型为List或者Collection 这是有道理的。

能说说吗?
我并没有从心里接受使用interface设计的必要性,java中interface的存在似乎是解决了不能继承多个父类。还有一个好处是,让oo的概念在java上体现的更清晰了,但是用起来麻烦啊--改得多,比如,我要重命名一个接口,既要改动inteface又要改动class。

我并非说不使用,而是想知道如何合理使用。

另外,即便是返回一个ArrayList 又有什么不好呢?


我说一种情况吧,有如下一个方法
public Vector getUsers(){


}

你使用Vector 作为容器保存用户列表,后面你发现,你使用
public ArrayList getUsrs(){

}

可能更好,因为不需要线程同步,而且ArrayList 的效率比Vector高,
如果你一开始就使用下面的方法
public List getUsrs(){

}

那么改动的就只是你写的这个方法,对调用这个方法的代码是不需要修改的。
因为我的返回类型是List ,至于是ArrayList ,LinkedList,Vector,甚至是jakarta commons collection的某些类,对外我是没有声明的。在这种情况下你认为返回ArrayList 好还是返回List好呢?


如果List不是接口,是个抽象类,ArrayList等都是继承它的,不是一样能达到你说的效果?!
0 请登录后投票
   发表时间:2005-07-07  
coolyzg 写道
经你这么一说
我发现我们的项目也是一个接口都没用哎
看来要好好研究一番了


连接口都没有还谈什么模式呢?

b/s或许问题不会特别严重,要是c/s应用不定义接口,感觉就像回到过去饮毛茹血的时代。

完全不用继承没必要,但是仅仅使用继承决对是远远不够!对接口和继承的应用,说明你把对需求的理解代码化的能力。也一定程度说明你对需求的把屋能力。一个用例的实现的接口化说明你对需求进行了概念化。否则从认识的角度来说就从侧面证明你还处于感性认识的程度或者理性认识的低级阶段。这样做应用是很危险的。对需求融会贯通,然后抽象,是代码化之前务必要做到的。
0 请登录后投票
   发表时间:2005-09-06  
我觉得interface给了我们一种从更高角度看问题的能力。使得我们能够不立即陷入计算机解空间烦琐的细节中去,是抽象的极好助手。在设计阶段,尽量不要引入任何实现相关的东西,全以接口代之。这个阶段应该是接口频繁变动最后定型的阶段。

当然,有人会说我这是典型的过渡设计,现在似乎流行的是XP和重构,我当然不反对在重构的过程中提炼出来interface,不过我觉得其实这样的动力不足,没有几个人会修改已经可以交付给客户的软件。
0 请登录后投票
   发表时间:2005-09-07  
没有interface不耽误做类MIS系统
但会很累,如果做框架的话
没有interface就不可能
12 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics