• 検索結果がありません。

日本語版目次 アーキテクチャに関するパターン : P035 振る舞いに関する問題 : P040 データの読み込み : P042 構造的なマッピングに関するパターン : P043 関係のマッピング : P043 継承 : P047 マッピングの構築 : P050 2 重のマッピング : P051 メタ

N/A
N/A
Protected

Academic year: 2021

シェア "日本語版目次 アーキテクチャに関するパターン : P035 振る舞いに関する問題 : P040 データの読み込み : P042 構造的なマッピングに関するパターン : P043 関係のマッピング : P043 継承 : P047 マッピングの構築 : P050 2 重のマッピング : P051 メタ"

Copied!
41
0
0

読み込み中.... (全文を見る)

全文

(1)

リレーショナルデータベースへのマッピング

WR

WR at Csus4.net

http://www.csus4.net/d/

Pattern of Enterprise

Application Architecture

Chapter 3

(2)

日本語版 目次

• アーキテクチャに関するパターン : P035

• 振る舞いに関する問題 : P040

• データの読み込み : P042

• 構造的なマッピングに関するパターン : P043

– 関係のマッピング : P043

– 継承 : P047

• マッピングの構築 : P050

– 2重のマッピング : P051

• メタデータの使用 : P052

• データベース接続 : P053

• その他の要点 : P055

• 参考文献 : P056

(3)

3.1 アーキテクチャに関するパターン

• ゲートウェイ/DAOによるレイヤ化

• ゲートウェイの構成と分類

• ドメインロジック/ビジネスロジックとの関係

• ビューとクエリー

• ドメインモデルの永続化

(4)

ゲートウェイ

/DAOによるレイヤ化

P187-188. The Case of the Missing Element

PK name 2 bar 1 foo deptId 1002 1001 User

SQL

ビジネスロジック

ゲートウェイ

/DAO

• メリット

– SQLの隠蔽/分離

(プログラム・プログラマ)

– データアクセスレイヤへのSQLアクセス処

理の一元化

データアクセスレイヤの導入

(5)

ゲートウェイの構成と分類

• 行データゲートウェイ

– RDBレコード1つに1インスタンス

– オブジェクト指向の考え方に適合

• テーブルデータゲートウェイ

– RDBテーブル1つに1インスタンス

– レコードセットに適合

(6)

行データゲートウェイの概念

PK name

2

bar

1

foo

deptId

1002

1001

User

insert

update

delete

インスタンスとレコードの対応

(7)

行データゲートウェイのバリエーション

PersonFinder

lastname

firstname

numberOfDependents

insert

update

delete

find(id)

findForCompany(companyID)

PersonGateway

find(id)

findForCompany(companyID)

lastname

firstname

numberOfDependents

insert

update

delete

PersonGateway

3.1 (P36)

10.2章 (P162)

(8)

テーブルデータゲートウェイの概念

PK name

2

bar

1

foo

deptId

1002

1001

User

Gateway

3

baz

1003

PK name

2

bar

1

foo

deptId

1002

1001

User

find(...)

insert(id, ...)

update(id, ...)

delete(id)

RecordSet

(9)

テーブルデータゲートウェイ

Find(

id

) :

RecordSet

findWithLastName(String) :

RecordSet

Update(

id

, lastName, firstName, numberOfDependencies)

Insert(lastName, firstName, numberOfDependencies)

Delete(

id

)

PersonGateway

(10)

ドメインロジックとゲートウェイ

• テーブルモジュール

テーブルデータゲートウェイ

• ドメインモデル

– ロジックがシンプルかつ、テーブルとオブジェクト

の関係がシンプル

アクティブレコード

– ロジックが複雑かつ、テーブルのオブジェクトの

関係が複雑

データマッパー

• 多種のゲートウェイを併用してよい

– しかし、混乱を招く恐れあり

– 併用せざるを得ないケースもある

(11)

アクティブレコード

lastname

firstname

numberOfDependents

insert

update

delete

getExemption

isFlaggedForAudit

getTaxableEarnings

Person

ビジネスロジックを配置

データアクセスをカプセル化

(12)

データマッパー

PersonMapper

insert

update

delete

Person

lastname

firstname

numberOfDependents

getExemption

isFlaggedForAudit

getTaxableEarnings

(13)

ドメインモデルの永続化

• OODBの利用

– 最もシンプルなドメインモデルの永続化方法

– 長所

• 生産性の向上

– 短所

• リスク

• O-Rマッピングツールの利用

(14)

3.2 振る舞いに関する問題

• 読み込みと保存に関する

• ユニットオブワーク

• 一意マッピング

• レイジーロード

(15)

ユニットオブワークの概念

New!

オブジェクトの読み込みと更新を記録する

UnitOfWork

registerNew(obj)

registerDirty(obj)

registerClean(obj)

(16)

一意マッピングの概念

User

PK name

2

bar

1

foo

deptId

1002

1001

同一レコードに対し

2つのオブジェク

トが存在すべきで

ない

(17)

レイジーロードの概念

1)

3)

2)

fetch

load

アクセス

fire!

(18)

データの読み込み

• findメソッド

– 実装方法

• staticメソッドとして実装する

• Finderクラスを設ける

• 読み込みの効率化

– 経験則

• 1度に複数行を取得するほうが良い

• ジョインを使用するほうが良い

– 実際問題・・・

• DBAに相談せよ

• プロファイルを取得せよ

(19)

3.3 構造的なマッピングに関するパターン

• 関係のマッピング

– 一意フィールド

– 外部キーマッピング

