2、nAction>>中的例子,原諒我可憐的想像力。當錢從一個帳戶轉到另一個帳戶時,轉帳的金額不能超過第一個帳戶的存款余額,余額總數不能變,錢只是從一個賬戶流向另一個帳戶,因此它們必須在一個事務內完成,每次事務成功完成都要記錄此次轉帳事務,這是所有的規(guī)則。??貧血模型我們首先用貧血模型來實現(xiàn)。所謂貧血模型就是模型對象之間存在完整的關聯(lián)(可能存在多余的關聯(lián)),但是對象除了get和set方外外幾乎就沒有其它的方法,整個對象充當的就是一個數據容器,用C語言的話來說就是一個結構體,所有的業(yè)務方法都在一個無狀態(tài)的Service類中實現(xiàn),Service類僅僅包含一些行為。這是Ja
3、vaWeb程序采用的最常用開發(fā)模型,你可能采用的就是這種方法,雖然可能不知道它有個“貧血模型”的稱號,這要多虧MartinFlower(這個家伙慣會發(fā)明術語!)。?包結構在討論具體的實現(xiàn)之前,我們先來看來貧血模型的包結構,以便對此有個大概的了解。?貧血模型的實現(xiàn)一般包括如下包:·dao:負責持久化邏輯·model:包含數據對象,是service操縱的對象·service:放置所有的服務類,其中包含了所有的業(yè)務邏輯·facade:提供對UI層訪問的入口代碼實現(xiàn)先看model包的兩個類,Account和TransferTransaction對象
4、,分別代表帳戶和一次轉賬事務。由于它們不包含業(yè)務邏輯,就是一個普通的JavaBean,下面的代碼省略了get和set方法。Java代碼1.public?class?Account?{??2.????private?String?accountId;??3.????private?BigDecimal?balance;??4.??5.????public?Account()?{}??6.????public?Account(String?accountId,?BigDecimal?balance)?{??7.????????this.accountId?=?acco
5、untId;??8.????????this.balance?=?balance;??9.????}??10.????//?getter?and?setter?....??11.??12.}??publicclassAccount{privateStringaccountId;privateBigDecimalbalance;publicAccount(){}publicAccount(StringaccountId,BigDecimalbalance){this.accountId=accountId;this.balance=balance;}//getter
6、andsetter....}?Java代碼1.public?class?TransferTransaction?{??2.????private?Date?timestamp;??3.????private?String?fromAccountId;??4.????private?String?toAccountId;??5.????private?BigDecimal?amount;????6.??7.????public?TransferTransaction()?{}??8.??9.????public?TransferTransaction(String?
7、fromAccountId,?String?toAccountId,?BigDecimal?amount,?Date?timestamp)?{??10.????????this.fromAccountId?=?fromAccountId;??11.????????this.toAccountId?=?toAccountId;??12.????????this.amount?=?amount;??13.????????this.timestamp?=?timestamp;??14.????}??15.??16.????//?getter?and?setter?...
8、.??17