.NETエンタープライズWebアプリケーション開発技術大全 Vol.5 トランザクション設計編

.NETエンタープライズWebアプリケーション開発技術大全 (Vol.5)

Amazonマーケットプレイスで安価に販売していたので衝動買い。
実は昔から気にはなっていたのだけど、プラットフォームが.netだったので買うのを躊躇していた。
内容はかなりイイ。.netに関係しなくても、トランザクション設計について悩みがある人は、立ち読みして内容を試し読みするぐらいの価値はありそう。私に関しては、少なくとも値段分の元は取れそうな感じである。
.netフレームワークでエンタープライズアプリケーション開発をする人は必読ではないだろうかね。カナリお勧めできます。

以下に、この本の良い点をあげる。

まず第一に、アプリケーション開発者の立場で書かれている点がある。
ACIDなどのトランザクションそのものの概念や、RDBにおけるトランザクションを論じた・解説した書籍は数あれど、アプリケーション+RDB or/and … で構成されるシステム全体においてトランザクション設計をどのように行うか?を論じた本は少ない。和書だと皆無に近いのではないだろうか?この本は、その領域をターゲットとしている。

第二に、トランザクション、同時実行制御、ロック、分離性など、初学者が混同しがちな概念を整理して語っている点。
私は、SQL Serverにおいて、分離性を変えることでどのようにロックの保持期間が変わるか?取得するロックの種類が変わるか?の説明が面白く感じた。(2.2 分離レベルによるロック挙動の変化)
恥ずかしながら、分離性の概念がどのように実現されているかをキチンと理解していなかったため、この箇所を興味深く読ませていただいた。ロック保持に関する概念図とEnteprise Managerのロック状態表示画面を多用して丁寧に解説されているため、非常に理解しやすくなっている。すばらしすぎます。

第三に、わかりやすさを優先しつつも、正しさにも配慮している点。
本書では、おそらくわかりやすさのため、多少の厳密さを犠牲にした記述がされている。
本文で犠牲にした厳密さを補うため、筆者の愛情こもった脚注がたくさん記してある。これまた、すばらしい。

第四に、「くーす」に近いステートレスなクラス設計を説いている点(笑)。
まぁ、COM+の流れから当然なんですが、MSの立ち位置は「ビジネスロジックはステートレス」というもの。

筆者は、これを踏まえつついくつかの補足的な説明をしており、その結論として、
「エンティティ中心のオブジェクト指向設計は、スタンドアロンのシングルユーザアプリケーションに向いているケースが多いが、WebアプリケーションやWebサービスのような、サーバサイドのOLTP型マルチユーザアプリケーションには適していない。」と整理している。まったく持ってそのとおりと感じている。

第五に、具体的なアプリケーション毎に、設計方針を示している点。
対話型アプリケーション、バッチアプリケーション、キュー型のアプリケーションなどのに対して
ある程度具体的な指針を示している。(ただし、本書の中で著者が述べているとおり、「定式化が難しい」ため、さすがに「この記述に従えばうまくいく!」という内容までにはなってない。というか、なりえないよね・・・。)

PoEAAとか

ロイホにしけこみ読書。

Essential XML―マークアップの彼方に Don Boxが解き明かすその本質

Essential XML・・・うーむどうなんだろう。ちょっと必要以上にわかりにくく書いてないか?この本。
訳が良くないというのもあるけど・・・(シリアライズを「順序化」って、あーた・・・。せめて「直列化」で頼む。)
インフォセットの語りもなんだか抽象的でよーわからんし、SAX、DOMのあたりも構成が練れていない感じ。

エンタープライズ アプリケーションアーキテクチャパターン

PoEAA読書会に向けて、2部のパターン、O-Rマッピングあたりをさらりと読む。

