`
taowen
  • 浏览: 193361 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Re: 有什么RoR的特性是Java模仿不了的?

阅读更多
这几天潜心研究了一下Hibernate, Spring, ASM, Java5 Instrumentation。 恩,大概列出了这些技术来,明眼人就知道我要干啥了。没错,万恶的元编程,我最痛恨的元编程要登场了。我痛恨元编程,是因为我认为它的能力超越了人类大脑的范围。但是,Java想要在语法上能有超越,唯一的办法就是元编程了。在Java中做元编程有两种方式:
1、操作字节码
比如 AspectJ
2、用动态派生的类替换基类
比如 Spring AOP,Hibernate的Lazy Loading
后者能够达到的能力基本上已经被利用尽了。我感觉,要想突围,不妨就像AspectJ一样,走到字节码这个层面去。由于robbin给的挑战题目是去Active Record相关的,大家对于RoR的很多热情也投注在Active Record上,那我就从Hibernate用法简化入手吧。现在没有实现所有的功能,但是可以给大家看一个样子:

Hibernate配置文件,放在classpath根目录下
Hibernate.properties

connection.driver_class=org.hsqldb.jdbcDriver
connection.url=jdbc:hsqldb:mem:spike
dialect=org.hibernate.dialect.HSQLDialect


User.java

public class User extends Entity<User> {

	public String username;

	public String password;
}


业务类
Authentication.java

@Reborn
public class Authentication {

	public static void register(String username, String password) {
		User user = new User();
		user.username = username;
		user.password = password;
		user.save();
	}

	public static boolean login(String username, String password) {
		User user = new User();
		return user.find(user.username == username, user.password == password).size() > 0;
	}
}


演示代码
RebornDemo.java

public class RebornDemo {

	private void demo() {
		System.out.println(Authentication.login("taowen", "password"));
		Authentication.register("taowen", "password");
		System.out.println(Authentication.login("taowen", "password"));
	}

	public static void main(String[] args) throws IOException {
		new RebornDemo().demo();
	}
}


恩,这就是所有的代码了。能够想到的在语法上更进一步的就是把extends Entity变成implements Entity,但是这样的化必须用User.create() 来替换new User()了。

简化的地方:
1、Id字段自动插入
2、Entity自动标识
3、自动添加annotatedClass
4、hbm2ddl.auto缺省为create
5、hibernate.properties的每行自动添加hibernate.前缀
6、利用强类型的查询语法糖(user.username=="taowen")来代替基于字符串的HSQL

代价:
1、使用了强类型的查询语法糖的类要标记为reborn
2、在User和Entity之间使用了extends的关系
分享到:
评论
1 楼 dcaoyuan 2007-02-13  
可以看一下JDO规范,操作字节码方式。
很好的东西让sun搞砸了,好到,甚至怀疑ActiveRecord是从这里来的,但比ActiveRecord还要好,就是好。

我用它作过一个很大的项目,最大一张表一亿四千万条记录,游刃有余呀,还有多级缓存。

相关推荐

    javarebel 用JAVA和ROR一样方便测试

    破解版本的JAR包,放到本地磁盘,ECLIPUS直接用,到JVM设置直接加 -noverify -javaagent:D:\javarebel.jar

    Java敏捷持久层-ROR-ActiveRecord持久层框架的Java实现

    在Java世界里,虽然Hibernate和JPA等框架已经非常成熟,但Ruby on Rails(ROR)中的ActiveRecord模式也受到了不少Java开发者的青睐,并有了一些移植到Java平台的实现。 ActiveRecord是一种对象关系映射(ORM)模式...

    ror-api:ROR火

    单个组织记录由以下JSON结构表示: { "id":"https://ror.org/013cjyk83", "name":"PSL Research University", "email_address":null, "ip_addresses":[ ], "established":2010, "types":[ "Education" ], ...

    ROR绿色最新环境(2013/3/10)

    ROR环境 Ruby version 1.9.3 (java) RubyGems version 1.8.24 Rack version 1.4 Rails version 3.2.12 JavaScript Runtime therubyrhino (Rhino) Active Record version 3.2.12 Action Pack version 3.2.12 ...

    freemis 基于ror框架的mis

    同时,熟悉数据库设计和管理也是必不可少的,因为RoR的ActiveRecord与数据库紧密关联。 总结,FreeMIS是一个运用了Ruby on Rails强大特性的管理信息系统实例,它体现了敏捷开发的理念,为开发者提供了快速构建企业...

    RoR选题方向—源代码

    ASP.NET、C#和J2EE/Java是RoR的主要竞争对手,它们各自有各自的优点和适用场景,了解这些技术可以帮助你比较和选择最适合的开发工具。 在深入研究RoR源代码时,建议先从官方文档和开源项目开始,例如GitHub上的...

    RoR-Newsroom:熨斗的RoR项目

    此外,RoR Newsroom可能包含了典型的CMS特性,如文章创建、编辑、预览、发布和归档功能。这通常涉及创建一个模型来存储文章数据,使用控制器处理HTTP请求,以及创建视图来展示内容。文章可能具有元数据,如标题、...

    ror中文资料

    Ruby是RoR的基础,理解其语法和特性对于掌握RoR框架极其关键。 **Ruby语言基础** 1. **变量和数据类型**:Ruby支持多种数据类型,包括整型(Integer)、浮点型(Float)、字符串(String)、布尔型(Boolean)、...

    RoR性能优化经验谈

    RoR(Ruby on Rails)是一种流行的开源Web开发框架,以其高效和简洁的代码著称。然而,随着网站规模的增长,性能优化成为必不可少的环节。在本文中,我们将探讨一些RoR性能优化的关键方面,主要基于JavaEye网站在...

    intimate_web:一个 ROR 应用程序

    "intimate_web" 是一个基于 Ruby on Rails (ROR) 框架开发的应用程序。Ruby on Rails 是一种流行的开源 Web 开发框架,它遵循 Model-View-Controller (MVC) 设计模式,用于构建数据库驱动的 web 应用程序。这个应用...

    ruby_on_rails_learning:我的RoR笔记本

    RoR支持AJAX(Asynchronous JavaScript and XML),允许在不刷新整个页面的情况下更新部分内容,提升网页响应速度。 在Ruby on Rails中,路由(Routing)是连接URL到控制器动作的重要机制。通过配置`config/routes....

    ror实例

    Ruby on Rails(简称RoR或Rails)是一种基于Ruby语言的开源Web应用框架,它遵循Model-View-Controller(MVC)架构模式,旨在提高开发效率并提供简洁、优雅的代码结构。"ror实例"可能指的是在学习或实践中,通过创建...

    ROR安装必备所有架包

    这个压缩包包含了一系列用于ROR框架的基础组件,但不包括Ruby本身。让我们深入了解一下这些包的作用和重要性。 首先,`actionpack`是Rails的核心组件之一,它提供了控制器、路由和视图等功能。`actionpack-1.13.5....

    ror

    NULL 博文链接:https://xuxiangpan888.iteye.com/blog/266696

    神经网络ror resenet模型

    **神经网络Ror ResNet模型详解** 在深度学习领域,ResNet(残差网络)模型是具有里程碑意义的创新,由He et al.在2015年提出。该模型解决了深度神经网络训练中的梯度消失问题,允许构建非常深的网络结构。而“Ror”...

    RoR 培训课程PPT

    ### RoR培训课程PPT知识点概述 #### 一、课程概览与背景介绍 - **课程性质**:本课程为为期五天的Ruby on Rails(简称RoR)入门级培训,适合初学者快速掌握RoR的基本概念和技术要点。 - **讲师信息**:由Peter ...

    初探ROR

    **初探ROR** Ruby on Rails(简称ROR)是一个基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在促进开发过程的简洁性和效率。Ruby on Rails的核心理念是“Don't Repeat ...

    rwbox:Ruby 和 ROR 开发人员的 Vagrant 图像

    RWBox Ruby 和 ROR 开发人员的 Vagrant 图像。 Vagrant 使用或动态构建可配置、轻量级和可移植的虚拟机。 RWBox 包含: 带有已编译 Ruby 2.0.0-p645、2.1.6、2.2.2 的 RVM MySQL、PostgreSQL、Redis 和 Memcached ...

    learnRoR:艰难地学习RoR

    【标题】"learnRoR:艰难地学习RoR"揭示了这个项目是关于学习Ruby on Rails(RoR)框架的个人历程。RoR,或Rails,是由David Heinemeier Hansson开发的一个开源Web应用程序框架,它完全用Ruby编程语言编写。Ruby是一...

    sample_app:我在 RoR 上的第一个示例应用程序

    在Ruby on Rails(RoR)框架中创建一个名为"sample_app"的第一个示例应用程序,是初学者踏入Web开发领域的常见步骤。RoR是一款强大的、基于MVC(模型-视图-控制器)架构的开源Web应用框架,它以Ruby语言为基础,强调...

Global site tag (gtag.js) - Google Analytics