首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

疯子在思忖之自己动手写MVC

2013-08-04 
疯子在思考之自己动手写MVCMVC-1http://lizhizhang.iteye.com/blog/1912005MVC-2http://lizhizhang.iteye.

疯子在思考之自己动手写MVC
MVC-1
http://lizhizhang.iteye.com/blog/1912005
MVC-2
http://lizhizhang.iteye.com/blog/1913546
自己动手写MVC3,前两篇我们分析了MVC的基础,在这里大家对main函数有争论,接下来会有java多线程的文章,与大家分享。(这里会略带一些tomcat main函数的内容)。
第二篇介绍了为什么要用MVC以及MVC的概念,即什么是MVC。
通过以上的了解,我个人认为,对于开发者来讲,MVC的filter即我们在web.xml中配置的拦截器是不重要的,框架为我们写好了,我们做的事情就是配置一下就可以了,而我们更关注具体的业务逻辑和VIEW,而如果我们自己写一个MVC那么,我觉得关注点就是开发人员不关心的那部分。即filter。业务逻辑和VIEW要留给开发人员自己实现。
那么filter中具体要实现哪些功能呢?

1、action方法映射
2、拦截器
3、参数注入
4、模型驱动(模型参数注入)
5、路由跳转
6、action方法的执行
参考struts及spring mvc其实有两种实现方法,对比而言,spring mvc的方法更简单效率更高。

这里附参数注入代码