– 関連テーブルマッピング

– 順序を持ったコレクション

– バリューオブジェクト

– シリアライズLOBとXML

• 継承

(20)

一意フィールド

• テーブルのキーをオブジェクトのフィールドに

マッピングする

Person

id : long

Person

PK

2

1

(21)

外部キーマッピング

User

name: String

Dept

name: String

User

PK name

2

bar

1

foo

deptId

1002

Dept

name

bar

foo

deptId

1002

1001

1001

*

1

(22)

関連テーブルマッピング

Employee

name: String

Skill

name: String

Skills

name

bar

foo

ID

1002

1001

*

*

Employees

ID

2

1

skill - employees

skillID

1002

1001

empID

2

1

(23)

順序を持ったコレクション

• 順序を持ったコレクション

– OO言語では一般的かつ有用

– RDBでは取り扱いが難しい

順序を持たないコレクションに利用を検討すべ

もしくは、常にあるソート順でデータを取得する

ようにする

(24)

参照整合性

• 参照整合性が更新の邪魔になるケースがあ

• 参照整合性に引っかからないように更新処理

を実行する方法

– 整合性チェックをコミット時まで遅延させる

– 更新のトポロジカルソートを行う

(25)

name

ID

2

1

salaryAmount salaryCurrency

バリューオブジェクト

Employee

ID

name: String

<<value>>

Money

amount

: decimal

currency

: char

salary

Employees

Employees

PK name

moneyID

Money

amount

moneyID

currency

(26)

シリアライズ

LOB/XML

• 利点

– 階層的データ構造を自然に格納できる

• 欠点

– クエリのインタフェースがポータブルでない

• XPathの普及に期待!

• 結論

– 検索不要な、独立性が高い部分に使用するが吉

(27)

継承

• シングルテーブル継承

• 具象テーブル継承

(28)

シングルテーブル継承

• 親Entityと子Entityを

単一のテーブルに格納

する

• スペースを食う

• パフォーマンス良い

• 継承されたアトリビュー

トは複製されない

• サブクラス(やスー

パークラス)の識別

”type”を用いる

Person

Person

Employee

Employee

Customer

Customer

Person

personType

id

birthday

name

cur_order

共通

属性

(29)

具象テーブル継承

• 継承アトリビュートを

含め、すべての属性

が複製される

Person

Person

Employee

Employee

Customer

Customer

Employee

name

id

salary

birthday

Customer

name

id

payment

birthday

共通

属性

(30)

クラステーブル継承

• 継承ツリー間で属性が

共有されない

Person

Person

Employee

Employee

Customer

Customer

Employee

Customer

Person

name

id

birthday

共通

属性

(31)

多重継承への対処

(32)

3.4 マッピングの構築

• 3つの状況

– スキーマを自分で選択する。

– 変更できない既存のスキーマへのマッピングを行

わなくてはならない。

– 既存のスキーマへのマッピングを行わなければ

いけないが、このための変更には交渉の余地が

ある。

(33)

2重のマッピング

PersonA

PK

2

1

PersonB

PK

2

1

Person

PK

2

1

Gateway

Gateway

仮想的なデータソース

(34)

3.5 メタデータマッピング

Person

PK

2

1

Person

?

SQL

構造のマッピング

クエリのマッピング

メタデータ

(35)

3.6 データベース接続

• データベース接続とレコードセット

• データベース接続とコネクションプール

• 接続の管理

(36)

データベース接続とレコードセット

• 切断されたレコードセット

– 接続を閉じた後に処理される

– ex. ADO.netの非接続型DataSet

• 接続されたレコードセット

– 処理される間、接続を維持する必要あり

– ex. ???

(37)

データベース接続とコネクションプール

• コネクションプールすべき(一般に)

– 多くのプラットフォームではプールが提供される

• プールのインタフェース

– 適切にカプセル化されている場合が多い

• トランザクションとプール

– 特定のトランザクションには同一の接続を割り当てる必要

オープン

プールからの取得

クローズ

プールへの解放

(38)

接続の割り当て法

(1)

doHoge(

con

, param, ...)

doFuga(

con

, param, ...)

• 明示的な引数に接続を指定する。

(39)

接続の割り当て法

(2)

スレッドスコープの

レジストリ

(40)

接続のクローズ管理

• 方法2つ

– ガベージコレクションと関連付ける

推奨しない

– トランザクションと関連付ける

• 機能との結びつきがわかりやすく、管理しやすい

– ユニットオブワーク

推奨できる

(41)

参照

関連したドキュメント

このように資本主義経済における競争の作用を二つに分けたうえで, 『資本

 哺乳類のヘモグロビンはアロステリック蛋白質の典

物語などを読む際には、「構造と内容の把握」、「精査・解釈」に関する指導事項の系統を

不変量 意味論 何らかの構造を保存する関手を与えること..

 複雑性・多様性を有する健康問題の解決を図り、保健師の使命を全うするに は、地域の人々や関係者・関係機関との

参考資料ー経済関係機関一覧(⑤各項目に関する機関,組織,企業(2/7)) ⑤各項目に関する機関,組織,企業 組織名 概要・関係項目 URL

・関  関 関税法以 税法以 税法以 税法以 税法以外の関 外の関 外の関 外の関 外の関係法令 係法令 係法令 係法令 係法令に係る に係る に係る に係る 係る許可 許可・ 許可・

層の項目 MaaS 提供にあたっての目的 データ連携を行う上でのルール MaaS に関連するプレイヤー ビジネスとしての MaaS MaaS