业务服务与业务对象交互并提供更高级的业务逻辑,需要首先定义一个正式的业务接口,它是直接与终端用户交互的服务接口。在JCatalog中,通过在 Spring Framework帮助下的POJO实现业务逻辑层,其中共有两个业务服务:CatalogService包含Catalog管理相关的业务逻辑, UserService中包含User管理逻辑。
Spring是基于IoC概念的框架,在范例应用中用到的Spring特性包括:
Bean management with application contexts:Spring可以有效地组织我们的中间层对象,它能够消除singleton的proliferation,并易于实现良好的面向对象编程方法,即“编程到接口”。 Declarative Transaction management: Spring利用AOP实现事务管理,而无需借助于EJB容器,利用这种方法,事务管理可以用于任何POJO中。Spring的事务管理不局限于JTA,而是可以采用不同的事务策略,在范例应用中,我们将使用declarative transaction management with Hibernate transaction。 Data-access exception hierarchy:Spring提供了非常好的异常来代替SQLException,为利用Spring的异常,必须在Spring的配置文件中定义以下异常转换:
Data Access Ojbect(DAO) JCatalog中采用了Dao模式,该模式抽象和封装了所有对数据源的访问,该应用中包括两个DAO接口:CatalogDao和UserDao,它们相应的实现HibernateCatalogDaoImpl和HibernateUserDAoImpl包含了Hibernate特定的逻辑来实现数据的管理和持久化。
return NavigationResults.FAILURE; } String msg = "Product with id of " + this.id + " was created successfully."; this.logger.debug(msg); FacesUtils.addInfoMessage(msg);
业务对象:由于采用Hibernate提供持久化,因此Product和Category两个业务对象需要为它们的所有field提供getter和setter。 业务服务:CatalogService接口中定义了所有的与Catalog management相关的服务: public interface CatalogService { public Product saveProduct(Product product) throws CatalogException; public void updateProduct(Product product) throws CatalogException; public void deleteProduct(Product product) throws CatalogException; public Product getProduct(String productId) throws CatalogException; public Category getCategory(String categoryId) throws CatalogException; public List getAllProducts() throws CatalogException; public List getAllCategories() throws CatalogException; }