private Object[] actionIoc(ServletRequest request, ActionEntity actionEntity) {// 参数名称列表List<String> parameterList = actionEntity.getParameterNameList();Class<?>[] parameterClass = actionEntity.getMethod().getParameterTypes();BeanFactory beanFactory = BeanFactory.getInstance();// 参数列表Object[] args = new Object[parameterList.size()];for (int i = 0; i < parameterList.size(); i++) {String parameterName = parameterList.get(i);// 如果是基本数据类型if (parameterClass[i].equals(String.class)) {args[i] = request.getParameter(parameterName);} else {Object entity = null;try {entity = parameterClass[i].newInstance();} catch (Exception e) {Log.getInstance().error(e);return null;}MethodAccessor methodAccessor = beanFactory.getProxyBean(parameterClass[i].getSimpleName());Method[] methods = parameterClass[i].getMethods();for (Method method : methods) {if (method.getName().startsWith("set")) {String parameterName4Request = parameterName+ "."+ StringUtil.setFirstByteLowerCase(method.getName().substring(3));methodAccessor.set(entity, method.getName(),request.getParameter(parameterName4Request));}}args[i] = entity;}}return args;}


methodAccessor的思想是这样的
对于模型驱动而言,这里没有采用jdk反射或cglib字节码反射,而是生成一个代理类来变相反射(实际上是对象方法的直接调用)对于这部分思考有兴趣的朋友可以参考reflectasm。

其他代码可以在框架中下载
http://lizhizhang.iteye.com/blog/1896545
有什么意见或建意可以在这里拍砖。
MVC这部分比较简单,大家有什么好想法可以继续补充,接下来ORM....

我也看了源码,个人感觉很头疼,应该是我本人的技术水平还很低,觉得框架里的逻辑都比较绕。

我也看了源码,个人感觉很头疼,应该是我本人的技术水平还很低,觉得框架里的逻辑都比较绕。


你的代码不绕是因为你考虑的因素太少了;学学基本可以;但如果也要成产品,考虑各种各样的因素;你的代码不绕才怪。

我也看了源码,个人感觉很头疼,应该是我本人的技术水平还很低,觉得框架里的逻辑都比较绕。


你的代码不绕是因为你考虑的因素太少了;学学基本可以;但如果也要成产品,考虑各种各样的因素;你的代码不绕才怪。
在学习,多谢指教

我也看了源码,个人感觉很头疼,应该是我本人的技术水平还很低,觉得框架里的逻辑都比较绕。


你的代码不绕是因为你考虑的因素太少了;学学基本可以;但如果也要成产品,考虑各种各样的因素;你的代码不绕才怪。

说的不错!!!!
补充一下:


MVC 21 楼 zh_harry 昨天   http://lizhizhang.iteye.com/blog/1915601一篇关于log4j的文章,大家看一下 22 楼 alvin198761 昨天   tedeum 写道我觉在写之前不要考虑太多的技术,什么action方法映射
2、拦截器
3、参数注入
4、模型驱动(模型参数注入)
5、路由跳转
6、action方法的执行,
MVC是什么?目标是什么先考虑清楚,因为我觉得不用上面这些东西也可能是MVC,先考虑技术这些东西就把目标限定死了,那么你写的这个MVC就没有超越别人的东西,还不如去读别人的代码,参与相关开源项目好一些。
个人感觉读了别人的代码,会把自己目标限制死。
中国人发明了一种计算工具,用了n年,甚至后来用它计算火箭升天,原子弹爆炸。它就是算盘。
西方人完全不参考这个工具,自己创造了一个计算工具,最初的时候,需要几十个人一起合作,用很多的点,才能计算,但经过不断改造,后来变的无所不能,这就是电子计算机 23 楼 foible 昨天   alvin198761 写道tedeum 写道我觉在写之前不要考虑太多的技术,什么action方法映射
2、拦截器
3、参数注入
4、模型驱动(模型参数注入)
5、路由跳转
6、action方法的执行,
MVC是什么?目标是什么先考虑清楚,因为我觉得不用上面这些东西也可能是MVC,先考虑技术这些东西就把目标限定死了,那么你写的这个MVC就没有超越别人的东西,还不如去读别人的代码,参与相关开源项目好一些。
个人感觉读了别人的代码,会把自己目标限制死。
中国人发明了一种计算工具,用了n年,甚至后来用它计算火箭升天,原子弹爆炸。它就是算盘。
西方人完全不参考这个工具,自己创造了一个计算工具,最初的时候,需要几十个人一起合作,用很多的点,才能计算,但经过不断改造,后来变的无所不能,这就是电子计算机
人啊,往往喜欢用一个极端去佐证另一个极端,读懂别人的代码,就能了解别人的想法和创意,这是基础,大部分是开发人员生存的工具,在此基础上做出自己的创新,也可以是微创新,别人已经造发了轮子,非常高效安全,你便便要重新造个轮子,那不是浪费生命吗?
站在巨人的肩膀上去思考创造,一定比闭门造车强。 24 楼 zh_harry 昨天   foible 写道alvin198761 写道tedeum 写道我觉在写之前不要考虑太多的技术,什么action方法映射
2、拦截器
3、参数注入
4、模型驱动(模型参数注入)
5、路由跳转
6、action方法的执行,
MVC是什么?目标是什么先考虑清楚,因为我觉得不用上面这些东西也可能是MVC,先考虑技术这些东西就把目标限定死了,那么你写的这个MVC就没有超越别人的东西,还不如去读别人的代码,参与相关开源项目好一些。
个人感觉读了别人的代码,会把自己目标限制死。
中国人发明了一种计算工具,用了n年,甚至后来用它计算火箭升天,原子弹爆炸。它就是算盘。
西方人完全不参考这个工具,自己创造了一个计算工具,最初的时候,需要几十个人一起合作,用很多的点,才能计算,但经过不断改造,后来变的无所不能,这就是电子计算机
人啊,往往喜欢用一个极端去佐证另一个极端,读懂别人的代码,就能了解别人的想法和创意,这是基础,大部分是开发人员生存的工具,在此基础上做出自己的创新,也可以是微创新,别人已经造发了轮子,非常高效安全,你便便要重新造个轮子,那不是浪费生命吗?
站在巨人的肩膀上去思考创造,一定比闭门造车强。
是对的,我刚想回复这位同学,不知道怎么回复呢,你说得这个很对 25 楼 笨蕉xx 昨天   ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????  ??????????  ???????????????????????????????????   ???????  ???????????????????????????????????????????????????????????????????????? 26 楼 zh_harry 昨天   笨蕉xx 写道???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????  ??????????  ???????????????????????????????????   ???????  ????????????????????????????????????????????????????????????????????????
玩是吧 27 楼 zaq369cde 昨天   ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????  ??????????  ???????????????????????????????????   ???????  ???????????????????????????????????????????????????????????????????????? 28 楼 zh_harry 昨天   大家有真心觉得文章有用的请顶上来,谢谢了 29 楼 alvin198761 昨天   zh_harry 写道foible 写道alvin198761 写道tedeum 写道我觉在写之前不要考虑太多的技术,什么action方法映射
2、拦截器
3、参数注入
4、模型驱动(模型参数注入)
5、路由跳转
6、action方法的执行,
MVC是什么?目标是什么先考虑清楚,因为我觉得不用上面这些东西也可能是MVC,先考虑技术这些东西就把目标限定死了,那么你写的这个MVC就没有超越别人的东西,还不如去读别人的代码,参与相关开源项目好一些。
个人感觉读了别人的代码,会把自己目标限制死。
中国人发明了一种计算工具,用了n年,甚至后来用它计算火箭升天,原子弹爆炸。它就是算盘。
西方人完全不参考这个工具,自己创造了一个计算工具,最初的时候,需要几十个人一起合作,用很多的点,才能计算,但经过不断改造,后来变的无所不能,这就是电子计算机
人啊,往往喜欢用一个极端去佐证另一个极端,读懂别人的代码,就能了解别人的想法和创意,这是基础,大部分是开发人员生存的工具,在此基础上做出自己的创新,也可以是微创新,别人已经造发了轮子,非常高效安全,你便便要重新造个轮子,那不是浪费生命吗?
站在巨人的肩膀上去思考创造,一定比闭门造车强。
是对的,我刚想回复这位同学,不知道怎么回复呢,你说得这个很对
突破传统的人才会有创新,陈规守旧的人才能守住文明,我们的观念是完全不同的,但不代表谁对谁错, 30 楼 freezingsky 18 小时前   博主,我刚才突发兴趣下载了你自己写的MVC框架。同时也花了十多分钟看了一下,发现代码和整个架构上感觉很是轻量,而且思路很好。我在想,你是否能跟着你现在的《疯子思考》系列,最后把自己的框架做一个详细的解说,以及各个部分划分的思路。这部分我想,意义更为重大。 31 楼 zh_harry 18 小时前   freezingsky 写道博主,我刚才突发兴趣下载了你自己写的MVC框架。同时也花了十多分钟看了一下,发现代码和整个架构上感觉很是轻量,而且思路很好。我在想,你是否能跟着你现在的《疯子思考》系列,最后把自己的框架做一个详细的解说,以及各个部分划分的思路。这部分我想,意义更为重大。
我是这样考虑的,之前的疯子思考系统,如果你都看过的话,会感觉都是为这个框架的铺垫。
接下来是ORM
理论上从0讲起,以后会出框架的demo,和实践性项目。

热点排行