SQnote
永远有多远……
SQnote - java,web优化,python,(www.sqnote.cn)

  DAO是最为重要的J2EE模式之一,也是GoF Strategy 模式的一种特殊形式。DAO模式的用途是将“与持久化相关的代码”从业务逻辑中分离出来。

  DAO设计中的问题
 
  从便于复用的角度考虑,我们倾向于创建非常细粒度的方法;
  然而从提高数据访问操作效率的角度考虑,DAO接口似乎又应该设计粗粒度(coarse-grained)的方法。
 
  --我们推荐的做法是:业务对象需要什么粒度的数据访问,就在DAO接口中提供什么粒度的方法;只有在真正需要时才设计粒度更细的方法。

实践点:
  一个基于web的应用程序按照逻辑分为三层:web层,业务层,数据访问层。
  假设有OrderManager这样一个业务对象,它需要存储一个新建定单,并对存货数据库做相应的更新。当然这样一个业务对象通常会包含相当复杂的业务逻辑。:请看简单示例:

public class OrderManager
{
    private OrderDao orderDao;
    public void setOrderDao(OrderDao orderDao)
    {
        this.orderDao = orderDao;
    }
    public void placeOrder(Order order)
    {
        //set business flags of order
        //
        orderDao.storeOrder(order);
        orderDao.updateInventory(order);
    }
}

public interface OrderDao
{
    void storeOrder(Order order);
    void updateInventory(Order order);
}


具体实现类可以用JDBC,Hibernate还是别的什么持久化技术。

public class JdbcOrderDao implements OrderDao{
    private DataSource dataSource;
    public void setDataSource(DataSource dataSource){
        this.dataSource = dataSource
    }
    public void storeOrder(Order order)
{
//具体实现
}
    public void updateInventory(Order order)
{
//具体实现
}


}




posted on 2005-12-12 15:58  SQnote·www.SQnote.cn  阅读(256)  评论(0)    收藏  举报