移:Naked Objects
宗政子琪
2023-12-01
一个SOA程序通常是层次结构的。例如,我们需要实现一个用户管理的程序,通常需要完成以下步骤:
建立一个user表
建立一个User对象
建立UserDAO类
建立UserService类
建立userlist.jsp用户列表页面
建立userModify.jsp用户修改页面
建立Hibernate的相关xml文件
建立Spring的相关配置
建立Struts的相关配置
建立测试类进行单元测试
...
完成一个简单的工作需要建立很多类,很多配置,麻烦又容易出错.
所以一些初级程序员会想:如此多的步骤似乎不能带来什么好处,还不如回到老的模式,用一个jsp+一个简单类把它们搞定.
这样的想法其实很自然,如此为了OO似乎没有必要.
分析以上的过程,我们其实只需要告诉系统这么几点:
我们需要一个叫User的对象
User对象有3个属性,这三个属性的名称分别是XXX,类型分别是YYY
我们需要对此对象进行增删改列表操作
于是产生了Naked Objects方法
对于整个过程,只需要建立一个类(按照JDK5.0建立,伪码):
package kent.test;
@entity
@method=insert,delete,update,query
public class User{
private String id;
private String name;
private String password;
@generate=UUID length=32
public String getId(){
return this.id;
}
public void setId(String id){
this.id = id;
}
@length=10
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
@length=20
public String getPassword(){
return this.password;
}
public void setPassword(String password){
this.password=password;
}
}
好了,我们已经告诉系统大部分事情.
下面该是代码产生器做的事情:我们需要产生DAO,Service,Spring配置,Hibernate配置,jsp页面,jsp页面配制.
在此之前,我们需要一个命名规范,所有产生的类在哪里,配置文件在哪里,web url对于user的增删改查页面分别是什么.
UI层我们还需要有页面模版,以便获得显示的样式.
对于页面内容还有需要修改的内容,比如:输入的password应该是password框而不是edit框.这部分也许也可以定义在user类当中
对于集成开发环境,我们需要一个eclipse的插件,能把这所有的步骤方便的产生,测试,发布
这个简单的用户管理界面到此应该大功告成了.
可是,这是极端简单的情况,如果复杂了该如何处理呢?
比如,对象间的关系,复杂的对象调用流程该怎么办?
我想,对象间的关系应该借用Hibernate的对象关系进行处理.
而复杂的对象调用,比如if-then-else for-next等,应该使用一个工作流的工具去实现.
到此为止,一个完整的naked object framework框架计划就完成了,看上去很像ruby on rails.
可是啥时候才做得出来呢?仿佛是遥遥无期的事情