`
flypeace
  • 浏览: 160047 次
  • 性别: Icon_minigender_1
  • 来自: 湖北
社区版块
存档分类
最新评论

避免参数定义引起接口变动

    博客分类:
  • java
阅读更多

     接口在java中是个很好的东西,使用接口能够使设计变得灵活,运用得好能够很大程度减少代码之间的耦合度,提高系统的扩展性。一个好的接口,不因该是经常变动的,接口的定义体现着设计者对业务的理解,对设计者设计功底的体现。实际中,接口的设计往往不可能面面俱到,但是应该尽量避免变动。这里发现一条经验,就是接口传递参数时,尽量用用一个参数封装多个参数,比如说有个接口中有个方法

 

 

public void m1(String p1,String p2); 

 

如果中途,发现传递的参数不足,变为

public void m1(String p1,String p2,int n); 
 

后面某个时候,又觉得增加传入参数,这下又得加了,接口跟着变,使用的人可能跟着头疼,如果一开始的时候就这么定义

public void m1(Param p1); 

 Param 是参数类:

public class Param
{
   public String p1;
   public String p2;

}

 后面加参数,就不需要变动接口方法了,只需要在Param 中增加参数:

public class Param
{
   public String p1;
   public String p2;
   public int n;
}

 这样就避免了接口的频繁变动,尤其是在第三方接口中尤为重要,不光是传入参数,传出也是类似道理。

 

其实比较扩展做法是接口参数传递接口,更加灵活:

public void m1(IParam p); 

 IParam是参数接口,这样就更加加大了扩展空间和想象空间。

 

 

 

 

分享到:
评论
4 楼 greatghoul 2012-02-24  
flypeace 写道
如果是从语言角度比较,各个语言的优略和特点就多了,在java基础上的groovy也是很不错的。


groovy确实不错。
3 楼 flypeace 2012-02-23  
greatghoul 写道
但这样也使代码变得复杂,也丧失了java原本比较好的一些特性。相比之下,python的名参天然的支持扩展。
def foo(paramA=None, paramB=None, paramC='haha'): pass
foo(paramA='a', paramB='b')

这点肯定不能和Python语言向比较,毕竟Python是非常灵活的动态脚本语言,java是静态语言。但是如果劈开语言的角度,单从系统设计的角度来分析,至少怎么去设计接口是要去好好考虑的。如果是从语言角度比较,各个语言的优略和特点就多了,在java基础上的groovy也是很不错的。
2 楼 greatghoul 2012-02-23  
public void m1(String p1,String p2);

你的方法名太亮了
1 楼 greatghoul 2012-02-23  
但这样也使代码变得复杂,也丧失了java原本比较好的一些特性。相比之下,python的名参天然的支持扩展。
def foo(paramA=None, paramB=None, paramC='haha'): pass
foo(paramA='a', paramB='b')

相关推荐

Global site tag (gtag.js) - Google Analytics