基于REST+CoC构建Java Web快速开发框架的架构思路?? ? ?在《Web开发敏捷之道》这本书的前面几章里,Dave向我
基于REST+CoC构建Java Web快速开发框架的架构思路
?? ? ?在《Web开发敏捷之道》这本书的前面几章里,Dave向我们炫耀怎样简单的开始一个Ruby on Rails之旅,建一张表,执行一句ruby命令行生成一个scaffold脚手架程序,然后写一句代码,就可以完成了对一个表或者说是资源的CRUD操作的功能的实现。这激发了我的兴趣,用Java,能不能更简单的完成这件事。
?? ? ?我在我们应该怎样看待框架中,实现了一个JDBC版的Base类,和一个Hibernate版的Base类,取模仿RoR的ActiveRecord,这样我们编程的时候,只需要实现一个Base的子类,就可以完成CRUD了。
?? ? ?我的毕设题目是与Rest,更准确说是与ROA有关的,另外就是在看Spring MVC对于惯例优先(Convention over Configuration,CoC)原则的实现。
?? ? ?Web架构的四个元素
?? ? ?无论是Rails还是Spring MVC都是MVC实现,因此我的研究也肯定是基于MVC模式的。那么分别来关注M,V和C,另外就是将url和C进行映射的Router(或者说是Struts里的映射文件)。
?? ? ?首先是M,我不想自己编M,那就自动生成,怎么才能自动生成呢,根据数据库自动生成,而且我生成要是一个ActiveRecord模式的类。所以不是像过去弄个HashMap就能混过去了。之后就是看了ASM3.1和ClassLoader的知识,发现这是可以实现的。如下:
?? ? 先整个测试:
?? ??@Test
中,实现了一个JDBC版的Base类,和一个Hibernate版的Base类,取模仿RoR的ActiveRecord,这样我们编程的时候,只需要实现一个Base的子类,就可以完成CRUD了。</div>
<p>?</p>
<p>事实上到现在为止,java还没有出现一个比较完整的类似ActiveRecord的库. 可以搜索出一些尝试,但是不是半途而废了就是数据库支持不完全.至于灵活的find机制,光靠目前的java真的很难实现.</p>中,实现了一个JDBC版的Base类,和一个Hibernate版的Base类,取模仿RoR的ActiveRecord,这样我们编程的时候,只需要实现一个Base的子类,就可以完成CRUD了。</div>
<p>?</p>
<p>事实上到现在为止,java还没有出现一个比较完整的类似ActiveRecord的库. 可以搜索出一些尝试,但是不是半途而废了就是数据库支持不完全.至于灵活的find机制,光靠目前的java真的很难实现.</p>
</div>
<p>如果你能搜到我还自己实现干嘛啊~你如果读了我上篇应该可以看出,我是能用别人的就用别人的,当然了,那个别人得是比较可靠的</p>中,实现了一个JDBC版的Base类,和一个Hibernate版的Base类,取模仿RoR的ActiveRecord,这样我们编程的时候,只需要实现一个Base的子类,就可以完成CRUD了。</div>
<p>?</p>
<p>事实上到现在为止,java还没有出现一个比较完整的类似ActiveRecord的库. 可以搜索出一些尝试,但是不是半途而废了就是数据库支持不完全.至于灵活的find机制,光靠目前的java真的很难实现.</p>
</div>
<p>如果你能搜到我还自己实现干嘛啊~你如果读了我上篇应该可以看出,我是能用别人的就用别人的,当然了,那个别人得是比较可靠的</p>
</div>
<p>?</p>
<p>看见实现了insert, 勉强算CRUD中完成了一个create吧.</p>中,实现了一个JDBC版的Base类,和一个Hibernate版的Base类,取模仿RoR的ActiveRecord,这样我们编程的时候,只需要实现一个Base的子类,就可以完成CRUD了。</div>
<p>?</p>
<p>事实上到现在为止,java还没有出现一个比较完整的类似ActiveRecord的库. 可以搜索出一些尝试,但是不是半途而废了就是数据库支持不完全.至于灵活的find机制,光靠目前的java真的很难实现.</p>
</div>
<p>如果你能搜到我还自己实现干嘛啊~你如果读了我上篇应该可以看出,我是能用别人的就用别人的,当然了,那个别人得是比较可靠的</p>
</div>
<p>?</p>
<p>看见实现了insert, 勉强算CRUD中完成了一个create吧.</p>
</div>
<p>看第二页,我有一个Hibernate的版本,<span style="">ActiveRecord extends Base extends AdvancedHibernateGenericDAO extends HibernateGenericDAO implements GenericDAO?</span></p>
<p><span style=""><br>我们项目有一个自己的框架,后两个就是框架里的,HibernateGenericDAO 里面封装了几乎所有常用的数据操作,由于标准的QBE不支持关联,因此在AdvancedHibernateGenericDAO里我实现了一个findByAdvancedExampleWithCrition的方法,该AdvancedExample使用了<span style="">movingboy<span style="font-weight: normal;">的<a href="/topic/233664" target="_blank">实现</a></span><span style="">,基本可以代替一般复杂的HQL。然后Base直接继承自这个DAO,里面写了如何将ActiveRecord子类注入到DAO中。?</span></span></span></p>EntityService<Dog> dogs = new EntityService<Dog>(){};
前一种写法就是你说的 extends,缺点是不能很好的利用泛型, 因为 dogs.get("XiaoBai") 你返回的是个 Object
而后一种写法 dogs.get("XiaoBai") 你返回的可以是个 T 31 楼 pior 2009-05-14 一直觉得`REST有啥?``
只不过把控制参数提升了一个层次进行传递`本质上没有变化` 32 楼 key232323 2009-05-16 关注REST概念更深入的诠释……
不过想lz这中想法,就功能来说实现起来并用作产品开发实际中,我已经开始做了,效率还成
不过和最常见的pojo不同,我都定义成了xml,又用些groovy***,更动态些(比如表字段加一个外键字段,只需要在xml里加一行描述,然后就该auto_complete,fk_constraint,CRUD***了),
COC一直在细节中学习。
大家继续讨论,我继续学习
33 楼 sslaowan 2009-05-16 key232323 写道关注REST概念更深入的诠释……
不过想lz这中想法,就功能来说实现起来并用作产品开发实际中,我已经开始做了,效率还成
不过和最常见的pojo不同,我都定义成了xml,又用些groovy***,更动态些(比如表字段加一个外键字段,只需要在xml里加一行描述,然后就该auto_complete,fk_constraint,CRUD***了),
COC一直在细节中学习。
大家继续讨论,我继续学习
我的想法是,根据数据库表结构,自动给POJO加上关联注解,不用任何配置。ASM可以帮助我们做到这点 34 楼 88250 2009-05-18 javassist 楼主可以关注一下。 35 楼 unsid 2009-05-18 关于RESTFUL,我还是认为其是“面向互联网”的应用体系风格,因为互联网的隐含假设是“无限广阔的”,这样REST定义的一些约束,包括URI的使用才是有价值的。
倘若是构建标准企业级应用,企业级应用虽然也很庞大,但是其存在环境几乎是“有限的空间”,REST带来的伸缩性相比较REST的学习研究成本来说微不足道
从网上找的所有例子所有介绍,几乎都是在互联网应用环境的前提下,在“无限广阔”的背景下,提升系统优质性。 36 楼 sslaowan 2009-05-19 unsid 写道关于RESTFUL,我还是认为其是“面向互联网”的应用体系风格,因为互联网的隐含假设是“无限广阔的”,这样REST定义的一些约束,包括URI的使用才是有价值的。
倘若是构建标准企业级应用,企业级应用虽然也很庞大,但是其存在环境几乎是“有限的空间”,REST带来的伸缩性相比较REST的学习研究成本来说微不足道
从网上找的所有例子所有介绍,几乎都是在互联网应用环境的前提下,在“无限广阔”的背景下,提升系统优质性。
给你看看这个http://ibm.com/developerworks/ecma/campaign/er.jsp?id=408910&imid=72994487&end
“您将创建一个简单的基于 web 的用户接口,此用户接口使用了一个已发布的 REST 风格的外部服务,并返回一个 Atom 格式的数据。”
去年10月我去参加IBM的技术创新大会,听了他们的云计算,他们已经在为北京的一些企业提供云服务了。
最近又对比了一下Struts,Spring MVC以及几个JAX-RS实现,诸如CXF,RestEasy的URI映射方式,有了些新的感悟~~~ 37 楼 sslaowan 2009-05-19 88250 写道javassist 楼主可以关注一下。
多谢多谢~~
不过不知道跟ASM比性能如何 38 楼 88250 2009-05-19 sslaowan 写道88250 写道javassist 楼主可以关注一下。
多谢多谢~~
不过不知道跟ASM比性能如何
一定要性能非常好么?
呵呵....