본문 바로가기

Dev.../소프트웨어 아키텍처

[SA강좌] Part 4-20 Serialized LOB 패턴

시리얼라이즈 LOB(Serialized LOB) 패턴

시리얼라이즈 LOB 패턴의 정의

시리얼라이즈 LOB 패턴은 동기화된 개체들을 데이터베이스 필드에 저장된 단일 큰 개체 개체의 그래프를 저장한다.

그림 -27. 시리얼라이즈 LOB 패턴의 구조

시리얼라이즈 LOB 패턴의 설명

시리얼라이즈 LOB 패턴의 예제:XML에 있는 부서 계층을 시리얼라이즈

 

class Customer ...

 

private String name;

private List departments = new ArraryList();

 

class Department ...

 

private String name;

private List subsidaries = new ArraryList();

이 경우 데이터베이스는 한개 테이블만 가진다.

 

create table customers(ID int primary key, name varchar, departments varchar)

활동 레코드(Active Record) 패턴과 같이 고객 테이블은 다루어지고, 입력 행동을 가진 데이터 쓰기를 설명한다.

class Customer ...

 

public Long insert() {

PreparedStatment insertStatment = null;

try {

insertStatment = DB.prepare(insertStatementString);

setID(findNextDatabaseId();

insertStatment.setInt(1, getID().intValue());

insertStatment.setString(2, name);

insertStatment.setString(3, XmlStringer.write(deapertmentsToXmlElement());

insertStatment.execuete();

Registry.addCustomer(this);

return getID();

} catch(SQLException e) {

throw new ApplicationException(e);

} finally { DB.cleanUp(insertStatment);

}

}

 

public Element departmentsToXmlElement() {

Element root = new Element("departmentList");

Interator i = departments.iterator();

while (i.hasNext()) {

Department dept = (Department) i.next();

root.addContent(dep.toXmlElement());

}

return root;

}

 

class Department ...

 

Element toXmlElement() {

Element root = new Element("department");

root.setAttribute("name", name);

Interator i = subsidiaries.iterator();

while (i.hasNext()) {

Department dept = (Department) i.next();

root.addContent(dep.toXmlElement());

}

return root;

}