1部の概論はイマイチしっくり来なかったが、2部はまぁまぁな気がする。
各パターンの説明の中で、未説明のパターンに言及するあたりがなんだかなーだけど、
各パターンの概要が頭に入ってきてパターン間の関係を頭の中で整理することができると、
比較的すんなり読めた。
ただ、ファウラーのコメントが散文的で踏み込みが甘いので、若干フラストレーションがたまるなぁ。
もう少し、具体的なコメントがほしいところではある。
現在は様々なフレームワークが出回っているわけだから、それらに触れるような切り口もありなのでは?と思ったりした。

### EOFとPoEAA ###

パターンの本来的な役割は、共通の語彙・概念の形成であると理解している。
というわけで、PoEAAの語彙・概念を利用してEOFを表現する。(乱文すぎるので、たぶん、あとで書き直す)

### ドメインロジックパターン ###
ドメインロジック(=ビジネスロジック) の割り当ての方針は、基本的に「ドメインモデルパターン」が推奨される。
もちろん、画面にビジネスロジックを埋め込むような実装・設計も可能ではあるけれども。

物理的にも、「ドメインモデル」を実装したオブジェクト群をパッケージ化・フレームワーク化して、様々なアプリケーション形態(WOFと呼ばれるリッチなWebアプリケーションフレームワークを使用したWebアプリケーション、DirectToWebと呼ばれるルールベースのUI定義ベースのWebアプリケーション、Javaクライアントなどなど)で、それらを共用することが(それなりに)一般的であるようだ。

### データソースのアーキテクチャに関するパターン
データソースとオブジェクトの変換は、オブジェクトグラフとリレーショナルモデルの変換という形で実行される。
であるので、「データマッパーパターン」になるのかな?
オブジェクトとリレーショナルの対応は、物理的には*.eomodelファイル群、論理的にはEOModelGroup、EOModelなどのメタモデルクラス群で管理される。(「メタデータマッピングパターン」に相当)

### オブジェクトリレーショナル振る舞いパターン ###
基本的に、「ユニット・オブ・ワーク パターン」。
EOEditingContextと呼ばれる、オブジェクトグラフの編集用ブール、SandBox的なオブジェクトが存在しており、これがオブジェクトグラフの編集状態を管理する。編集をコミットしたタイミングで、オブジェクトの編集処理が、SQLクエリに変換される(「データ・マッパー パターン」)。この際、デフォルトでオプティミスティックロック戦略が使用される・・・ことになっている。(苦笑&謎めき)

EOEditingContextの寿命とWeb層のSessionの寿命がシンクしている点がなかなかいい感じではある。
(超私見)

#### 一意マッピング ####
異なる2つの世界、RDBMSとオブジェクトの中で、一意性をどのように、どのレベルで確保するか?という戦略。

EOFは一意性に関しては、2種類の一意性管理をもつ。
「ユニット・オブ・ワーク」単位の一意性と、データベース群レベルの一意性であり、EOGlobalIDなるクラスを用いることで一意性管理を実行する。EOGlobalIDは「データソース×テーブル×プライマリキーの組み合わせ」と考えてよい。文字通り、複数データソース内で、グローバルに一意である。

1つの編集用領域(EOEditingContext)には、同じEOGlobalIDのオブジェクトは1つしか読み込まれない。
ただし、複数ユーザーが編集中である場合など、複数の編集用領域が存在する場合、同じEOGlobaIDのオブジェクトが複数存在する。(当たり前!)
ただし、下位のデータ管理レイヤがそれぞれのオブジェクトをトラッキングしており、あるオブジェクトが編集された場合、同じEOGlobalIDを持つ別のオブジェクトに変更を伝播させたり、しなかったりする。

#### レイジーロード ####
レイジーロードはfaultingと呼ばれる機構でサポートされる。
関連の先にぶら下がっているオブジェクトは、必要に応じてRDBMSから読み込まれる。
(キャッシュと絡むと何がなんだか・・・ということになりそうな気もしないでもない。)

### 構造パターン

#### 一意フィールド ####

基本的にPKはoid的扱いが基本。オブジェクトのライフサイクルでPKの値を変更することは想定外!(だったと思う)

#### 外部キーマッピング ####

