學習了很多人捧為經典的ppp之后,我開始考慮在所參與的團隊中采用敏捷開發的方式,除了結對編程,基本采用XP編程的方式。跌代計劃,TDD,重構,積極溝通。然而在此過程中卻遇到很多尷尬的問題,一個是團隊中的人員經常流動,導致剛剛熟悉的開發環境,又要找新人代替;一個是團隊中的成員水平參差不齊,難以達成一致的良好設計規范,也許又是不得不做一些硬性的規定。
這里最大的問題是:XP強調代碼即設計,那就要求每個人都對代碼的編寫非常熟練,對團隊中每個成員的編程水平要求很高,然而這和相對較少的項目經費,及短暫的項目周期難以協調。
更為可怕的是,項目中的人員職責不明,沒有明確的負責人,而由沒有軟件開發和管理經驗的人主導。
Hibernate根據配置文件從數據庫中把關系型的數據以對象的形式挖掘出來,那么假如我有一個Table控件,可以放置展現任何的表結構,如何在運行期做到把數據載入呢?Hibernate已經把數據讀成對象的形式,就注定沒有JDBC一般靈活,為次可以通過編寫如下的兩個工具方法來實現:
import java.lang.reflect.Method;
/**
* 獲取指定bean的指定字段的值
*/
public class BeanUtils {
private BeanUtils(){}
/**
* 根據beanName和列名字獲取hql語句
* @param beanName
* @param columnNames
* @return 以list形式返回數據的hql語句
*/
public static String getHql(String beanName, String[] columnNames){
StringBuffer sb = new StringBuffer();
sb.append("select new list(");
StringBuffer columnString = new StringBuffer();
for(int i=0,len=columnNames.length;i<len;i++){
columnString.append(",");
columnString.append(columnNames[i]);
}
sb.append(columnString.substring(1));
sb.append(") from ");
if(Character.isUpperCase(beanName.charAt(0)))
sb.append(beanName);
else
sb.append(upperFirstChar(beanName));
return sb.toString();
}
/**
* @param bean 獲取到的域對象
* @param fieldName 欲獲取值的字段名
* @return 字段在當前bean封裝下的值
*/
public static Object getFieldByName(Object bean, String fieldName){
try {
Method m = bean.getClass().getMethod("get"+upperFirstChar(fieldName), null);
return m.invoke(bean, null);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private static String upperFirstChar(String orig){
return Character.toUpperCase(orig.charAt(0)) + orig.substring(1);
}
}
按照已經處理后,我們就可以既應用Hibernate對象訪問的優點,又不損失字符串的靈活性,代碼中應用了Hibernate的select特性及java的反射機制
Google 為開源項目建立起了資源庫. 這個google站點是google為推動開源發展做的又一努力!
Google在FAQ上說道, Google意識到對開源項目開發者而言,有多種的選擇未嘗不是一件好事。 這個開源資源庫強調軟件資源的儲存,郵件列表討論和bug追蹤.
需要說明的是google資源對選擇了具備一定的合適許可證的知名項目(比如sourceforge上的項目來提供下載)。站點采用SVN進行管理。
您對google的新舉動有何高見呢?
Apache commons-email是對javamailAPI的一層封裝,經封裝后的發送郵件的代碼變得極為簡單,但這里有一個中文支持的小問題。
commons-email主要的封裝類是Email類,這是一個抽象類,該框架給出了SimpleEmail的默認實現,但該實現并不支持中文,即使調用Email的setCharset也不起作用。
事實上,SimpleEmail調用了Email超類中的setContent方法來設置郵件內容(通過setMsg方法),而在設置內容時,又采用了默認的英文字符集,我們只要在代碼中直接調用email類的setContent方法就可以支持中文了,但要注意setContent具備兩個參數,第一個是內容對象,第二個則是內容類型,我們把第二個參數設置為:
SimpleEmail.TEXT_PLAIN + "; charset=utf-8", 即可。理由如下面源代碼所示:
public void setContent(Object aObject, String aContentType)
{
......
// set the charset if the input was properly formed
String strMarker = "; charset=";
int charsetPos = aContentType.toLowerCase().indexOf(strMarker);
if (charsetPos != -1)
{
// find the next space (after the marker)
charsetPos += strMarker.length();
int intCharsetEnd =
aContentType.toLowerCase().indexOf(" ", charsetPos);
if (intCharsetEnd != -1)
{
this.charset =
aContentType.substring(charsetPos, intCharsetEnd);
}
else
{
this.charset = aContentType.substring(charsetPos);
}
}
}
}
即有一個文本解析的過程。
eclipse很麻煩的一點就是eclipse的頻繁升級+IT技術人員追求最先進的技術+eclipse平臺對插件不保證向下兼容,先在eclipse的官方網站http://www.eclipse.org提供了一個一站式服務的好辦法,就是Callisto,這里面集成了圖形設計器,WTP等大多數能想象到的功能,免去了我們諸多麻煩.3.2以后的eclipse必將更加美好!