忽略实现类,让接口可以直接访问 的编程风格你接受么

在JIOPi v0.1中引入了 免部署方式访问Java程序的编程风格
详见: http://www.iteye.com/topic/655312


JIOPi v0.2 带来的是 忽略实现类

在POJO类库中,即便使用了接口与实现类分离的设计模式,在使用一个POJO类库时,还是需要知道很多实现类的细节,比如部署依赖Jar,了解与获取对象实例相关的实现类的使用,即便使用了依赖注入,避免了代码中直接出现实现类的细节,但配置文件中还是会出现,并且很有可能一个很简单的接口的实现却十分复杂,需要依赖若干个Jar包,以至于无论是升级实现还是替换实现都不是一件容易的事情,那干脆让实现类变得透明呢?

 

JIOPi提供了模块标注,使得模块中的类可以自己声明其实现的蓝图接口是哪个,以及实例化策略,从而让模块的实现细节从蓝图的使用中脱离出来,下面就来看看使用方式的转变吧:

 

特别说明:在JIOPi中,蓝图并不意味着只是接口类,蓝图定义了使用模式,而不关心实现方式。

 

蓝图接口,这里使用一个类而非接口来进行访问演示:

package org.jiopi.ibean.example.blueprint.testblueprint;

import org.jiopi.framework.annotation.blueprint.RegisterControlPanel;

@RegisterControlPanel
public class ClassControlPanel {
	@RegisterControlPanel
	public final static String classStaticString = "classStaticString";
	
	@RegisterControlPanel
	public String classMethod(){
		return null;
	}
}

 

 

这个类被定义为蓝图接口,因此直接new出来使用是没有任何意义的

类上的标注进行了 蓝图接口名的短名称注册,默认使用当前类名(不含包名)

静态成员变量和方法上的 短名称注册 是为了简化 免部署方式的调用代码

 

范例模块库中 的 jiopi.ibean.testmodule 0.1.0.0 对其进行了实现

 

具体实现类是 NewInterfaceAndClassControlPanelImpl ,并且定义为单例模式执行

 

而使用JIOPi风格,你无须了解这些细节,只需要 确定用哪个实现模块即可,并且只需替换模块名即可完成实现类的更换

 

下面展示两种风格的使用代码:

 

 免部署风格:

使用免部署风格,无需在lib中放置任何Jar

 

//获取模块控制台
ModuleConsole testModule = CentralConsole.accessModuleConsole("jiopi.ibean.testmodule", "0.1.0.0");

//访问classStaticString成员变量
//由于变量注册了短名称,可使用短名称直接访问

System.out.println(testModule.staticVariable("classStaticString"));

//访问函数
//同样注册了短名称,可直接访问
System.out.println(testModule.operate("classMethod"),String.class);

 

 

接口访问风格:

需要在lib中放置 蓝图接口 的Jar包

//同样需要获取模块控制台,这里不设置版本,使用模块最新版
ModuleConsole testModule = CentralConsole.accessModuleConsole("jiopi.ibean.testmodule");

//使用短接口类名获取实现类对象
ClassControlPanel ccp = testModule.accessControlPanel("ClassControlPanel", ClassControlPanel.class);

//直接执行方法
System.out.println(ccp.classMethod());

 

 

当然,无论哪种风格,都必须使用JIOPi的API进行对象获取,你依然可以使用其他依赖注入框架来完成对JIOPi调用的隐含

 

当需要更换实现模块时,只需要更换代码中的模块名和可选的版本即可

 

这里暂时隐含了模块的自我配置环节,因为大多数实现类都不可能是通过默认构造函数来完成实例化的,但是这一步在JIOPi风格中依然是对使用者隐藏的,JIOPi风格的模块自动装配和依赖注入将在下一版本中引入

 

JIOPi风格的蓝图接口屏蔽了实现模块的几乎所有实现细节,一个功能的使用完全由 蓝图API 来定义,开发人员也无需为了使用一个模块而在lib中放置自己不知作何用途的Jar包

 

希望和大家继续交流,你是否觉得忽略实现类可以降低一些类库的使用难度和学习曲线呢?

 

以及,你是否愿意使用这种 蓝图模式 开发 模块呢?

 

参考文章:

JIOPi v0.2 规范概述 http://jiopi.iteye.com/blog/669960

JIOPi v0.2参考实现 iBean v0.2.0.0 下载地址 http://code.google.com/p/ibean/downloads/list

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值