在設計模式3中我們看到使bean從strUCt繼續后使得代碼大幅縮水并且所有的字段都可定義為cmp字段。這里,我們可以更進一步修正setdata()和getdata()的實現方法來減少代碼量。 我們為這個struct增加一個方法。 value Object code snippet for Company public class CompanyStruct implements java.io.Serializable { public Integer comId; public String comName; public String comDescription; public Timestamp mutationDate; public void copyFrom(CompanyStruct struct) { comId = struct.comId; comName = struct.comName; comDescription = struct.comDescription; mutationDate = struct.mutationDate; } }
由于entity bean是從struct繼續下來的,在bean的實現類中也一樣可以引用copyfrom()方法,當然,必須注重的是,這個copyfrom()方法并不是一個商業方法,它不需要在bean的遠程接口中暴露給調用者。 現在,getdata()和setdata()方法可以簡化更進一步的簡化。 Code snippet for an Entity Bean’s getData() public CompanyStruct getData() { CompanyStruct result = new CompanyStruct(); result.copyFrom(this); return result; }
這里把this作為一個參數傳入copyfrom()。由于enttity bean從struct繼續而來,于是這個entitty bean便可以作為一個struct傳入。 EJB容器并不贊成把this指針作為一個參數傳遞因為在兩個控制線程中同時訪問一個bean的實例可能會引起事務沖突。但事實上我們所做的并沒有違反這個原則,因為我們的并沒有在bean之間傳遞this的引用并且也沒有引用任何可能引起事務沖突的方法。 Code snippet for an Entity Bean’s setData() public void setData(CompanyStruct struct) { this.copyFrom(struct); }