业务层Service的粒度问题请教

在业务层的Service中,比如我有两个Entity,Entity1和Entity2,那么我有两个对应的Service,Entity1ervice和Entity2Service.如果有些业务过程要涉及到两个或者多个Entity,那这些业务过程写在哪里?再建个Entity1Entity2Service?

这需要结合Evans DDD来进行业务分析,找出核心之领域模型,如果涉及多个实体,找出这些实体中的核心实体,放在它的service中。

还有个问题请教:事务的边界应该在哪里声明?
我也搜索了一下,发现这个帖子和我的问题比较像:http://www.jdon.com/jivejdon/thread/17055.html.在他那里讨论的是Dao,而我的困惑是在Service中.那个帖子在Dao的各个方法中,需要传入Connection,保证事务的灵活;那么是不是在Service中是不是也需要传入Session保证事务的灵活,因为可能有更大的事务,比如:
Transaction tx = session.beginTransaction();
service1.method1(session);
service2.method2(session);
tx.commit();
但是在Service的每个方法中传入Session这个东西感觉不太对

还有个问题,这个边界应该声明在一个粒度更粗的Service里,还是申明在别的地方,比如面向Web层的facade里?
[该贴被power1128于2007-12-11 19:22修改过]

>Transaction tx = session.beginTransaction();
你用的是Hibernate的事务,Hibernate属于持久层,不能跳出来跑到业务层的。

业务层有自己的事务机制 JTA。如下:

TransactionManager tx = jtaTransactionUtil.getTransactionManager();
try {
tx.begin();
Long mIDInt = messageRepository.getNextId(Constants.MESSAGE);
forumMessage.setMessageId(mIDInt);
beforeCreate(forumMessage); super.createTopicMessage(em);
tx.commit();
} catch (Exception e) {
logger.error(e);
em.setErrors(Constants.ERRORS);
jtaTransactionUtil.rollback(tx); }
[该贴被banq于2007-12-12 14:37修改过]

我觉得service和entity不是一一对应的,只有entity需要合其他entity合作而之间又没有直接关联时才有service的概念

多谢banq,我先研究下JTA.以前没接触过,如果有问题再来请教.

killer兄说的我不太肯定,但是我也发现基本需要service的地方,都不会是单独的一个Entity参与其中.是否每个Entity都对应一个Service并不重要,我觉得只要抓住业务的核心就没有问题,具体需要多少service由业务系统决定.

多谢banq,我先研究下JTA.以前没接触过,如果有问题再来请教.

killer兄说的我不太肯定,但是我也发现基本需要service的地方,都不会是单独的一个Entity参与其中.是否每个Entity都对应一个Service并不重要,我觉得只要抓住业务的核心就没有问题,具体需要多少service由业务系统决定.

>>我觉得只要抓住业务的核心就没有问题,具体需要多少service由业务系统决定.

同意

同意