DOA vs OOA対決(その2)

おとといのエントリの続きとして、今日は少し技術的なことを書いてみようと思う。

まず「設計者の発言」を改めて読んでみた。渡辺さんが主張されていることは、理屈として理解したつもりなのだが、なんだか腹に落ちない。どうも話が噛み合ってない感じがする。たとえ話で表現するなら、ボクシングとプロレスの異種格闘技戦をやっているのに、一方のルールだけで判定されているような気分だ。つまり、プロレスのフォールは、ボクシングでは反則だ、と怒られたような印象である。

さて、変なたとえ話はやめて、きちんと説明しよう。



まず渡辺さんの主張を簡単にまとめておく。

1) エンティティに識別子を指定することの是非
識別子が「作為的な存在である」という批判は的外れである。物事を認識するためには作為的な語彙が必要であり、「作為的でない存在」などは、そもそも存在しない。識別子を指定することで、2項関連や3項関連のエンティティを発見しやすく、簡潔で明快に表現できる。

2) 多対多関係の表現方法
UMLモデリングでは多対多関係をそのまま表現するので、関連エンティティが未分析かどうかを識別できない。

3) 上流工程と下流工程のギャップ
UMLはユーザー要求定義からソフトウエアの設計構造の表現の両方に使うことがメリットと言われているが、本質的に異質の両者に対して共通の図面を使うこと自体がナンセンスである。



上記に対する自分の意見は、賛成/反対が相半ばしている。

1) エンティティに識別子を指定することの是非(→半分強は納得
確かに「受注番号」や「社員番号」などは、ソロバンと帳簿で事務をする場合でも必要な識別子である。しかし、ECサイトで顧客に複数の配送先やカード情報を持たせる場合の「シーケンス番号」の類は、リレーショナル理論に乗せるため(≒RDBで実装するため)だけに必要な識別子だと思う。
DOAでは識別子を組み合わせて2項関連、3項関連を簡潔に表現できるメリットについてはその通り。

2) 多対多関係の表現方法(→逆の意見
自分は、主キーだけを持つ「xx-yy関連」エンティティがたくさん書かれたERモデルを見ると非常にうっとうしく感じる。これは概念的に意味がある情報なのか、たんに多対多関係を表現するだけなのかを一見して区別できないためである。(このように、同じ状況に対して渡辺さんと自分が全く正反対の見方をするのは面白い現象である。)

3) 上流工程と下流工程のギャップ(→概ね共感、しかし..
要求定義とソフトウエアの設計が本質的に異質の作業である、という点はその通りだと思う。図面を分けるべき、と言う主張にもある程度共感できる。しかし実業務でのコミュニケーションの道具としてどの図面を使うかについては、総合的な経済判断で決めるべきことである。そういう点では、業界標準でツールの選択肢も広いUMLのメリットは軽視できない。



とりあえずこんな感じである。このテーマについては、識別子の功罪などもう少し書きたいことがあるが、またまた長くなったので、後日のテーマにしたい。

しかしモデリングについてこんな風に考える機会を持てたのは、ひとえに「異種格闘技戦」のおかげである。UMLシンパの人達との議論だとこんな展開にはならない。つくづく自分にとって渡辺さんは有り難い存在だと思う。