スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

業務アプリとオブジェクト指向について

何度か、独断的なオブジェクト指向論を述べてきたが、ここで少しまとめておこうと思う。

まず第一に、個人的には、オブジェクト指向は好きだし、構造化分析よりも優れていると思う。それは構造化言語よりも多くのことができるからである。世間で勘違いされているような「飛躍的に」まで生産性が高まるとは思わない。また、オブジェクト指向が難解でマスターするのが難しいとも思わない。

難しいと思われている理由は、一つには旧来の手法から移行することが難しいということがあるが、実際には期待したほど生産性が高まらず、原因はきちんと使いこなしていないからだと思い込んでいるためだと思う。これはオブジェクト指向やデザインパターンを魔法のように勘違いしているためだ。
もしオブジェクト指向言語を使ったにもかかわらず、生産性が低いとしたら、多くの場合、開発者が構造化すらできていない、べた書きソースを書いている場合が多い。

データ中心指向(DOA)と対比すると、オブジェクト指向(OOA)も手続き指向(POA)に対抗して出現したものだが、パラダイム的には、データと手続きがセットになっているため、POAとDOAの中間に属する。

業務アプリケーションを作成する際、DOAもOOAもドメイン分析に時間を費やす。OOAでは処理もセットで考慮する点が異なる。

RDBを使って業務アプリケーションを作成する場合、私はDOAの方がよいと思う。多くの人がOOだと思っているのはOOではないし、純粋にOOで組んだ場合、問題がある。

多くの人がOOだと誤解している場合二つあって、一つはJavaを使っているという理由でOOだと思い込んでいるケースと、最終的な実装ではOOライクだが本質はPOA+DOAになっているケース。レイヤーを分けたり細かくモジュール分割したとしてもOOAとは言えない。

業務アプリがDOAの方がいいと思ういくつか理由を述べる。

1.エンティティクラスに特有の機能は不要
 前に述べたとおりテレビ・プロダクト・クラスにテレビが持つ機能は不要。だからといって構造体を使えというのではない。実際、私が作る場合も、単純なgetter, setter以外のメソッドを追加する。だからオブジェクト指向言語を使う意味はある。ただこのエンティティクラスは、しばしばオブジェクト指向ではアプリケーションドメインの中心的存在であるにもかかわらず、さほど大した役割を果たしていないことがある。
 処理の面が強く出ているエンティティの場合、オブジェクト指向が適切だ。この場合、データモデルで始めるより、クラス図ではじめ、データベースにマッピングしていくというスタイルでいいと思う。ただ業務アプリケーションのデータの場合はこの例にはならない。

2.エンティティと処理を分けることになる
 ドメイン分析でクラス図を使用するが、多くの場合それをそのまま実装に落とし込めない。エンティティと処理(サービス、DAO)は分割することになる。
 1の理由や処理の明確化で、分けた方がきれいになるし、わかりやすい。EJBの初期のころ、EntityBeanにロジックが書かれていたが、煩雑になるため、ロジック層は分離され、EntityBeanはデータアクセスのみに専念し、その間の通信にDTOが使われるようになった。

3.フレームワークで形式が統一される
 レイヤーを分けたり、フレームワークを使うと統一感のためにオブジェクト指向が適用しにくい。

4.SQLで必要なロジックを組める
 これは特に参照系で言えること。検索ロジックはすでにDBMSで実装されており、SQLというシンプルな言語によって表現できる。そのため、ロジックはデータアクセス層におけるSQLという形で表現され、ロジック層は単なるコントローラー層でしかなくなってしまう。EJBでは、更新系にはEntityBeanを使うが、参照系ではSessionBeanからJDBCでSQLを投げるアプローチが実際的だった。
 
 OOAでは、インスタンス単位に処理を行うが、DOAでは、表に対して一括して処理を行う。そのため、一括して処理を行いたいとき、OOAのアプローチは、まどろっこしい感じがする。

5.データベースで一元管理した方がいい
 永続装置へのアクセスを一元管理できるのであればいいが、SQLを使えばどこからでもアクセスできてしまう。オブジェクト上で更新処理を行って、それをデータベースに反映させるというアプローチは、別プロセスからのアクセスとバッティングする問題を発生させやすい。排他制御は高くつき、性能を劣化させる。
 ORマッピングツールを使用しても、性能上の問題からRDBやSQLを意識せざるを得ない場合が多い。

オブジェクト指向DBを使った経験がないために、RDBという限定詞をつけたのだが、おそらく同様のことがあると思う。業務アプリと一括りにするのはよくないし、オブジェクト指向が向いている場合もあると思う。

まあ、結論としては、
1.多くの人がOOと思っているのはOOではない
2.ORマッピングツールよりもSQLが好き
という単純にそれだけのことかな。

関連記事
スポンサーサイト

コメント

非公開コメント

プロフィール

dayan

Author:dayan
小職は、SE(システムエンジニア)を専門としておりますが、技術的な情報を中心に、それ以外に経済関連の日記、たわいもない日記も載せていきます。
[公式HPもよろしく!]

天気予報

-天気予報コム- -FC2-
リンク
ブロとも申請フォーム

この人とブロともになる

カテゴリー
最近の記事
ブログ内検索
最近のコメント
最近のトラックバック
RSSフィード
月別アーカイブ


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。