Android上的Guice RoboGuice

在開發應用時一個基本原則是模塊化,而且近最大可能性地下降模塊之間的耦合性。在Java平臺上Spring Framework 以及.Net 平臺 CAB ,SCSF 和Prism (WPF,Silverlight)中都有對Dependency injection 的支持。 html

Dependency injection 大大下降了類之間的依賴性,能夠經過annotation (Java)或是SeviceDepdendcy (.Net) 描述類之間的依賴性,避免了直接調用相似的構造函數或是使用Factory來參加所需的類,從而下降類或模塊之間的耦合性,以提升代碼重用並加強代碼的可維護性。 app

Google Guice提供了Java平臺上一個輕量級的 Dependency injection 框架,並能夠支持開發Android應用。本指南將使用Android平臺來講明Google Guice的用法。 框架

簡單的來講:Guice 下降了Java代碼中使用 new 和 Factory函數的調用。能夠把Guice 的@Inject 看做 new 的一個替代品。使用Guice可能還須要寫一些Factory方法,但你的代碼不會依賴這些Factory方法來建立實例。 使用Guice 修改代碼,單元測試已經代碼重用變得更容易。 模塊化

RoboGuice 爲Android平臺上基於Google Guice開發的一個庫,能夠大大簡化Android應用開發的代碼和一些繁瑣重複的代碼。好比代碼中可能須要大量使用findViewById在XML中查找一個View,並將其強制轉換到所需類型,onCreate 中可能有大量的相似代碼。RoboGuice 容許使用annotation 的方式來描述id於View之間的關係,其他的工做由roboGuice庫來完成。好比: wordpress

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平臺上使用方法。 單元測試

參考地址:http://www.imobilebbs.com/wordpress/?p=2480  http://www.cnblogs.com/xiongbo/archive/2011/05/31/2063355.html     測試

相關文章
相關標籤/搜索