论坛首页 Java企业应用论坛

在Java 实现真正的富领域Model层

浏览 20895 次
精华帖 (10) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-08-13  
fork了
0 请登录后投票
   发表时间:2012-08-25   最后修改:2012-08-25
有几个问题:
1.这个框架怎么在IDEA下使用?
2.目录结构必须按默认的来吗?如果按原来src和WebRoot这种方式可以吗?
3.在controller执行完毕转入页面,如果我用velocity,我可以指定velocity的页面路径吗?
4.有qq裙吗?

另外,wiki上有错字

如果传入的是对象,会自动转化为json格式
0 请登录后投票
   发表时间:2012-08-25   最后修改:2012-08-25
rjbj 写道
有几个问题
........略


1.这个框架怎么在IDEA下使用?

如果是IDEA是最简单了。create project from existing sources 即可。
不需要做任何额外的设置

2.目录结构必须按默认的来吗?如果按原来src和WebRoot这种方式可以吗?

推荐默认。至于WebRoot的方式答案是不可以。
项目http server 内置的是jetty。使用一个main(net.csdn.bootstrap.Application类中)方法启动。所以更严格的来说,ServiceFramework是一个普通的java 程序。运行main方法,然后就什么都不用管了。
你可能担心jetty的性能,我可以说的是不会比tomcat差。ServiceFramework没有使用servlet 而是使用了jetty更底层的
abstract handler,非常轻量。jetty 完全只是一个http parser.

3.在controller执行完毕转入页面,如果我用velocity,我可以指定velocity的页面路径吗?
使用velocity和freemarker没有问题。只是整合代码需要自己写。
4.有qq裙吗?
目前没有群。我想等再完善点再做进一步推广。如果有bug或者讨论,可以在github上讨论。
另外,wiki上有错字

如果传入的是对象,会自动转化为json格式

呵呵 错别字应该还有不少。

另外,下一步就是写个脚本自动打成war包,方便用户部署到tomcat或者其他java容器中,虽然我很不情愿这么做。应为我觉得目前已经非常好,整个项目不依赖任何外层容器,部署也简单到极致,放到服务器上./run.sh 一下就行。
0 请登录后投票
   发表时间:2012-08-27  
这个框架有点类似于 Grails 的GORM。
0 请登录后投票
   发表时间:2012-08-28  
没见有多么的高明。。。。还是得看表设计吧~
0 请登录后投票
   发表时间:2012-08-28  
q280499693 写道
没见有多么的高明。。。。还是得看表设计吧~


传统的Java ORM框架真的是复杂繁琐。以Hibernate为例

1. 不熟悉的人大部分特性不敢用,只是用来操作简单的POJO。其他特性不敢碰
2. 也有一开始就上去啥特性都用,结果各种性能陷阱,死的很难看
3. 你当然想成为熟悉Hibernate的人咯,于是你可能要去看一本书,而不是一个简单的tutorial.
4. 即使你不惧怕Hibernate各种性能陷阱,你依然呗Hibernate 各种繁琐代码所困扰。Session的打开关闭,这和原始社会的时候要打开数据库和关闭数据库有区别吗?
5. 所以,你又会对Hibernate进行一次封装,或者采用Spring的胶水。但是,依然云里雾里。
6. 因为ORM的问题,导致 Java 衍生出了DAO层('贫血模型')。大部分情况下,Service层只是DAO层的简单调用。这增加了大量代码和层次,无形增加了项目的复杂度。而且很难把握好DAO和Service层次的封装调用。除非你是个老手,否则写的代码可能就会比较凌乱。

1. hql 语法
hql避免不了sql最本质的问题。你可能需要拼接sql语句,不同的程序员以不同的方式将sql片段散落到各个角落。同时以不同的方式给sql传参数。而hibernate对该问题的解决是提出新的一套API: Criteria.这绝对是件愚蠢的方式。即增加学习成本,又给代码造成混乱,不同的程序员偏好不一样,有的喜好hql,有的喜好criteria.而且程序员还要去思考criteria和hql分别应该试用什么场景。需要根据条件拼凑hql的话使用Criteria?其他场景都使用hql?

2. 调用语法,每次都需要打开session,然后使用完还需要关闭session.callback里面不能直观的使用数据库操作(解决方案使用了拙略的open temp session的方式)

3. hibernate的校验框架也是没有任何设计可言。就是简单的叠加Annotation到Model层的属性上。加上一些关联属性和column属性,这个时候,属性就如同就好像一个戴着19世纪英国绅士带的那种高帽,当然,现在的魔术师也常带。

ServiceFramework提供了一套较为完整的解决方案:

1. 简化hql语法,使得hql更加像sql.譬如hql通常需要别名,为什么我可以用id=1非要写成blog.id=1呢?
2. 提供一个统一的查询接口,使得sql语句规范化,同时具有原生hql和Criteria的有点,而且基本不需要学习成本。

就ORM的配置而言,你可以看看hibernate的一些示例,代码绝对不是一个级别的。

总而言之,ServiceFramework 有一个强大的真正的富领域模型,便利的,规范化Query Interface,优秀的声明式模型校验语法。

整个ORM设计过程基本原则是:

1. 尽量提供一个'最佳实践'给用户,而不是让用户做大量的选择题
2. 用一个方案覆盖80%的问题(简化后的hql)
3. 用另一个可选方案覆盖另外20%的问题(就是使用原生的Sql)
0 请登录后投票
论坛首页 Java企业应用版

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