Entry

プログラミング・メモ - クラス設計はデータ構造の設計が基本なんだとちょっと思った

2007年08月18日

C しか知らない人に,Java やら C++ のクラスがどんなものかを教えるには,構造体の拡張版だよ,みたいな説明をするとうまく分かってくれることが多かったりします。まぁ,多いと言っても,あたしの周りには C しか知らない人より Java しか知らない人の方が多いんですが。

一方で,話題が飛ぶけれども,クラス設計のデザインパターンの中に,View Helper というもんがあります。デザパタとかいうと気後れする方もいるかもしれないけれど,言ってることは大したことじゃありません。単純に,ロジック部を(JSP 等々ではなく) servlet なりなんなりで処理しましょうね,という話(詳しくは,サルでもわかる 逆引きデザインパターン 第3章 逆引きカタログ J2EE編 View Helper(ビューヘルパ) 等を参照)。普通に HTML と CSS でウェブサイトを作っている向きも,ロジックとビューの分離というのは念仏のように唱えられているところでもあるので,まるで馴染みがないことはないはずです。

ただ,このロジック部,これは「ビューの準備」として作られたものであって,「ビジネスモデルとしてのロジック」とは異なることに注意する必要があります。例えば,上のサイトの例で言うと,「ビューの準備としてのロジック」というのは「『配送料は無料です』を表示するか否か」を判断するところなわけで,「『配送料が無料であるか』を決定できるか」を判断するのとは別のロジックだということ。

つまり,JSP からロジック部をひっぺがしたところで,ひっぺがしたもんにはビューの残滓があるというわけです。これは気持ち悪い。

この点について,先日紹介した『J2EEパターン 第2版』では,いくつかの戦略(!)を用意しています。

J2EEパターン 第2版
J2EEパターン 第2版
posted with amazlet on 07.08.18
Deepak Alur John Crupi Dan Malks 近棟 稔 吉田 悦万 小森 美智子 トップスタジオ
日経BP社 (2005/05/19)
売り上げランキング: 15803
おすすめ度の平均: 5.0
5 久々に良いJ2EEの翻訳書にめぐり合えました
5 手抜きのないリファレンス書
5 すきのないJavaデザインパターンの解説書

ただ,これが解決の糸口になるかというと,そうでもありません。例えば,Controller-based View 戦略(servlet に動的に生成する HTML を直書きする)なんかを見ると分かる通り,もうなんつーか,「そのまんま」なわけで,ひっぺがしたもんに丸々ビューがこびり付いてます。これじゃ,ビューからはロジック分離できるけど,今度はロジックと分離できていない。他の戦略ではいくつかアイデアがあるけれども,Java 特有の機構を使うものなので(Bean や taglib を使う),オブジェクト指向的な「戦略」というよりもむしろ実装方法といった方が正しい感じがします。

んなもんで,本書によってもビューとロジックの分離問題はちゃんと解決されていない(と,少なくともあたしは思う)。

そこで,最初の話に戻ると,実のところ「ビューとロジックの分離」というのは,四角や矢印でもって表現できるほどきれいには作れっこないわけで,かなり泥臭い作業をしないといけないことが分かってきます。つまり,ビジネスモデルをビューにマップする際の「ロジック」……ではなく(!),「データの持たせ方 = データ構造」を念入りに検討する必要があるというわけです。んでもって,ここに,クラスを構造体で説明する意義があるんじゃないか,と。

モデルからビューへのマップというのは,あるデータ構造から別のデータ構造に変換することです。小規模な例で端的に言えば,RDB のリレーショナル・モデルから UI やコントロールを作ろうという話。んでもって,実際のところ,モデルのロジックはあらかじめ決まっている場合が多いのに対して,ビュー(使い勝手)の箇所はたくさんのメンテナンスが入ります。つまり,キモとなるのはここなわけで,念入りにデータ構造を検討してうまく作り込めば,他にも使い回せるし,数十万ステップ以上の,中・大規模システムに対応することもできる,と思うわけです。

先日「J2EEパターン」は基礎教養みたいなもんだ,といったのは,そこら辺が後に控えているんだよなぁ……という話だったわけで,その意味で言うと,四角や矢印を使った例のパターンは泥臭い部分がまるで無いかのような印象を与えてしまう,とも思います。泥臭い部分はいくらでもある。

そういうわけで,ちゃんとデータ構造の話は身に付けよう,と思ったのでした。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN