`
flypeace
  • 浏览: 159324 次
  • 性别: 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')

相关推荐

    61条面向对象设计的经验原则

    - **实践建议**:定义接口来规定类的行为规范,使得不同实现之间可以互相替换。 #### 3. 避免类之间的紧密耦合 - **原则描述**:类与类之间的相互依赖程度越低越好。 - **实践建议**:通过减少类间的直接引用,...

    设计模式学习笔记

    ### 设计模式学习笔记 #### 一、简单工厂模式 (Simple Factory) **类图与描述:** 简单工厂模式的核心在于存在一个工厂...桥接模式主要用于解决抽象与实现耦合度高的问题,避免修改抽象层时引起实现层的大规模变动。

    GNU 编码标准.pdf

    - **接口稳定性**:维护API接口的稳定性,避免频繁变动引起依赖项的问题。 - **文档完备性**:为库提供全面的文档资料,方便其他开发者使用。 #### 移植性 - **跨平台设计**:确保软件能够在不同操作系统和硬件架构...

    SAP英汉词典TXT版

    ABAP/4 Open SQL 是一种用于在 ABAP 程序中访问数据库的标准化 SQL 接口。它允许开发者使用统一的语法访问不同类型的数据库,简化了跨数据库平台的开发工作。 #### ABAP/4 参数 (abap/4 parameter) ABAP/4 参数是...

    新手学习C++入门资料

    为了避免这样的警告,C++允许声明一个无名形参,以告诉编译器存在该参数,且调用者需要为其传递一个实际参数,但是函数不会用到这个参数。下面给出使用了无名参数的C++函数代码: int fun(int x,int) //注意不同点...

    GOT1000 网关功能手册

    - **操作限制**:禁止通过测试操作更改可能引发系统重大变动的软元件数据,以避免误输出或误动作导致的安全事故。 #### 三、概要 - **服务器·客户机功能特点**:介绍该功能的基本特性和应用场景。 - **邮件发送...

Global site tag (gtag.js) - Google Analytics