BIG BOSS们,初心者遇到分层问题了~~~

偶还在j2ee学习阶段~~
关于分层,又迷茫了

1.使用Hibernate框架,老师说hql语句也属于业务部分,应该放在业务层(BO和service,即模型和模型的服务方法)的service那一部分,但这样我总觉得很别扭,之前做了一个项目练习,sql语句是丢到DAO层的.
我感觉他这个说话又有道理,确实hql语句包含了业务,但是扔在service层又觉得别扭得很.请高手们指点咯~~

2.我们项目建模,都是从BO开始的,这样遵循OO思想.在使用了Hibernate以后,以前的PO就不是和数据库表完全对应的了,而是和BO更接近,然后通过配置文件映射,完成持久化的.那现在PO模型应该如何创建呢?数据库的表又该如何创建呢?

>我感觉他这个说话又有道理,确实hql语句包含了业务,但是扔在service层又觉得别扭得很.请高手们指点咯~~

首先采取OO分析设计和OO语言,就不要使用hql等类SQL来封装业务,使用Domain Model表达业务,对于一些查询hql,可以作为规则,以策略模式设计在业务Domain层,但不是Service层,业务层不是指service层,在service层不可以实现业务,但可以调用Domain Model来运行业务,这两点是有区分,如果不清楚,学习Evans DDD

>那现在PO模型应该如何创建呢?数据库的表又该如何创建呢?
PO如何创建参考Evans DDD。数据库的表的创建是服从对象结构,你对象出来后,数据库的表作为结果导出就自然有了,可以使用hibernate等自动创建表功能。

你产生这些疑问,关键是你的知识结构里缺少DDD领域建模这一课,所以OO思想很重要,必须先于Hibernate掌握。否则就会不知如何使用Hibernate,甚至误用。

Service不是业务层。
它分为三类:
1.基础服务层
2.应用服务层
3.领域服务层
其中领域服务层是很重要的。它有三个特征:
a.无状态
b.其中的接口不是领域模型中实体或值对象的必备的方法
c.参数和返回依靠领域中其它对象,实现也要依靠其它对象

确实,领域建模这块知识很匮乏,几乎没怎么系统的看过书和资料,匮乏的程度是domain,bo,service之间的关系不是十分的清晰

从楼上两位的回答中,依稀觉得不是在用失血模型,而是充血样,不知对不对?
当然,能阐述下当前实际项目中,比较规范的公司对于业务层是怎么分的,就更好了.
先谢谢了 =.=!