外部キーというか、RDBのリレーションシップは、デフォルトでは(オブジェクトグラフにおける)双方向の参照の持ち合いに変換される。toOneは単なる参照に、toManyはコレクションに格納された参照になる。

アプリケーションは(基本的に)上記の仕組みを理解する必要が無い。参照の管理のみをキチンとやればよい。
(「データ・マッパー」の枠組みの中で自動的に行われる)

#### 関連テーブル・マッピング ####

忘れた・・・

#### 依存マッピング ####

「依存」という概念は無かったはず。

#### 組込バリュー ####

メタデータの枠組みの中で、カラム→オブジェクト、オブジェクト→カラムのマッピング戦略を定義可能。
ファクトリメソッドと、シリアライズメソッドを定義しておけばよい(←用語は怪しい)

#### シリアライズLOB ####

上記と同様の考えて実現可能(な、はず・・・)

#### 各種継承 ####

用語は違うが、3つの継承をサポートする。
EOFの世界では、

* 垂直マッピング継承
* 水平マッピング継承
* シングルテーブル継承

と呼ぶ。(つーか、こちらの用語の方が一般的?)

### 関連資料 ###
自作のWOMeeting – WOWiki用の資料なぞ。

* EOModeling Techniques from Practical WebObjects
* Managing the Object Graph from Practical WebObjects
* WebObejects/EOFでの継承モデリング

とか。

### 共通の語彙としてのパターン ###
うん、確かに便利かもねー。

追悼

[結] 石井さんの訃報 – 結城浩の日記

とあるML経由で事実を知った。

直接お会いしたことはないのだけど、自身がxUnitを実践する際に非常に参考にさせていただいた。実際、自身のプロジェクトでも、テスト対象のオブジェクトにtoString()メソッドを持たせるテクニック、expectedとactualのdiffをとるテクニックなど、実際に活用させていただいたアイディアがある。

Agile界に、pragmaticな方法論を提供したという意味で、皆に幸せを与えた方だと思う。

心よりご冥福をお祈り申し上げます。

DataModel

DataModel
via capsctrldays

期待。

PoEAA邦訳購入

会社の定時後、出張の前に駅前の書店へ行き購入した。

エンタープライズ アプリケーションアーキテクチャパターン

勉強会は、これを持参して望む予定。よろ!

検定試験情報 [日商簿記検定試験]

検定試験情報 [日商簿記検定試験]

むむ。締め切りは28日までか。

### というわけで
忘れないうちに申し込んだ。

対照表はパワフルだ

Data Model Resouce Book vol.1を読みながら、記載されているデータモデルをVisioでお絵かき。
VisioにはBarker NotationのER図を書く機能がないので、角丸四角と(普通の)コネクタを使用して書いてみた。単に書き写してもしょうがないので、適当に構成要素を分類したり、構成のパターン的な要素を洗い出したりしながら読み進めるわけである。

ただ、当方T字形ER出身なので、やっぱりT字形ER的な分類や、パターンからERを見たほうが親しみやすいもの。というわけで、色分けでその分類を表してみた。

* ピンク:リソース(的な)エンティティ
* 水色:対照表(的なエンティティ)
* 紫色:再帰(エンティティ)

もちろん、T字形ERでは相当する概念がないようなものもあるわけで・・・

* 黄色:タイプを示すエンティティ

このようにエンティティを分類することにより、リレーショナルモデルが見やすくなる。
この作業を通じて思うのは、「そのエンティティが対照表か否か?」を意識すること、「概念的な意味での関係か否か?」を意識することで、かなりリレーショナルモデルが見やすくなる点である。

対照表はパワフルな概念だし、T字形ERにおける対照表と対照表が関連するリレーションシップの表記方法は簡便でよい。対照表に相当する概念を、いわゆるIntersection Tableで表記してしまうと、リソース⇔リソース間の多重度が理解しずらくなる。

違いを示すために、上の図をT字形ER図で書いてみようなぁ・・・と思ったけど面倒なのでやめ。

#つーか、エディタがないと書く気がしません!!

六の日記はここにはないぞ

