`
yuerthe9
  • 浏览: 833 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

优雅的工作方式(一)——欢迎拍砖

阅读更多

咱们闲话少叙,直奔主题。


优雅(优雅的工作方式)的原则(规范):

  • 1.拒绝数据库
  • 2.拒绝配置
  • 3.数据通道的统一


下列我摘抄代码讲解,并提供完整程序源代码下载。如果大家有一肚子想骂我的话我真心的请你放在楼下、如果有更好的想法我同样真心的请你放在楼下、如果想交流我也同样真心的请你放在楼下。



和以往一样,请求的数据来到了Action(MVC使用struts2)。经过Facade时被转换为Entity。Entity是本篇的明星,它拒绝了数据库、拒绝了配置、实现了响应数据返回的第一站,并从此使得响应数据格式统一天下。

	public void findUser()throws BizException{
		String sql="select * from tb_user where id=?";
		PersistentDescriptor pd=new PersistentDescriptor();
		pd.setSql(sql);
		pd.setObject(id);
		try {
			this.list(pd);
		} catch (PersistentException e) {
			// TODO Auto-generated catch block
			throw new BizException(e.getMessage());
		}
	}

 findUser就是Entity中的一个方法,通过它可以看出Entity的精神。首先,你看到的是一个String尽管它是一句SQL,然后是PersistentDescriptor,也许你已经猜到它的作用了,没错它就是方便你实现“?”传参。


this.list(pd)这是当前类的父类接口:

public class User extends BaseEntity

 关键的核心就在this.list(pd)该方法中,它隐蔽了数据库的操作,拒绝了重量级的配置文件。它的意义就在于执行上面定义的那个String。

和以往不同的是查找到得数据不需要你(程序员)来建立或构造,它自身已经包含了“容器”而且规格及访问方式是统一的,所以它实际上为你做了很多事。至于它后面会展开讲述。


也许太简单,简单到你还没有回过神儿我就要讲视图了。同样,它会返回到Facade。在这里就是实现一次容器数据的转换

为什么转换不言而喻,我就说究竟怎么进行转换:

	public IBean find(IBean b)throws FacadeException{
		User user=new User();
		

this.Bean2Entity(b, user);//


转换为Entity
		try {
			user.findUser();


//执行操作
			return this.Entity2Bean(user);


//转换为一个统一的容器对象
		} catch (BizException e) {
			// TODO Auto-generated catch block
			throw new FacadeException(e.getMessage());
		}
	}

 其实除了我标注为红色的代码外其他的都没有必要关心。没错Entity2Bean是父类的方法。

public class UserFacade extends BaseFacade

 

而Entity2Bean返回的是一个一统天下的对象——BaseValueObject,其访问方式为:

<%
BaseValueObject t=(BaseValueObject)request.getAttribute("list");
if(t!=null){
	while(t.hasNext()){
%>
<tr>
<td><input type="checkbox" name="records" value="<%=t.getStringField("id") %>"></td>
<td><%=t.getStringField("name") %></td>
<td><%=t.getStringField("sex") %></td>
<td><%=t.getStringField("phone") %></td>
<td><%=t.getStringField("address") %></td>
<td>照片</td>
<td><input type="button" value="修改" onclick="window.location='/modify.action?type=f&id=<%=t.getStringField("id") %>'"><input type="button" value="删除" onclick="window.location='remove.action?type=s&id=<%=t.getStringField("id") %>';"></td>
</tr>
<%
	}
}
%>
 

 

可根据项目本身的特性来定制标签。

 

 

操作和理解都非常容易。

 

测试环境:jboss4.0.3、oracle9i、jdk5

注意:可以手动在jboss的bin目录下建立dp_config.properties文件,并加入DATASOURC键,值就是在jboss中配置的数据源名称。例如:java:ds。这个文件拥有自省功能,可以实现动态加载配置项。是一个很好的组件。

 

另附数据库脚本:

create table TB_USER
(
  ID      VARCHAR2(32) default sys_guid() not null,
  NAME    VARCHAR2(20),
  SEX     VARCHAR2(10),
  PHONE   VARCHAR2(20),
  ADDRESS VARCHAR2(100),
  IMAGE   BLOB
)
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics