資源描述:
《JAVA領域模型之失血貧血充血脹血》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、為了補大家的遺憾,在此總結下ROBBIN的領域模型的一些觀點和大家的補充,在網站和演講中,robbin將領域模型初步分為4大類:1,失血模型2,貧血模型3,充血模型4,脹血模型那么讓我們看看究竟有這些領域模型的具體內容,以及他們的優(yōu)缺點:一、失血模型失血模型簡單來說,就是domainobject只有屬性的getter/setter方法的純數(shù)據類,所有的業(yè)務邏輯完全由businessobject來完成(又稱TransactionScript),這種模型下的domainobject被MartinFowler稱之為“貧血的domainobject”。下面用舉一個具體的代碼來說明,代碼來自Hib
2、ernate的caveatemptor,但經過我的改寫:一個實體類叫做Item,指的是一個拍賣項目一個DAO接口類叫做ItemDao一個DAO接口實現(xiàn)類叫做ItemDaoHibernateImpl一個業(yè)務邏輯類叫做ItemManager(或者叫做ItemService)java代碼:??publicclassItemimplementsSerializable{????privateLongid=null;????privateintversion;????privateStringname;????privateUserseller;????privateStringdescripti
3、on;????privateMonetaryAmountinitialPrice;????privateMonetaryAmountreservePrice;????privateDatestartDate;????privateDateendDate;????privateSetcategorizedItems=newHashSet();????privateCollectionbids=newArrayList();????privateBidsuccessfulBid;????privateItemStatestate;????privateUserapprovedBy;????p
4、rivateDateapprovalDatetime;????privateDatecreated=newDate();????//??getter/setter方法省略不寫,避免篇幅太長}java代碼:??publicinterfaceItemDao{????publicItemgetItemById(Longid);????publicCollectionfindAll();????publicvoidupdateItem(Itemitem);}ItemDao定義持久化操作的接口,用于隔離持久化代碼。java代碼:??publicclassItemDaoHibernateImplim
5、plementsItemDaoextendsHibernateDaoSupport{????publicItemgetItemById(Longid){????????return(Item)getHibernateTemplate().load(Item.class,id);????}????publicCollectionfindAll(){????????return(List)getHibernateTemplate().find("fromItem");????}????publicvoidupdateItem(Itemitem){????????getHibernateTem
6、plate().update(item);????}}ItemDaoHibernateImpl完成具體的持久化工作,請注意,數(shù)據庫資源的獲取和釋放是在ItemDaoHibernateImpl里面處理的,每個DAO方法調用之前打開Session,DAO方法調用之后,關閉Session。(Session放在ThreadLocal中,保證一次調用只打開關閉一次)java代碼:??publicclassItemManager{????privateItemDaoitemDao;????publicvoidsetItemDao(ItemDaoitemDao){this.itemDao=itemDa
7、o;}????publicBidloadItemById(Longid){????????itemDao.loadItemById(id);????}????publicCollectionlistAllItems(){????????return??itemDao.findAll();????}????publicBidplaceBid(Itemitem,Userbidder,MonetaryAmountbidAmount,???