2004年4月21日水曜日

Martin Fowler in Tokyo

月刊ソリューションIT主催「アーキテクトセミナー」と、MS主催「.NETアーキテクトセミナー」の両方に参加。


(4/23追記)プレゼン資料発見。


Martin Fowler氏の話は、両者ともほぼ同じ(ドメイン層におけるTransaction Script, Domain Model, Table Moduleについて)でしたが、MS主催の方は講演時間が20分ほど長かったためO/R Mappingのパターン(Table Data Gateway, Row Data Gateway, Active Record, Data Mapper)と分散システムのパターン(Remote Façade, Data Transfer Object)の話もできました(というか、ソリューションIT主催の方は、同通が丁寧に訳しすぎてそれがボトルネックになっていたような気がする。それぐらいなら、MS主催の方みたいに豪快な同通がいい)。そうそう、NEOの話も出ました。


質疑応答の時間もMS主催の方にだけありました。紙に記入した質疑を回収してMS萩原さんがピックアップして質問する、というスタイルでした。

簡単にメモ。不正確だとおもいますがご容赦ください。bliki_jaも参照のこと。

Domain Modelはパフォーマンスが悪いのでは?
インスタンス化にかかるコストやオブジェクト間のメッセージ送受信にかかるコストなんてのは問題にならない。一番問題になるのはデータベースへのアクセス。クエリの組み立て方によってはパフォーマンスが悪くなることもある。パフォーマンスについて語るときにはきちんと測定しなくてはいけない。それから、マルチユーザのシステムであれば、ロックによるパフォーマンス悪化もありえる。繰り返すが、インスタンス化にかかるコストやオブジェクト間のメッセージ送受信にかかるコストなんてのは問題にならない。
SOAについてはどう考えるか。関連して、アプリケーションでプロセス内の呼び出しとプロセス間通信の両方を混在させることは問題になるのか。
SOAについては皆違うことを言う。基本的な立場として分散システムは避けた方がいいと考えている。Webサービスは良い道具だと思うが、Webサービスを使うときには非同期呼び出しがよい。疎結合になる。Entarprise Integration Patterns本(amazon.com)がお勧め。ただアプリケーションのレイヤ間通信にWebサービスを使うのは愚かしい失敗だ。Java Swingでクライアントを作って、サーバとWebサービスで通信するようにしたんだけど、XMLを組み立ててまた分解して、というのでパフォーマンスが悪かった。
パターンやリファクタリングを技術者に根付かせるには?
両者は関連している。パターンとは構造を設計すること、そしてリファクタリングは構造を変えることだといえる。そしてイテレーションの中でそれらを実施するんだ。Joshua KerievskyがRefactoring To Patternsという本を執筆中だ。ぐぐってみて。
テスティングフレームワークについて。Domain Modelはテストしやすいけれど、Transaction ScriptやTable Moduleはテストしにくいのでは。
3つともテスト可能にできる。テストについてルールは2つ。(1)データベースのスタブを作れ。(2)UIから可能な限りロジックを排除しろ。UIをテストするには画面を操作する必要があるから。今はリッチクライアントをテストしやすくすることについて考えている。
JavaではAOPやDependency Injectionというキーワードが流行っているが、.NETでも有効か?
JavaではEJBが嫌われていて、代替案としてオープンソースのプロジェクトが生まれてきたという背景がある。Pico ContainerやSpringといったライトウェイトコンテナだ。それらの考え方は.NETでも応用可能だと考えている。ロンドンのプロジェクトはC#の開発なんだけど、IoCの人たちが参加していた。ま、.NETはEJBの問題点を避けているように思えるけどね。

猪股の質問(AOPとかDependency Injectionは.NETでも有効と考えるか?)も選ばれました。


小ネタ1。Fowlerたんはイギリス式発音でした(イギリス出身だから当然か)。


小ネタ2。ユニシス尾島は自分のノートPCにFowlerたんのサインをお願いして断られた。曰く「僕の本にしかサインしないよ。」ということで猪股がP of EAAを尾島に渡し、無事サインしてもらいました。

ちょっと見難いですが、"Martin Tokyo 4/04″と書いてあります。



2004年4月8日木曜日

TestRunner for NUnit

TestRunner


TestRunner seamlessly integrates NUnit testing and debugging into a compact Visual Studio .NET 2003 add-in.


とのこと。nUnit Addinとどっちがいいのかな。