`
阅读更多

在开发应用时一个基本原则是模块化,并且近最大可能性地降低模块之间的耦合性。在Java平台上Spring Framework 以及.Net 平台 CAB ,SCSF 和Prism (WPF,Silverlight)中都有对Dependency injection 的支持。

Dependency injection 大大降低了类之间的依赖性,可以通过annotation (Java)或是SeviceDepdendcy (.Net) 描述类之间的依赖性,避免了直接调用类似的构造函数或是使用Factory来参加所需的类,从而降低类或模块之间的耦合性,以提高代码重用并增强代码的可 维护性。

Google Guice提供了Java平台上一个轻量级的 Dependency injection 框架,并可以支持开发Android应用。本指南将使用Android平台来说明Google Guice的用法。

简 单的来说:Guice 降低了Java代码中使用 new 和 Factory函数的调用。可以把Guice 的@Inject 看作 new 的一个替代品。使用Guice可能还需要写一些Factory方法,但你的代码不会依赖这些Factory方法来创建实例。 使用Guice 修改代码,单元测试已经代码重用变得更容易。

RoboGuice 为Android平台上基于Google Guide开发的一个库,可以大大简化Android应用开发的代码和一些繁琐重复的代码。比如代码中可能需要大量使用findViewById在XML 中查找一个 View,并将其强制转换到所需类型,onCreate 中可能有大量的类似代码。RoboGuice 允许使用annotation 的方式来描述id于View之间的关系,其余的工作由roboGuice库来完成。比如:

class AndroidWay extends Activity {
 TextView name;
 ImageView thumbnail;
 LocationManager loc;
 Drawable icon;
 String myName;

 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 name      = (TextView) findViewById(R.id.name);
 thumbnail = (ImageView) findViewById(R.id.thumbnail);
 loc       = (LocationManager) getSystemService(Activity.LOCATION_SERVICE);
 icon      = getResources().getDrawable(R.drawable.icon);
 myName    = getString(R.string.app_name);
 name.setText( "Hello, " + myName );
 }
}
如果使用roboguice 来写:
class RoboWay extends RoboActivity {
 @InjectView(R.id.name)             TextView name;
 @InjectView(R.id.thumbnail)        ImageView thumbnail;
 @InjectResource(R.drawable.icon)   Drawable icon;
 @InjectResource(R.string.app_name) String myName;
 @Inject                            LocationManager loc;

 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 name.setText( "Hello, " + myName );
 }
}
只需使用@InjectView 来描述 view 和Id之间的关系,RoboGuice 自动完成余下的工作,代码简洁易读。在介绍完Google Guice ,再接着介绍RoboGuice 在Android平台上使用方法。
怎么样,以后再也不用一个使用View的时候只要注入就可以,这样极大地增加了代码的可阅读星以及更明确的体现了面向对象的编程方法,赞一个!
转发请注明:乐思网
敬请期待后续分享...
分享到:
评论

相关推荐

    Spring3.1 AOP倚赖jar 包汇总

    Spring 3.1倚赖的外部jar包汇总

    nginx-安装文件以及倚赖包

    nginx-安装文件以及倚赖包 安装过程请参考:http://blog.csdn.net/u010386438/article/details/45046689

    β-内酰胺抗生素残留检测的生物传感器研究进展 (2010年)

    β-内酰胺抗生素残留痕量检测技术具有保障动物性食品安全、促进国际贸易的重要意义。...免疫生物传感器检测限低,相对较易于深入研究。近年来免疫生物传感器研究较多,主要集中在纳米技术的应用、换能检测方法的创新

    Binder设计与实现

    Linux已经拥有管道,system V IPC,socket等IPC手段,却还要倚赖Binder来实现进程间通信,说明Binder具有无可比拟的优势。深入了解Binder并将之与传统 IPC做对比有助于我们深入领会进程间通信的实现和性能优化。本文...

    基于Rails的菲普斯网站管理系统 v0.8.5.rar

    Fepss开发的免费OA系统也受到中小型企业的青睐,本公司网站发布系统是基于ruby on rails开发的,这也是国内首款开放源码的基于rails开发的网站系统。 本网站系统是作为OA系统的前端展示系统,所倚赖的包都在plugin...

    kafka_lib.rar

    kafka的开发倚赖jar包,jdk1.8版本,无须再下载其它jar

    因应多信道无线测试配置 模块化仪器搞定多天线测量

    今天,有越来越多人倚赖无线设备来管理电子邮件、社交媒体、银行帐务,并且或串流影片和电影。在许多市场中,LTE和LTE-Advanced已经成为主流技术,而下一代5G标准也已经进入前期研究和定义阶段。在蜂窝通信应用中,...

    Android Binder设计与实现

    Linux已经拥有管道,system V IPC,socket等IPC手段,却还要倚赖Binder来实现进程间通信,说明Binder具有无可比拟的优势。深入了解Binder并将之与传统 IPC做对比有助于我们深入领会进程间通信的实现和性能优化。本文...

    工作流督-办管理

    该系统采用J2EE技术开发 ,jdk1.6 数据库:mysql 开发工具myeclipse6.5 服务器:tomcat6.0 系统:vista 整和:struts+hibernate+spring+jbpm 本系统业务流程用工作流(jbpm),数据库持久化采用 hibernate,视图层采用...

    postfix全功能邮件服务器

    DBD-mysql-4.020.tar.gz 以上三个包为extmail的倚赖包 GD-2.46.tar.gz File-Tail-0.99.3.tar.gz rrdtool-1.2.23-3.el5.i386.rpm rrdtool-perl-1.2.23-3.el5.i386.rpm 以上四个包为extman的倚赖包 fp-Linux-i686-ws....

    DBCP连接池 和c3po连接池

    commons-dbcp-1.2.1.jar //连接池的实现 commons-pool.jar //连接池实现的倚赖库 commons-collection.jar //连接池实现的倚赖库 c3po0.902.jar 只要解压dbcppoolcollectionc3po.rar即可

    Python技术手册(第2版) 第一部分

    最新的,2010年6月份的,上传大小太受限了,只好分成...《python技术手册》为程序员最倚赖的信息提供了可靠而实际的快速参考。在python程序员的藏书中,本书将迅速占据一席之地。 如无法解压,请使用好压haozip解压。

    Python技术手册(第2版) 第二部分

    最新的,2010年6月份的,上传大小太受限了,只好分成...《python技术手册》为程序员最倚赖的信息提供了可靠而实际的快速参考。在python程序员的藏书中,本书将迅速占据一席之地。 如无法解压,请使用好压haozip解压。

    Python技术手册(第2版) 第三部分

    最新的,2010年6月份的,上传大小太受限了,只好分成...《python技术手册》为程序员最倚赖的信息提供了可靠而实际的快速参考。在python程序员的藏书中,本书将迅速占据一席之地。 如无法解压,请使用好压haozip解压。

    cts依赖jar(Android 5.0)

    将CTS自带的测试用例导入到Android Studio中需要的几个倚赖jar

    工作流chm手册jbpm3.1

    JBoss jBPM 是一个复杂的可...JBoss jBPM 只有最小的倚赖性可以很容易的作为java库来使用.当然它也可以用在吞吐量极为关键的J2EE 群应用服务器环境中. JBoss jBPM 可以同任何数据库配置可以部署在任何应用服务器上

    jBPM中文用户指南 chm格式

    JBoss jBPM 是一个复杂的可...JBoss jBPM 只有最小的倚赖性可以很容易的作为java库来使用.当然它也可以用在吞吐量极为关键的J2EE 群应用服务器环境中. JBoss jBPM 可以同任何数据库配置可以部署在任何应用服务器上.

    jbpm中文用户指南

    <br>JBoss jBPM 只有最小的倚赖性可以很容易的作为java库来使用.当然它也可以用在吞吐量极为关键的J2EE 群应用服务器环境中. <br>JBoss jBPM 可以同任何数据库配置可以部署在任何应用服务器上. <br>

    论文研究-基于Groebner基的多维多通道反卷积问题求解 .pdf

    基于Groebner基的多维多通道反卷积问题求解,李卫华,侯晓荣,本文给出了利用Groebner基理论求解多维多通道反卷积问题的新方法。该方法的求解过程 ...仅倚赖于原滤波器组本身,而不需要估计预先输��

    JBPM3.1Help(中文)

    第一章:介绍 ...JBoss jBPM 只有最小的倚赖性可以很容易的作为java库来使用.当然它也可以用在吞吐量极为关键的J2EE 群应用服务器环境中. JBoss jBPM 可以同任何数据库配置可以部署在任何应用服务器上.

Global site tag (gtag.js) - Google Analytics