欢迎来到天天文库
浏览记录
ID:11532891
大小:60.00 KB
页数:16页
时间:2018-07-12
《失血模型,贫血模型,充血模型,胀血模型》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、失血模型失血模型简单来说,就是domainobject只有属性的getter/setter方法的纯数据类,所有的业务逻辑完全由businessobject来完成(又称TransactionScript),这种模型下的domainobject被MartinFowler称之为“贫血的domainobject”。下面用举一个具体的代码来说明,代码来自Hibernate的caveatemptor,但经过我的改写:一个实体类叫做Item,指的是一个拍卖项目一个DAO接口类叫做ItemDao一个DAO接口实现
2、类叫做ItemDaoHibernateImpl一个业务逻辑类叫做ItemManager(或者叫做ItemService)java代码:publicclassItemimplementsSerializable{privateLongid=null;privateintversion;privateStringname;privateUserseller;privateStringdescription;privateMonetaryAmountinitialPrice;privateMonetaryA
3、mountreservePrice;privateDatestartDate;privateDateendDate;privateSetcategorizedItems=newHashSet();privateCollectionbids=newArrayList();privateBidsuccessfulBid;privateItemStatestate;privateUserapprovedBy;privateDateapprovalDatetime;privateDatecreated=new
4、Date();//getter/setter方法省略不写,避免篇幅太长}java代码:publicinterfaceItemDao{publicItemgetItemById(Longid);publicCollectionfindAll();publicvoidupdateItem(Itemitem);}ItemDao定义持久化操作的接口,用于隔离持久化代码。java代码:publicclassItemDaoHibernateImplimplementsItemDaoextendsHibernate
5、DaoSupport{publicItemgetItemById(Longid){return(Item)getHibernateTemplate().load(Item.class,id);}publicCollectionfindAll(){return(List)getHibernateTemplate().find("fromItem");}publicvoidupdateItem(Itemitem){getHibernateTemplate().update(item);}}ItemDaoH
6、ibernateImpl完成具体的持久化工作,请注意,数据库资源的获取和释放是在ItemDaoHibernateImpl里面处理的,每个DAO方法调用之前打开Session,DAO方法调用之后,关闭Session。(Session放在ThreadLocal中,保证一次调用只打开关闭一次)java代码:publicclassItemManager{privateItemDaoitemDao;publicvoidsetItemDao(ItemDaoitemDao){this.itemDao=itemDao
7、;}publicBidloadItemById(Longid){itemDao.loadItemById(id);}publicCollectionlistAllItems(){returnitemDao.findAll();}publicBidplaceBid(Itemitem,Userbidder,MonetaryAmountbidAmount,BidcurrentMaxBid,BidcurrentMinBid)throwsBusinessException{if(currentMaxBid!=n
8、ull&¤tMaxBid.getAmount().compareTo(bidAmount)>0){thrownewBusinessException("Bidtoolow.");}//Auctionisactiveif(!state.equals(ItemState.ACTIVE))thrownewBusinessException("Auctionisnotactiveyet.");//Auctionstillvalidif(item.ge
此文档下载收益归作者所有