该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-12-29
zhouxuanyi 写道 讲到ModelDriven,我的理解和xwok的定义不太一样,我认为对于一个复杂对象a,他有两个以上属性c,d
我们用url这样?c=xxx&d=xxx而不是?a.c=xxx&a.d=xxx,在form中的写法就免了: 这样,webwork确实最多支持一个Model,而xyz可以支持多个,不过我这个例子,也只是一个 /** *this is a logic to read a domain:user's parameter from request *and then fill user attribute then put user into request attribute */ package sample.logic; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import sample.domain.User; import xyz.frame.annotations.Out; import xyz.frame.annotations.Read; public class ModelLogic { private static final Log LOG = LogFactory.getLog(ModelLogic.class); @Read @Out private User user; public void showUser(){ LOG.debug("user is:"+user); } } 在我看来支持一个model就等于支持无数个model,他又不限定这个model只是pojo,很容易就可以扩展,如果还想进一步支持到一些findresource特性可以修改modeldriven的interceptor也是很容易的事情。 |
|
返回顶楼 | |
发表时间:2006-12-29
看看俺整的MVC框架 ajf(agile java framework) 献丑了 mvc,连接池,缓存,jdbc tool,sqlmap,模板,js 等全部DIY 根据method参数自动调用相应的execute函数 execute_{method} /x/user$query.do /x/user$update.do /x/user$delete.do 详情可参考 http://www.iteye.com/topic/38847 或 http://www.javaresearch.org/article/58413.htm 粉欢迎丢砖 public class UserAction extends BaseAction{ public String execute()throws Exception{ return execute_query(); } public String execute_query()throws Exception{ String sql = "select * from t_user"; getConn();//获取连接 Map map = PagedUtil.queryString(conn,sql,1,1,request); //Connection conn是成员变量 add(map); return "query"; } public String execute_input()throws Exception{ return "input"; } public String execute_insert()throws Exception{ String table = "t_user"; String cols = "id,name,hh,ww,birth_day"; int autoPK = 1; getConn(); DBUtil.insert(conn,table,cols,autoPK,model); return "query"; } public String execute_edit()throws Exception{ Map user = null; String objectid = (String)model.get("objectid"); String sql = "select * from t_user where id='"+objectid+"'"; getConn(); user = DBUtil.queryOne(conn,sql,null); //sql = "select * from t_user where id=?" //user = DBUtil.queryOne(conn,sql,new Object[]{objectid}); if(user==null){ return "no_object"; } model.put("user",user); return "edit"; } public String execute_update()throws Exception{ String table = "t_user"; String cols = "id,name,hh,ww,birth_day"; conn = DBUtil.getConn(); DBUtil.updateRow(conn,table,cols,1,model); return "!query"; } public String execute_delete()throws Exception{ String sql = "delete from t_user where id "; DBUtil.batchDelById(sql,request); return "!query"; } } enjoy |
|
返回顶楼 | |
发表时间:2006-12-31
myreligion 写道 能否介绍下流程的思路,好比从用户发起请求到返回给用户,这个请求是怎么接受,怎么传给对应的处理方法,怎么返回的?谢谢:)
如果真的0配置,那么IOC注入怎么实现哪? 思路很简单,用户发请求时要包含4个信息:1,参数,2,名字空间,3,类名,4,方法名。 在非web应用中这样:--- LogicProxy proxy = logicProxyFacory.createLogicProxy( "/test/logic", "ModelLogic", "showUser", extraContext); proxy.execute(); 在web应用中这样:http://test/logic/ModelLogic!showUser?name=name 然后,在LogicInvocation中就很容易利用反射得到类名,方法名,参数,执行之,将结果放在ThreadLocal里面,这样,就可以将信息传到View层了,View层利用命名规范查找View模板,这里的一切信息都是通过ThreadLocal传递,类名叫LogicContext,和xwork的ActionContext一摸一样,在WebView层的处理是和WebWork的Result一样,支持多种,自己扩张,也支持打印到Systemout的View,可以在Swing中使用。 0配置是mvc本身,而且xyz自己使用了hivMind ioc容器,他在很多方面比spring要好,而xyz的扩展0。1支持spring+hibernate,所以,xyz core ,0配置,而xyz 扩展,还是要配置的,而且,如果你想更改xyz的内核实现,而不更改内核代码,还是需要添加hiveMind配置的,这也是hiveMind做的比spring好的一个地方,灵活的支持迭代开发 |
|
返回顶楼 | |
发表时间:2006-12-31
myreligion 写道 PS:如果仅仅是为了不继承接口就可以拥有logic的功能,去handleRequest,那么spring就可以了啊。直接实现一个Hanlder(不要用默认的Controller),注册到spring里面,然后按照表单传入的参数选择调用的对象和方法去执行不就完了。
当然可以了,但是spring如何和View交互,好像spring本身做不到,当然自己添加实现也可以,但是那样思路跟我这有什么区别,没有什么啊,只是我这不依赖spring而已,我想,在spring中加个拦截器,是很 容易实现类似功能的(pojo),xyz带接口也就80个类,但是,xyz使用hiveMind做ioc 容器,做框架使用hiveMind要比spring好多了,他们的区别我在javaeye发过一片文章,可惜被评为初级,cut it!了,而且,xyz本身支持spring 业务接口做logic,比如,如果你用ssh(struts,spring,hibernate)做应用,那么加上xyz框架,struts代码可以完全不要,只需要在spring service(handle、manager)都是,里面加一些java注解,改一下url,就可以抛弃struts 的java类和代码了,不好吗 |
|
返回顶楼 | |