java web应用程序布局,请解释一些设计原则/模式

时间:2009-12-28 18:26:18

标签: java hibernate oop spring

我正在看这个使用hibernate,jsp和spring框架的java web应用程序。 (据我所知!)

文件布局如下:

classes/com/example/project1

在project1中

/dao
    _entity_Dao.java
/dao/hibernate/
    _entity_DaoHibernate.java
/factory
     DaoFactory.java
      DaoFactoryImpl.java
/managers
      _entity_Manager.java
/managers/impl
      _entity_ManagerImpl.java
/model
      _entity_.java
/service
      _xxxx_Service.java
/service/impl/
      _xxxx_ServiceImpl.java

你们有没有在某处读过这种布局?它被认为是最佳实践吗?

工厂与经理和服务有什么区别? (高级别)

2 个答案:

答案 0 :(得分:1)

对于使用Spring构建的应用程序的典型布局,我将查看随附的示例Web应用程序(意思是Spring)。

使用像DaoFactory这样的东西绝对不是最佳实践,Daos应该注入。一般情况下,除了一些不寻常的情况,你不应该需要带有Spring的工厂。注入是在Web应用程序启动时完成的,spring读取配置信息并构造所有对象并根据配置xml和/或注释将其插入(这假设您的对象具有单一范围,这对于像无状态的事情一样daos和服务,作为原型的东西获得在应用程序要求时创建的新副本。)

在Spring应用程序中,服务类似于无状态会话Bean,它是一个包含用例的应用程序逻辑的事务层。因此,如果您的用户执行的操作会导致多个不同的表更新,您可以将daos注入该服务,让该服务上的方法执行daos上的更新,并配置Spring以将该服务包装在使该方法具有事务性的代理。

我见过经理用作我所说的服务的另一个名字。在这里,我不知道他们在做什么。

答案 1 :(得分:0)

我不喜欢将接口和impl组合在一个项目中的想法。仅仅因为你想要使用接口并不意味着你想要使用impl并且它是繁琐的传递依赖。主要原因是因为将有多个impl(假设,即JPA / JDBC / Hibernate,或Axis2 / CXF等)。接口不应该绑定到实现,否则丢失点。这也允许简单的依赖注入,因为impls只是驻留在类路径上,然后像Proxy或Spring(例如)这样的东西可以注入实现。

很有可能,您只需要:

Interface Project
   dao
      EntityDao    
   types
      Entity

HibernateImpl Project
   dao
      EntityHibernateDao
   src/main/resources/
      EntityMapping.cfg.xml