锁定老帖子 主题:在Java 实现真正的富领域Model层
精华帖 (10) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-08-13
fork了
|
|
返回顶楼 | |
发表时间:2012-08-25
最后修改:2012-08-25
有几个问题:
1.这个框架怎么在IDEA下使用? 2.目录结构必须按默认的来吗?如果按原来src和WebRoot这种方式可以吗? 3.在controller执行完毕转入页面,如果我用velocity,我可以指定velocity的页面路径吗? 4.有qq裙吗? 另外,wiki上有错字 如果传入的是对象,会自动呗转化为json格式 |
|
返回顶楼 | |
发表时间: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 一下就行。 |
|
返回顶楼 | |
发表时间:2012-08-27
这个框架有点类似于 Grails 的GORM。
|
|
返回顶楼 | |
发表时间:2012-08-28
没见有多么的高明。。。。还是得看表设计吧~
|
|
返回顶楼 | |
发表时间: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) |
|
返回顶楼 | |