Transcript CBSDとDOA
DOA UML ComponentsとDOAの比較 OOAとほぼ同じフロー。 コーポレート 概念データモデル UML Components 業務フロー 要件定義 ビジネスプロセス ト ッ プ ダ ウ ン ビジネス概念モデル システム構想 ユースケース 概念データモデル 論理データモデル (トップダウン) 仕様 ビジネスタイプモデルの 作成 ビジネスインタフェースの 識別 システムインタフェースの 識別 インタフェースと操作の洗 練 コンポーネント仕様とアー キテクチャの洗練 コンポーネント仕様 操作と事前/事後条件の 定義 コンポーネント仕様とアー キテクチャ 正規化 論理データモデル (ボトムアップ) CRUD分析 DFD図 コンポーネント相互作用 インタフェース情報モデル の定義 マージ (ボトム アップを ベースに) コンポーネント識別 初期のコンポーネント使用 とアーキテクチャの策定 ビジネス操作の識別 画面・帳票 ボ ト ム ア ッ プ ユースケース分析と等価 ビジネス概念モデル導出と等価 ■プロセス上の違い ・DOAのトップダウンのアプローチはOOAのデータモデリングとほぼ同じな ので問題がなさそう。 ・DOAではボトムアップをマージする形で進めていく。ここはかなり現実的な 点である。日本での開発では画面や帳票が先行してでてくることが多い(EA のような企業レベルのデータモデリングをせずに、小手先の既存業務フロー のシステム化が多いから?)ため、ボトムアップ手法が非常に有効。 ⇒画面や帳票にあたるものがユースケースでは?ユースケースで等価な検 討が可能か。 全体的にプロセスとしての等価性は既に確保できているように見える。 最初にDOA、OOAを意識せずに作成した概念モデル、論理モデルを元に 「オブジェクト世界での表現」「RDBの表現」への変換を定義しておけば、 早い段階でERモデルも明らかになるのでは? 概念モデル A 1 1 B A 1 * B A * 1 B A * * B ER サ で並 ブ も行 で 現し オモ実て デ がブルは進 ジ 多 をこめ いェ クメんる トイな? モン感大 デ、じ変 ル 。? 各多重度ごとのERモデル、オブジェクトモデルで の表現方法はORマッパーなどの普及でだいた いパターン化されている。 論理ERモデル オブジェクトモデル (インタフェース情報モデル) 物理ERモデル Java実装のデータモデル (インタフェース情報モデル) UML ComponentsではERは後付け?性能は 大丈夫なのか?オブジェクトモデルだけのトッ プダウンで考えると、知らぬ間に「正規化し過 ぎ」の現象が起きたりしないか? メインをオブジェクトモデルで考えつつも、、論 理ERモデルのレベルで早期にERモデルを作 成し、非機能要件を満たせるか確認する必要 があるかもしれない。 ※ ERモデル → オブジェクトモデル というのが通例なので、O-Rマッピングで大きく 苦しむことはないが・・・・・ UML Components で オブジェクトモデル → ERモデル を最後にどかんとやったときに本当にうまくでき るのか心配な感じがするので、こういうことを考 えています。 ■モデリング上の違い(インピーダンスミスマッチなど) ・DOAにおける正規化のプロセスは、トップダウンでモデリングするOOAで は自然に組み込まれていると考えられる。 ・オブジェクトにおける集約や関連を、RDBにおける外部キー制約ととらえれ ばほぼ大丈夫?オブジェクト世界の汎化/特化などができてた時に考慮す る必要がありそう。 ・UML Componentsではデータモデルのやりとりを「id」をベースにやるので、 この点もRDBにおける主キーに置き換えやすく親和性は高いと考えられる。 ・オブジェクトモデルとRDBの違いはS2JDBCなどO-Rマッパーを使用すれば 実装上の手間は減らせる。 成果物の俯瞰 UML Componentsの簡易化 要件定義 ビジネスプロセス 不要 ビジネス概念モデル システム構想 不要 ユースケース図 ユースケース記述 仕様 コンポーネント識別 ビジネスタイプモデル図 ビジネスタイプモデルの作成 ビジネスインタフェースの識別 ビジネスインタフェースモデル図 システムインタフェースの識別 システムインタフェースモデル図 初期のコンポーネント使用とアーキテクチャの策定 中間生産物 不要 コンポーネントアーキテクチャ図 コンポーネント相互作用 ビジネス操作の識別 相互作用図 インタフェースと操作の洗練 洗練したインタフェースモデル コンポーネント仕様とアーキテクチャの洗練 コンポーネントオブジェクトアーキテクチャ 不要 不要 コンポーネント仕様 インタフェース情報モデルの定義 操作と事前/事後条件の定義 コンポーネント仕様とアーキテクチャ インタフェース情報モデル OCL ? データモデルだけでよいのでは? ビジネスIF、システムIF、両方必要か? 機能仕様書の代替とする。 Seasar2を用いたアーキテクチャ ・画面入力項目 ・入力チェック SAStruts JSP N1 S2JDBC Form Entity 0…1 1 Action ・ユースケースと1:1 ・実行メソッド ・Service呼び出し ・画面遷移 ・セッション管理 1 N <<DI>> <<DI>> <<DI>> 1 1 Table 1 Logic <<DI>> 1 ・導出項目 ・区分値(定数) ・拡張プロパティ <<DI>> 0...1 Service <<DI>> <<DI>> N DTO ・画面出力項目 (読み取り専用プロパテ ィ) ・JSPと1:1+α 1 1 Helper ・Entityと1:1 ・DBに関するロジック ・ビジネスロジック ・DTOと1:1 ・データ変換 UML Componentsを考慮 状態を持つのはActionが呼び 出すHttpSessionと、DBのみ。 性能的な実用性からビジネス 層はステートレス。 →クラス図に必要か? ・画面入力項目 ・入力チェック SAStruts JSP N1 S2JDBC システム IF Form 0…1 1 ビジネス IF Facade Logic ・導出項目 ・区分値(定数) ・拡張プロパティ Entity 1 1 Table 1 <<DI>> 1 <<DI>> Action ・ユースケースと1:1 ・実行メソッド ・Service呼び出し ・画面遷移 ・セッション管理 1 N <<DI>> <<DI>> <<DI>> <<DI>> 0...1 Service <<DI>> <<DI>> N DTO ・画面出力項目 (読み取り専用プロパテ ィ) ・JSPと1:1+α 1 1 Helper ・Entityと1:1 ・DBに関するロジック ・ビジネスロジック ・DTOと1:1 ・データ変換 ■アクセス方法の問題 UML ComponentsとDOAのビジネスインタフェースの切り方の違い(SELECTの場合) DOAとOOAのハイブリッドでよくあるパターン(トランザクションスクリプト) Reservation 予約詳細を取得する 予約詳細を取得する システムインタフェース ビジネスインタフェース SQL Hotel JOINを使った大きいSQL Customer UML Components での標準的なDBアクセス(ドメインモデル) ビジネスインタフェース IReservationMgt SQL 性能:高 再利用性:低 Reservation 予約詳細を取得する システムインタフェース ビジネスインタフェース IHotelMgt SQL Hotel ビジネスインタフェース ICustomerMgt SQL Hotel JOINにあたるデータの くみ上げはシステムイン タフェースがやる 性能:悪 再利用性:高 JOINを使わない小さいSQL ビジネスインタフェース+SQLの粒度を小さくすることが再利用の肝と考えられる。DOAの大きいSQLでのアクセスパターンはビジネスインタフェースそのものの粒 度が大きくなるため、ビジネスインタフェースの再利用性が低くなる。 しかし、コンポーネントベース開発ではコンポーネント単位での再利用性が確保できればよいから、ビジネスインタフェース単体の再利用性にこだわる必要はないと も考えられる。 性能と再利用性のどちらを取るかのアーキテクチャの選択の一環とも考えられる。 なお、ここで想定する「よくあるSIerでの要件」としては、「既存業務など、項目が既に決まっている」「DB性能を求められる」などである。 ただし、コンポーネントベース開発で得られるメリットをDOAベースの手法でも得られる可能性は残る。 Reservation 予約詳細を取得する 予約詳細を取得する システムインタフェース ビジネスインタフェース SQL Hotel JOINを使った大きいSQL Customer なお、この場合、コアタイプの概念が崩れていることに注目する必要がある。本来、コアタイプごとに分割したビジネスインタフェースが一つになっている。 ビジネスインタフェースを、「コアタイプを中心に取り出すインタフェース」と定義しなおすと、ビジネスインタフェースの役割はシステムインタフェースに近く なる。 本来ビジネスインタフェースが担っていた役割は、その後ろにあるDAOが担い、一部のデータ組み合わせロジックはSQLに混入する。 DOAのパターンでは、システムインタフェースとビジネスインタフェースが1対1になりやすいため、この範疇だけだとシステムインタフェースは不要とも考 えられる。 その場合、1つのビジネスインタフェースとDAO群で1つのコンポーネントを構成するような形式になる。1ユースケースごとに1ビジネスインタフェース。結 局、ユースケースにかなり依存したモデルになってしまう。ただ、操作の粒度が大きいため、事前条件はOOAよりもシンプルになるのではないかと考え られる。 これでは、UML Components のメリットが得られなくなってしまう。何かよい解決策はないか? (ユースケース依存になる弊害として、結局、再利用性が低くなる、ということ。とはいえ、DBとのやりとりを意識しているので、ビジネスインタフェースや DAOのメソッドの再利用はある程度見つけられる見込みはある。(現状やっている開発がこんな感じ。) 修了制作の方向性として、このようなよくあるDOAパターンとUML Componentsの違いを評価して、再利用性がどれだけ変わってくるかを評価して、 DOA側に倒れた現状の開発をよりOOA側に引き寄せる根拠とする案も考えられる。 UML ComponentsとDOAのビジネスインタフェースの切り方の違い(INSERT/UPDATE/DELETE/SELECTFORUPDATEの場合) ビジネスインタフェースからDAOをたくさん呼ぶ DOAとOOAのハイブリッドでよくあるパターン(トランザクションスクリプト) 予約詳細を取得する SQL Reservation SQL Hotel 予約詳細を取得する システムインタフェース ビジネスインタフェース SQL Customer UML Components での標準的なDBアクセス(ドメインモデル) ビジネスインタフェース IReservationMgt SQL 性能:高 再利用性:低 Reservation 予約詳細を取得する システムインタフェース ビジネスインタフェース IHotelMgt SQL Hotel ビジネスインタフェース ICustomerMgt SQL Hotel JOINにあたるデータの くみ上げはシステムイン タフェースがやる 性能:高 再利用性:高 INSERT/UPDATE/DELETEなどの更新系ではJOINなどはできないので、必然的にSQLの発行は分かれる(例外としてBulkUpdateなどはあるが)。 この場合は、1つのビジネスインタフェースで複数のDAOを呼び出して全て処理してしまうか、ビジネスインタフェースから分けるか、という選択になる。 SELECTと比べて、後者を選択できる条件は多い。 トランザクションスクリプトアーキテクチャとドメインモデルのどちらを選択すべきか、ソフトウェアパターンのアーキテクチャ評価の手法を使って ケースによる使い分けを検討するのはどうか。 評価軸: 規模、DBアクセスの複雑さ、性能要件の厳しさ、該当コンポーネントの再利用見込み トランザクションスクリプト的なアプローチから始めると、ある規模以上になったときに、ビジネスインタフェースの実装が複雑に巨大になる、共 通化が困難、などの現状・ニーズがあるので、ドメインモデル的アプローチが必要になる損益分岐点のようなものがあるのではないかと推測 している。 課題 プロセス軽減化の方法は? ERモデルとの関連は? OCLをどの程度使うか? アーキテクチャの選択は? 「1システム」の定義は?