在本系列的前一篇文章中,我開始談到了 db4o 如何處理 結構化對象,或者包含非原始類型字段的對象。正如我所展示的那樣,增加對象關系的復雜性對 db4o 持久模型有一些重大的影響。我談到了在刪除期間解決像激活深度(activation depth)、級聯更新與刪除和參照完整性等問題的重要性。我還介紹了一種叫做 探察測試 的開發人員測試策略,附帶給出了使用 db4o API 的第一個練習。
在本文中,我繼續介紹 db4o 中結構化對象的存儲和操作,并首先介紹多樣性關系(multiplicity relationship),在多樣性關系中,對象中含有對象集合形式的字段。(在此,集合 是指像 ArrayList 之類的 Collection 類和標準語言數組。)您將看到,db4o 可以輕松處理多樣性。您還將進一步熟悉 db4o 對級聯更新和激活深度的處理。
關于本系列
信息存儲和檢索作為 RDBMS 的同義詞已經有 10 來年了,但現在情況有所改變。Java 開發人員尤其厭倦于所謂的對象關系型阻抗失配,也對試圖解決這個問題失去了耐心。再加上可行的替代方案的出現,就導致了人們對對象持久性和檢索的興趣的復蘇。 面向 Java 開發人員的 db4o 指南 對 db4o 作了介紹,它是一種充分利用當前的面向對象的語言、系統和理念的開放源代碼數據庫。為了實踐本系列中的例子,您需要下載 db4o。
處理多樣性關系
隨著這個系列深入下去,之前的 Person 類肯定會變得更加復雜。在 關于結構化對象的上一次討論 結束的時候,我在 Person 中添加了一個 spouse 字段和一些相應的業務邏輯。在那篇文章的最后我提到,舒適的家庭生活會導致一個或更多 “小人兒” 降臨到這個家庭。但是,在增加小孩到家庭中之前,我想先確保我的 Person 真正有地方可住。我要給他們一個工作場所,或者還有一個很好的夏日度假屋。一個 Address 類型應該可以解決所有這三個地方。
清單 1. 添加一個 Address 類型到 Person 類中
package com.tedneward.model;
public class Address
{
public Address()
{
}
public Address(String street, String city, String state, String zip)
{
this.street = street; this.city = city;
this.state = state; this.zip = zip;
}
public String toString()
{
return "[Address: " +
"street=" + street + " " +
"city=" + city + " " +
"state=" + state + " " +
"zip=" + zip + "]";
}
public int hashCode()
{
return street.hashCode() & city.hashCode() &
state.hashCode() & zip.hashCode();
}
public boolean equals(Object obj)
{
if (obj == this)
return this;
if (obj instanceof Address)
{
Address rhs = (Address)obj;
文章來源于領測軟件測試網 http://www.kjueaiud.com/