我正在寻找实现DTO层和DAO层的J2EE Web服务的示例。我对所涉及的概念很熟悉,但我正在努力以有意义的方式将项目整合在一起。目前我有:
EJB执行从DAO到DTO的映射,并将DTO返回到Web服务类。
我一直在考虑将映射器类移动到Web服务项目中,因为这似乎是一种很好的做法 - 它释放了EJB来处理业务对象而不是DTO。
类的示例如下:
Web服务项目中的 PersonResource
类:
@Path("/person")
@Stateless
public class PersonResource {
@EJB
private IPersonManagerRemote ejb;
@GET
@Produces("application/json")
@Path("/{id}")
public PersonDTO get(@PathParam("id") Long id) {
return ejb.get(id);
}
远程项目中的 IPersonManagerRemote
接口:
@Remote
public interface IPersonManagerRemote {
public PersonDTO get(long id);
}
EJB项目中的 PersonManager
实现:
@LocalBean
@Stateless
public class PersonManager implements IPersonManagerRemote {
@Inject
private IPersonDAO dao;
@Override
public PersonDTO get(Long id) {
return PersonMapper.getInstance().map(dao.get(id));
}
EJB项目中的 PersonMapper
单例类:
public class PersonMapper {
// Singleton creation code...
public PersonDTO map(Person dao) {
//Mapping code here to copy fields
}
}
我排除了IPersonDao
界面及其实施PersonDao
,因为它们非常标准。
我试图将对mapper的调用移动到web资源,但是我需要在web项目和远程项目中引用EJB项目(对于DAO对象),这会导致循环引用,因为EJB项目引用Remote项目。
我的EJB类应该返回DTO或DAO对象吗?如果DAO那么映射代码应该在哪里?
答案 0 :(得分:1)
您不希望移动dao并将代码映射到webapp。关注点分离。 webapp应该只需要知道服务api,其中dto是其中的一部分。