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

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

阅读更多

在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

分享到:
评论

相关推荐

    C#编程风格—如何编出好程序

    本篇将深入探讨如何编写出高质量、易于维护的C#程序,遵循良好的编程风格。 首先,代码的可读性是衡量其质量的重要标准。保持代码整洁、注释清晰,有助于其他开发者理解和修改。在C#中,应使用有意义的变量名和函数...

    [ppt]Java编程风格及基础类库使用(free)

    **Java编程风格与基础类库使用** 在Java编程中,良好的编程风格是代码可读性和维护性的关键。遵循一定的编程规范不仅可以提升团队合作效率,也能减少因代码不清晰导致的错误。清华大学的这份PPT详细介绍了Java编程...

    《Java编程风格》中文版.pdf

    ### Java编程风格与编码规范详解 #### 一、引言 《Java编程风格》中文版是一本关于Java语言编程风格的指南书籍,旨在为开发者提供一套标准和规范,以提高代码质量和可读性。本书详细介绍了Java编程中应遵循的各种...

    CFX构建webservice实例,与Spring整合;以及调用https协议的webservice,附带源码,及其证书

    使用CXF,你可以轻松地从Java接口自动生成服务端点,或者从WSDL文档反向生成Java代码。 1. **构建CXF Web服务**: - 创建Java接口:定义服务的公共操作。 - 实现接口:为接口中的方法编写具体实现。 - 配置CXF:...

    C++maioshu

    例如,通过封装,可以隐藏对象内部的实现细节,提供公共接口供外部访问,增强了代码的安全性和稳定性;通过继承,可以在不修改原类的前提下扩展其功能,提高了代码的复用率;通过多态,同一接口可以有不同的实现方式...

    Java代码编程规范.doc

    - **Java源文件**:每个Java源文件应该只包含一个公共类(除非是枚举或接口),且类名与文件名相同。非公共类可以与其他类在同一文件中定义。 - **文档开头的注释**:文件开头通常包含版权信息、作者、版本号和...

    C#标准规范经典

    方法可以接受零个或多个参数。参数可以是有名参数、默认参数、输出参数、引用参数等。 **1.6.6.2 方法体和局部变量** 方法体包含了实现特定功能的代码。局部变量是在方法体内声明的变量,只能在该方法内访问。 **...

    高质量C++_C编程指南

    **9.8 如何在派生类中实现类的基本函数** - 派生类需要重写基类的虚函数。 - 注意覆盖基类的析构函数。 **9.9 一些心得体会** - 构造函数、析构函数和赋值函数是对象生命周期的关键。 - 正确实现这些函数可以避免...

    编程修养-程序员不可或缺的书

    通过这种方式,可以隐藏实现细节,只暴露必要的接口,增强代码的安全性和可维护性。 #### 11. 出错信息的处理 **出错信息的处理**是确保程序健壮性的关键步骤之一。当程序遇到错误时,通过适当的方式记录错误信息...

    谷歌Java编程规范(中文版)

    - **类声明**: 一个源文件中只能有一个顶级类声明,其他类或接口应该嵌套在这个顶级类中。 #### 4. 编码格式 - **大括号**: - 即使是单行条件语句也必须使用大括号。 - 非空块采用K&R风格,即左大括号放在新行。...

    二十三种设计模式【PDF版】

    和智慧,让你能够真正掌握接口或抽象类的应用,从而在原来的 Java 语言基础上跃进一步,更重要的是,GoF 的设计模式反复 向你强调一个宗旨:要让你的程序尽可能的可重用。 这其实在向一个极限挑战:软件需求变幻...

    C++常用术语

    在C++中,通过类、接口和抽象基类实现抽象,使得开发者能够专注于问题的核心特征,而忽略不必要的细节。 #### 2. 访问控制(Access) 访问控制是C++中用于管理类成员(数据成员和成员函数)可访问性的机制。C++提供...

    JAVA代码规范(sum公司的英文版本)

    类声明通常包括访问修饰符、类名、继承的类或实现的接口,以及类体(包含方法和变量)。接口声明则包括接口名和接口体。 4. 缩进 缩进是代码可读性的关键。通常,每个逻辑块的内部内容应向右缩进4个空格,而不是...

    《Python编程金典》读书笔记

    ### Python编程金典知识点梳理 #### 1. 绪论 - **介绍**: 本章节作为全书的开篇,为读者提供了Python编程的基础概念,包括Python语言的特点、发展历程以及为何选择Python等内容。 #### 2. Python编程概述 - **...

    提高C#编程水平不可不读的50个要诀.txt

    面向接口编程强调依赖于抽象而非具体实现,可以降低组件之间的耦合度,提高系统的灵活性和可扩展性。 #### 27. 使用泛型以提高代码复用率 泛型允许编写一次代码,多次使用,适用于多种类型。合理利用泛型可以提高...

    MyBatis代码生成工具

    6. **javaClientGenerator**:配置Mapper接口和实现类的位置、包名以及生成方式(如接口、注解或抽象类)。 7. **table**:指定需要生成代码的数据库表,可以设置过滤条件,如只生成特定前缀的表。 使用MyBatis...

    Java语言编程规范--华为技术有限公司

    - 合理使用public、private、protected和包访问权限,保护类的内部实现。 - 尽量减少公共API的暴露,遵循最小权限原则。 7. **设计模式** - 遵循SOLID原则(单一职责、开放封闭、里氏替换、接口隔离、依赖倒置)...

    e-Ray开发手册V1.01

    6. 对于服务(Service)和数据访问对象(DAO),为了遵循面向服务架构(SOA)的原则,对外提供的服务应该是接口,接口的实现类使用 `Impl` 后缀来与接口区分开。比如 `CacheService` 接口及其实现类 `...

    linux的网络编程

    - **有关的数据结构:** 共享内存段是多个进程可以直接访问的一段内存。 - **有关的函数:** - `shmget()`:获取共享内存标识符。 - `shmat()`:将共享内存段映射到进程地址空间。 - `shmdt()`:解除共享内存段的...

Global site tag (gtag.js) - Google Analytics