论坛首页 Microsoft .Net版 工作

扩展方法与充血模型

浏览 1766 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-04-08
借用Robbin的代码
//普通的PODO
public class Item implements Serializable {
  .....

}

//LINQ or NHibernate Dao
public class ItemDaoHibernateImpl implements ItemDao extends HibernateDaoSupport {   
    public Item getItemById(Long id) {   
        return (Item) getHibernateTemplate().load(Item.class, id);   
    }   
    public Collection findAll() {   
        return (List) getHibernateTemplate().find("from Item");   
    }   
    public void updateItem(Item item) {   
        getHibernateTemplate().update(item);   
    }   
}  

//Ext the PODO
public static class ItemExt
{
   private static dao=...; //seter注入

    public Bid placeBid(User bidder, MonetaryAmount bidAmount,Bid currentMaxBid, Bid currentMinBid)
  {
    .....
   } 
   
   public static Item GetItem(this Item it, int id)
   {
        dao.getItemById(id);
   }
   
    public static List<Item> Findall(this Item it)
    {   
        dao...
    }

    public static void UpdateItem(this Item it)
    {
        dao.updateItem(it);
    }
  
}






好处:

1. 机动灵活, 必要方法在需要时才加与扩展。例如在页面,可能只需要PODO的参与。
2. DAO和PODO联系松散。
3. 取消ItemManager。

当然模型可能还有些问题,这只是我一时拍脑袋想出来的,大家砸个砖头吧
   
时间:2008-04-08
诗出何典?(传送门)
   
0 请登录后投票
时间:2008-04-08
to:ray_linn

你在海阔天空呆惯了,正儿八经的技术讨论,也贴到这里来?
   
0 请登录后投票
时间:2008-04-08
http://www.javaeye.com/topic/11712 此典

使用Item


Item it=new Item();
it=it.GetItemById(100);
it.PlaceBid(...)
it.UpdateItem();
   
0 请登录后投票
时间:2008-04-08
庄表伟 写道
to:ray_linn

你在海阔天空呆惯了,正儿八经的技术讨论,也贴到这里来?


.net版米人啊。
   
0 请登录后投票
时间:2008-04-08
晕,看不出有啥好处啊!
   
0 请登录后投票
时间:2008-04-08
偶还有变形之一。

1. CURD+F与Domain object在一起。//LINQ似乎比较容易实现
2. 业务方法采用扩展。

it.PlaceBid(...) //才方法先调用Find(id),再调用Update().
   
0 请登录后投票
时间:2008-04-08
ray_linn 写道
偶还有变形之一。

1. CURD+F与Domain object在一起。//LINQ似乎比较容易实现
2. 业务方法采用扩展。

it.PlaceBid(...) //才方法先调用Find(id),再调用Update().


.net 3好做啊!
patial class和extension method都容易达到!
java下想做只能是aspectj了!
   
0 请登录后投票
时间:2008-04-08
yimlin 写道
ray_linn 写道
偶还有变形之一。

1. CURD+F与Domain object在一起。//LINQ似乎比较容易实现
2. 业务方法采用扩展。

it.PlaceBid(...) //才方法先调用Find(id),再调用Update().


.net 3好做啊!
patial class和extension method都容易达到!
java下想做只能是aspectj了!


。。。。当然知道很容易实现了。。。我要解决的是

robbin 写道

虑到典型的web应用中,简单的CRUD操作占据了业务逻辑的绝大多数比例,因此第一类变种的优点是:避免了业务逻辑不得不大量封装DAO接口的问题,简化了软件架构设计,节省了大量的业务层代码量。
这种方案的缺点是:把DAO接口方法和业务逻辑方法混合到了一起,显得职责不够单一化,软件分层结构不够清晰;此外这种方案仍然不得不对隐式依赖持久化的domain logic提供封装方法,未能做到彻底的简化。
   
0 请登录后投票
时间:2008-04-08
老兄 怎么你还在吃剩饭?
   
0 请登录后投票
论坛首页 Microsoft .Net版 工作

跳转论坛:
JavaEye推荐