模式二中 Entity Bean 與 Value Object (Struct) 存在大量重複欄位宣告,維護困難。
public class CompanyBean extends CompanyStruct implements EntityBean {
EntityContext entityContext;
// 繼承自 CompanyStruct:comId, comName, comDescription, mutationDate
// 皆可直接作為 CMP 欄位
public Integer ejbCreate(CompanyStruct struct) throws CreateException {
this.comId = struct.comId; // 設定 PK
setData(struct); // 複製其他欄位
return null;
}
// getData()/setData() 實作同模式二
}
public 欄位。public,破壞封裝。@Embedded) 而非繼承。| 模式二 | 模式三 |
|---|---|
| Bean 另行宣告所有欄位 | extends Struct 繼承欄位 |
| Struct 變更需同步 Bean | Struct 變更自動生效 |
| getData/setData 手動逐欄位 | 同模式二,未優化複製 |
模式三以繼承消除欄位重複,是模式二的自然演進。但繼承帶來的封裝破壞與單一繼承限制,提示我們在現代框架(JPA)中應改用組合方式嵌入 Value Object,兼得復用與封裝。