学习了很多人捧为经典的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必将更加美好!