六の日記はここにはないぞ

書籍には出てこないような、詳細なレベルで業務システムのデータモデリングについてまとめてようとしてらっしゃっているサイト。すばらし!

* 六の日記はここにはないぞ – 仕訳を度外視で入金処理
* 六の日記はここにはないぞ – 仮受金で前受を管理する話続き
* 六の日記はここにはないぞ – 血液ガッ手形
* 六の日記はここにはないぞ – 血液ガッ手形・補遺
* 六の日記はここにはないぞ – 現預金の入金でウーンウーン
* 六の日記はここにはないぞ – 今度は前受金でウーンウーン
* 六の日記はここにはないぞ – 前受金つづき
* 六の日記はここにはないぞ – 請求書上で消し込みをシミュレートする訳・補遺
* 六の日記はここにはないぞ – 仕訳をいつ作るかなあと云う話
* 六の日記はここにはないぞ – 領収書はモデルに含めるか

法政大学エクステンション・カレッジ – データ中心アプローチによる情報システム分析・設計

法政大学エクステンション・カレッジ – データ中心アプローチによる情報システム分析・設計 に行ってきた。

ただ、大幅に遅刻してしまった。残念。やはり18:30開始はしんどい。
しかも、講義が1時間30分で、全12回とは・・・。 結構出席するのはしんどいですよ?コレ。
もう少し時間を遅くして、1回の講義時間を長めにして講義回数を少なく欲しいなぁ・・・。

閑話休題。初回から遅刻してしまったわけだが、講義の資料は(聴講者専用の)Webサイトに公開されており、これに事前に目を通していたため大体の内容は把握できた。

今後は、初回において概要レベルで語られていた内容が、どのように詳細化・具体化されていくのか?をチェックしていきたい。ただ、12回毎回出るのはほぼ無理!なので、事前配布される資料を見て、都度出席するかどうか?を判断する形になるかな。

MBA財務会計

MBA財務会計  日経BP実戦MBA〈3〉

この本が意外なところで(ほんの少し)役に立ったので、改めて書いてみる。

この本には、個人的にとてもありがたい思いをしている。
会計がわかりたくて、でも、あまりお金をかける気にはなれなくて、BookOffでビジネスマン向け文庫本を何冊かかって読んでみたりした時期があった。
「初心者向け経理?」とか「キーワードでわかる会計」とか、そういう類の本だ。

考えてみれば当たり前なのだけど、こんな本でわかるはずがないのだ。

知識や経験が乏しい人にとって頼れるのは、論理性のみである。
語り口だけをやさしくしたり、1ワード1ページ、絵をふんだんに!てな具合に装丁を工夫した本があったからといって、理解が深まるはずがないのだ。

ある考え方をベースにして、演繹的に次なる考えを導きだすような、論理的な組み立てがなされている本でなければ、自分のような皮膚感覚がない人間にはわかるはずがない。

上記にあげたMBA財務会計は、非常に論理的でわかりやすい書籍である。
論理のみしか頼ることができない、私のような人間には最適な構成になっている。
お勧めできる。

また、すでに基礎的な考え方が理解できているため、手っ取り早く知識の量を増やしたい人には向いていない点には注意されたい。

### 副作用 ###

この本はタイトルに「MBA」なる用語が入っている。ぶっちゃけ、この「MBA」なる用語には殆ど意味はない。この書籍が、「MBA?」というシリーズの一環として出版されたという意味以上のものはない。ただ、「MBA」を目指す人には役立つであろう、ちょっとした配慮がなされている。

会計上の用語の英訳が常にカッコ書きで記載されているのだ。売掛金(accounts receivable)とかである。

これが今日、業界の委員会活動で英語の文献を読み合わせをする際に役に立った。MBA財務会計サマサマだ。

これはさておき、日本、英語ともに会計の用語は一種独特のものがあるため、両者を対応付けて理解する方法は非常に良いと思う。同じ概念を2つの世界からのぞく格好になるため、理解が整理されやすい。というわけで、やっぱりオススメ。