锁定老帖子 主题:在Java 实现真正的富领域Model层
精华帖 (10) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-08-08
最后修改:2012-08-08
tianzizhi 写道 没看出来哪地方是富领域model层了,说的某一个的orm框架吧或对象sql工具,跟领域扯不上边,
领域是基于具体业务的,不是简单的CRUD放在model就完了 能不能先谈下你对富领域模型的看法? 另外在我看来。目前的Model是能够对自己进行操作的。也就是不仅仅是一个Pojo了。它承担了原本所有dao和部分service的功能。 除了 简单的CRUD model能够自我操作外, 还有丰富的查询接口,比如 List<Tag> tags = Tag.where("name='java'").join("tag_groups").fetch(); 另外的,如果有一些常见需求,比如我之前举得例子, @Entity public class Tag extends Model { public static JPQL active(){ return where("status=1"); } } 之后就可以直接调用这个方法。 List<Tag> tags =Tag.active().where("id>10").join("tag_groups").offset(0).limit(15).fetch(); 也就是说你可以直接在model层内部定义比较复杂的查询,然后通过一个简单的方法暴露出来。这些都是由model层自己负责的,而不是委托给dao或者service. 同理,对于各种关联关系,都是model自己去维护的。 比如Tag 和 TagGroup多对对关系的建立: 传统的方式是: tagGroup.getTags().add(tag); tag.getTagGroups.add(tagGroup); dao.save(tag); 在这个模型中,则只要: tagGroup.associate("tags").add(tag); //或者 tag.associate("tag_groups").add(tag_group); 一句话就完成了。 而这些都是Model自己处理的。不需要借助dao和service. 同理,模型层有自己的校验器和回调机制。这些都是放在model层。 |
|
返回顶楼 | |
发表时间:2012-08-08
ActiveJDBC ???
|
|
返回顶楼 | |
发表时间:2012-08-08
最后修改:2012-08-08
href 写道 ActiveJDBC ???
更准确的说,应该是 JActiveRecord 哈哈 |
|
返回顶楼 | |
发表时间:2012-08-08
java 能实现吗?
|
|
返回顶楼 | |
发表时间:2012-08-08
最后修改:2012-08-08
yxb1990 写道 java 能实现吗?
当然可以实现。上面的文档就来自一个真实的框架的wiki文档。只是不知道大家对这种模型的接受程度。 比如假设在模型类不定义任何属性(当然你可以定义)。那么就需要一定的语法格式才能取出属性。比如你希望取出tag的name. 通常是: tag.getName(); 但是如果你没有定义这个属性而是靠框架给你自动生成,那么就需要 tag.attr("name",String.class); 来获取。 一般而言,这不会造成问题。你很少会有取出属性这种需求。比如form表单填充,模型类已经有相应的方式给你。 Tag tag = Tag.create(params()); 其中 params()会返回一个map对象。任何模型类都有从map对象构建自身的一个功能,通过create() . 所以基本需要你直接设置model或者取出model属性的状况比较少。尤其是一些移动应用后端。 |
|
返回顶楼 | |
发表时间:2012-08-08
allwefantasy 写道 yxb1990 写道 java 能实现吗?
当然可以实现。上面的文档就来自一个真实的框架的wiki文档。只是不知道大家对这种模型的接受程度。 比如假设在模型类不定义任何属性(当然你可以定义)。那么就需要一定的语法格式才能取出属性。比如你希望取出tag的name. 通常是: tag.getName(); 但是如果你没有定义这个属性而是靠框架给你自动生成,那么就需要 tag.attr("name",String.class); 来获取。 一般而言,这不会造成问题。你很少会有取出属性这种需求。比如form表单填充,模型类已经有相应的方式给你。 Tag tag = Tag.create(params()); 其中 params()会返回一个map对象。任何模型类都有从map对象构建自身的一个功能,通过create() . 所以基本需要你直接设置model或者取出model属性的状况比较少。尤其是一些移动应用后端。 什么项目? 地址? |
|
返回顶楼 | |
发表时间:2012-08-08
melin 写道 allwefantasy 写道 yxb1990 写道 java 能实现吗?
当然可以实现。上面的文档就来自一个真实的框架的wiki文档。只是不知道大家对这种模型的接受程度。 比如假设在模型类不定义任何属性(当然你可以定义)。那么就需要一定的语法格式才能取出属性。比如你希望取出tag的name. 通常是: tag.getName(); 但是如果你没有定义这个属性而是靠框架给你自动生成,那么就需要 tag.attr("name",String.class); 来获取。 一般而言,这不会造成问题。你很少会有取出属性这种需求。比如form表单填充,模型类已经有相应的方式给你。 Tag tag = Tag.create(params()); 其中 params()会返回一个map对象。任何模型类都有从map对象构建自身的一个功能,通过create() . 所以基本需要你直接设置model或者取出model属性的状况比较少。尤其是一些移动应用后端。 什么项目? 地址? 能否发表下你对这种ORM模型的看法? |
|
返回顶楼 | |
发表时间:2012-08-08
有点像DTO
如果我的业务逻辑比较发杂,eg: 同时操作多个表呢?怎么保证事务! |
|
返回顶楼 | |
发表时间:2012-08-08
elan1986 写道 有点像DTO
如果我的业务逻辑比较发杂,eg: 同时操作多个表呢?怎么保证事务! 事务是controller层次的。通常一个Action对应一个事务。这就意味着,多表插入更新删除都是到最后才一次提交给数据库的。 同理 如果你需要嵌套事物,就是你希望即使整个Action失败,但是某些操作仍然需要提交,那么可以使用 类似: Tag.transaction(new Transaction(){ public void callback(){ tag.save(); tagGroup.save(); } }) 上面代码块是单独的一个事务 其实ORM都有级联操作,默认会级联保存。所以他们应该在一个事务里。 |
|
返回顶楼 | |
发表时间:2012-08-08
想法不错。。。在 基类 Model 中设计了一个小型 DSL。。
|
|
返回顶楼 | |