论坛首页 Java企业应用论坛

实现Java语言的领域模型,比较看好Spring Roo

浏览 8472 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (6)
作者 正文
   发表时间:2010-03-25  

首先说一下这篇文章的目的是想就最近新发布的Spring Roo再谈一下Java语言的领域模型开发,只是发表我对Roo尝试的第一感觉,欢迎大家讨论。

昨天实践了一下Spring Roo,给我的感受不亚于两年前第一次实践Rails的快感。但在网上及论坛上搜了一下对Spring Roo的分析,发现文章不是很多(可能Roo发布时间还不很长)、评价也不是很高,有说Roo只不过是剥离了Groovy的Grails。但就我个人感觉,首先Roo是基于Java语言的(正如Rails基于Ruby和Grails基于Groovy语言一样),但Java特性远不如动态语言Ruby和Groovy灵活。缘于Java是目前企业应用开发的第一语言,多数有着广泛Java基础的公司弃Java选Ruby或Groovy是比较困难的,Hibernate+Spring则在近些年成为企业开发的主流。但是对于基于Spring框架的贫血模型经常被大家所诟病,而就我个人的经验,最近一个基于Spring+Hibernate的项目也让我开始厌恶这种贫血的Service+Dao开发模式。

看了一年前关于Java充血模型的困难,主要难点就是Java语言无法做到像Ruby的mixin和C#的partial等语言特性,另外当时Spring的AspectJ织入还不够强大。但是如今Roo发布以后却让我感觉SpringSource在这方面已经做得非常好了,首先能像rails和grails的代码生成(Tab提示则更为智能)、基于Annotation和AspectJ编译时的织入,很好的将ActiveRecord模式的引入到POJO中(但属于不同编译单元,POJO除了多几个Annotation就只剩field了,连setter/getter也可以通过Annotation在编译时织入),这样很容易使得Entity更加关心属于自身的业务逻辑,因此Service层不再是必要的(需要事物/安全边界或其它目的时选用),DAO层则根本不再建议使用了。

顺便比较一下去年了解的Seams,Seams也是Gavin King大牛的另一大作,但是因其前端标配JSF等因素使得它并没想Hibernate那样流行。虽说Seams在基于JEE标准上使得Java的领域模型做的非常好了,但是它仍旧延续EJB的开发模式,让业务逻辑封装在Session Bean中,而数据则仍然是Entity的主要责任,所以说感觉并不是一个真实的充血模型。

回到Spring Roo,虽然Roo功能目前还不很强大,比如还不能根据配置的数据库链接直接从数据库表来生成Entity,以及前端表示层使用JSP和绑定Spring MVC(基于Spring 3.0支持REST)等,但是这些改进目标已经纳入其roadmap中,毕竟Roo才发布两三个版本,因此个人还是比较看好它的:)

 

   发表时间:2010-03-25  
和grails是不是有点重合了,难道spring收购grails之后就不管了?
0 请登录后投票
   发表时间:2010-03-25  
引入 AspectJ 应该还是会带来一些问题,至少 IDE 是一个方面。感觉只是把一些不太重要的代码从 Java 放进了 AspectJ 里面。
0 请登录后投票
   发表时间:2010-03-26  
SSailYang 写道
引入 AspectJ 应该还是会带来一些问题,至少 IDE 是一个方面。感觉只是把一些不太重要的代码从 Java 放进了 AspectJ 里面。

是的,如果在IDE中引入AspectJ而没有相应的插件,如Eclipse的AJDT的话,编译起来肯定会报错,比如说织入的getter/setter等方法没有找到。但是试用了一下SpringSource Tool Suite(包含了原来的Spring IDE和AJDT及m2eclipse),感觉还是非常智能的。比如你删除了一个field,IDE会自动删除织入的setter/getter。

引入AspectJ虽然有一些不方便,但是编译时织入比运行时织入性能无疑要好很多。这与同样是静态语言的C#的partial特性实际上是相似的,只是C# 2.0以后的版本提供了这种特性,而Java语言上没有提供,只有通过AspectJ这样的工具增强了(而AspectJ功能更强,除了提供方法引入还提供拦截/切入等AOP特性)
0 请登录后投票
   发表时间:2010-03-26  
seam的@In很强大,可以领域模型设计
0 请登录后投票
   发表时间:2010-03-26  
ThinkingInAll 写道
seam的@In很强大,可以领域模型设计

@In跟领域模型设计没什么关系,它只是提供了DI或者IoC的一种方式,其实和JSR-250中的@Resource及Spring的@Autowire是类似的。Seams的与众不同是提供bijection即所谓的双向注入(提供@In和@Out),既可以从容器上下文中注入资源,也可以将被管理组件中的计算结果Out给特定的上下文。
0 请登录后投票
   发表时间:2010-05-20   最后修改:2010-05-20

在 1. 0 发布之前,了解了一下。。。参见我的博文

 

· Spring Roo 再一次亲密接触 2009-05-28
· Spring Roo 第一次亲密接触

 

 

现在 1.1 又加入了不少新特性,特别是支持 GAE和GWT,现在准备写一些补充的文章。

0 请登录后投票
   发表时间:2010-05-21  
hantsy 写道

在 1. 0 发布之前,了解了一下。。。参见我的博文

 

· Spring Roo 再一次亲密接触 2009-05-28
· Spring Roo 第一次亲密接触

 

 

现在 1.1 又加入了不少新特性,特别是支持 GAE和GWT,现在准备写一些补充的文章。

呵呵,今天早上注意到了,不过是1.1.0.M1,等待1.1.0.RELEASE,好像还得等上数月。。。

0 请登录后投票
   发表时间:2011-01-05  
用Roo快速构建一个项目框架非常不错...
http://s3.springsource.com/MRKT/roo/2010-01-Five_Minutes_Roo.mov
这个视频吸引了我
0 请登录后投票
   发表时间:2011-01-05  
没觉得roo有什么特别的~
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics