オブジェクト 指 向 開 発 論 2016 年 5 月 26 日 海 谷 治 彦 1
詳 細 設 計 のレビュー 目 次 アーキテクチャ 決 定 について 2
ICONIXの 全 体 手 順 テクニカル アーキテクチャ 3
動 機 : 予 備 設 計 のレビュー 現 時 点 で,ユースケース,ドメインモデル,ロバスト ネス 図 を 描 きました. これらに 整 合 性 があるかのチェックを 行 います. 整 合 性 をとること 自 体 が 目 的 ではなく, 整 合 性 をとりながら,それぞれに 欠 けてる 情 報, 間 違 った 情 報 を 直 していく,というのが 目 的 です. その 他,エンティティへの 属 性 の 付 加, システムの 全 ての 画 面 に 名 前 を 付 けることが 目 的 となります. 4
予 備 設 計 レビューガイドライン 1/2 1. ユースケース 毎 に,ユースケース 記 述 とロバストネス 図 の 刷 り 合 わせをしましょう. 蛍 光 ペンを 使 ったチェックが 有 効 です. ツールを 使 うなら,エクセルとastahでしょうか. 2. ロバストネス 図 中 の 全 てのエンティティが,ドメインモデ ルにあるか 確 認 し, 無 ければ 追 加 してください. 3. エンティティと 画 面 の 間 で,データの 流 れを 確 実 に 追 跡 で きるようにしなさい. ロバストネス 図 における B-C-E の 関 係 4. 代 替, 例 外 コースの 漏 れが 無 いか,チェックしてください. 特 に 例 外. 5. 各 ユースケース 記 述 が,アクターからの 対 話,システム からの 対 話 を 書 いてあるかチェックしてください. 特 にシステムが 主 語 のもの. 5
予 備 設 計 レビューガイドライン 2/2 6. ロバストネス 図 の 構 文 ルールが 守 られているか チェックしてください. 名 詞 - 名 詞 は 不 可 すなわち B-B B-E E-E は 不 可. 7. 技 術 者 以 外 ( 顧 客 や 営 業 等 )と 技 術 者 の 双 方 がレ ビューに 参 加 できるようにしてください. 双 方 が 理 解 できるユースケース 記 述 が 丁 度 良 い 抽 象 化 レベ ルのものになります. 8. ユースケースがドメインモデルとGUIの 用 語 で 記 述 されていることを 確 認 しなさい. 9. ロバストネス 図 でシーケンス 図 ( 次 回 ) 上 に 表 現 する ような 詳 細 レベルを 示 さないでください. 10. より 良 い 設 計 のために 後 述 の 6つの 手 順 に 従 って ください. 6
6つの 手 順 1. ロバストネス 図 がユースケース 記 述 に 合 致 して いるかを 確 認 する. 2. ロバストネス 分 析 の 規 則 に 従 っているか 確 認 す る. 3. ロバストネス 図 がユースケースの 論 理 的 な 流 れ に 注 視 しているかを 確 認 する. 4. 代 替, 例 外 コースがロバストネス 図 に 示 されてい るかを 確 認 する. 5. 図 がデザインパターン( 後 半 の 回 で 解 説 )に 固 執 しないようにする. 6. 図 が 詳 細 設 計 に 踏 み 込 んでいないかを 確 認 す る. 7
レビューの 例 A 1/3 顧 客 レビューを 書 く のユースケース. 以 下 では レビュー:E が, レビュー 記 入 ページ:B と 関 連 付 いてない. 要 は 入 れたレビューが 入 れ 物 であるEに 入 ってな い. 顧 客 レビューを 記 入 して 送 信 をクリックする レビューの 記 入 ページ 顧 客 レビュー 8
レビューの 例 A 2/3 ユースケース 記 述 を 良 く 思 い 出 すと, 顧 客 評 価 を 入 力 する レビューを 記 入 する の 二 種 類 があったが, 以 下 ではこれらを 示 せない. 加 えて,アクター-バウンダリ 間 の 名 前 も 変 更. 顧 客 送 信 をクリックする レビューの 記 入 ページ 記 入 する 顧 客 レビュー 9
レビューの 例 A 3/3 そこで, 記 入, 入 力 それぞれに 対 応 したコントロー ラを,それぞれに 導 入. レビューを 記 入 する 顧 客 送 信 をクリックする レビューの 記 入 ページ 顧 客 レビュー 顧 客 評 価 を 入 力 する 10
レビューの 例 B 1/2 顧 客 レビューを 書 く をさらにレビュー 以 下 では,クリックによって,3つのコントローラの どれが 機 能 するかわからない. 顧 客 送 信 をクリックする レビューを 記 入 する レビューの 記 入 ページ 顧 客 評 価 を 入 力 する 確 認 ページ 確 認 ページを 表 示 する 11
レビューの 例 B 2/2 ラベルの 位 置 を 変 えるだけで, 図 の 曖 昧 さが 排 除 された. 顧 客 レビューの 記 入 ページ レビューを 記 入 する 送 信 をクリックする 顧 客 評 価 を 入 力 する 確 認 ページ 確 認 ページを 表 示 する 12
レビューの 例 C コントローラーの 名 前 として, 単 に 表 示 する, 登 録 する とすると, 何 を 表 示 するのかわからない. 幸 運 にも,astah では, 表 示 する という 名 前 のコント ローラ( 実 体 はクラス)は 複 数 書 けない. よって,それぞれ, 内 容 に 応 じて, を 表 示 する 等 と 詳 しくかくのがよい. 書 籍 評 価 は 範 囲 内 か? No Yes 書 籍 レビューの 長 さはOKか? No レビューが 範 囲 外 の 値 になっている メッセージを 表 示 する レビューの 長 さが 不 適 当 である メッセージを 表 示 する レビュー 拒 否 ページ 13
レビューの 例 D 1/2 顧 客 レビュー と レビューを 審 査 する の 関 係. 当 面, 以 下 な 感 じだった. 二 つのユースケース 間 で 実 際 にレビューが,どの ように 受 け 渡 されるかが 未 指 定 のままである. 確 認 ページ<<include>> そしてシステムは 確 認 ページを 表 示 し,レ ビューを 追 加 するために モデレータに 送 る 顧 客 レビュー を 審 査 する 14
レビューの 例 D 2/2 ドメインモデルではユースケース 間 で 共 有 される データに 相 当 するエンティティクラスを 導 入 するこ とで, 前 述 の 点 を 明 確 にする. この 例 では, 審 査 待 ちのレビューをキュー( 待 ち 行 列 )に 置 くことにした. 確 認 ページ 顧 客 レビューキューを 待 機 レビューキューに 追 加 する システムは 確 認 ページを 表 示 し, 顧 客 レビューは 審 査 のために 待 機 レ ビューキューに 追 加 され る.(このキューはユース ケース 顧 客 レビューを 審 査 する で 処 理 され る. 待 機 レビューキュー <<include>> 顧 客 レビュー を 審 査 する 15
顧 客 レビューを 書 く 最 終 版 顧 客 セッション ログインしてるか? レビューを 書 く ボタンをクリック Yes No ログインする レビュー 記 入 ページを 表 示 する 書 籍 詳 細 ページ 顧 客 レビューを 記 入 する 顧 客 レビュー レビュー 記 入 ページ 書 籍 レビューの 長 さはOKか? Yes 顧 客 評 価 を 入 力 する レビューを 入 力 して 送 信 をクリック 顧 客 レビューに 書 籍 IDを 設 定 する No 書 籍 評 価 は 範 囲 内 か? 書 籍 確 認 ページを 表 示 する レビューの 長 さが 不 適 切 であるメッセージを 表 示 する Yes No 顧 客 レビューを 待 機 レビューキューに 追 加 する レビュー 拒 否 ページ 確 認 ページ <<include>> 評 価 が 範 囲 外 のメッセージを 表 示 する 待 機 レビューキュー 顧 客 レビュー を 審 査 する 対 応 するユースケース 記 述 は dotcampusより 参 照 のこと. 16
アーキテクチャとは? Architecture もともとは 建 築 用 語 システム アーキテクチャ,ソフトウェア アーキテク チャとも 呼 ばれる. 以 下 を 図 式 で 書 くことを 指 す 場 合 が 多 い. システム 内 のソフトウェア 部 品 間 の 論 理 的 な 構 造 システムが 動 くハードウェアと 通 信 路 上 のソフトウェア 部 品 の 配 置 位 置. レスポンスの 速 さ, 処 理 能 力, 信 頼 性 等 のシステ ムの 品 質 はアーキテクチャに 依 存 する 場 合 が 多 い. 17
ソフトウェアの 部 品 昨 今 のソフトウェアは 複 数 のプログラムで 構 成 され る 場 合 が 多 い. 例 ウエブサーバー,データベースサーバー,ウエブブ ラウザ(UI 担 当 ) また, 既 存 のライブラリやフレームワーク( 後 述 )を 使 うことも 多 い. 例 暗 号 関 係 部 品 (openssl 等 ),UIフレームワーク,アプ リケーションフレームワーク(cakePHPやPlay 等 ) 上 記 の 意 味 からプログラム,ライブラリ,フレーム ワーク 等 をソフトウェアの 部 品 と 呼 ぶ. 18
アーキテクチャの 例 以 降 にネット 書 店 のアーキテクチャを 示 す. ソフトウェア 部 品 間 の 依 存 関 係 部 品 の 配 置 図 メッセージの 流 れ 19
ソフトウェア 部 品 間 の 依 存 関 係 ビュー Spring Dispatcher Servlet 書 店 向 けのJSP コントローラー 書 店 のController 入 力 Validator モデル JDBC DAOインタフェース ドメインモデル 20
復 習 MVCについて Model-View-Controller の 略. オブジェクト 指 向 プログラミングで 習 ったかもしれない. アプリケーションを 作 る 際 に 上 記 の 三 つに 分 けて 設 計 すると 良 い という 指 針. Model アプリで 扱 う 業 務 や 活 動 のみを 扱 う 部 分. ショッピングサイトの 業 務 なら 商 品, 注 文, 顧 客 等 がコレに 相 当. 基 本,システムとは 関 係 ない 業 務 依 存 の 部 分. 主 に 普 通 のクラスやJavaBeans 等 で 実 現 される. View システムとしてユーザーと 相 互 作 用 する 部 分. 入 出 力. ウエブアプリならウエブページに 相 当 し, 主 にJSPが 担 当. Controller ModelとViewを 関 連 付 け, 業 務 の 進 行 を 制 御 する 部 分. 主 にServletが 担 当. 21
プレゼンテーション 層 部 品 のレイヤー 別 の 関 係 Webブラウザ Webとアプリケーション 層 Spring Dispatcher Servlet 書 店 向 けJSP 書 店 のController データアクセス 用 コンポーネント データベース mysql 22
メッセージの 関 係 書 店 アプリのコンテクスト JSP モデル 設 定 を 照 会 レスポンスの 生 成 Servlet リクエストを 渡 す 書 店 コントローラ 使 う クエリ 生 成 する DAO リクエストの 送 信 ModelとViewを 返 す ブラウザ Spring/JDBC データベース 23
参 考 サーバーサイドの 主 な 役 割 検 索, 計 算,データ 保 存 や 共 有, 手 順 のナビゲー ト, 画 面 データの 生 成 等 送 受 信 計 算 生 成 検 索 データ 保 存 24
参 考 共 通 点 JSP どちらもサーバーで 実 行 される. JSP and Servlet すなわち,クライアントに 届 いた 時 にはただのHTML コレがJavaScriptとの 大 きな 違 い HTMLにJavaっぽいものを 埋 め 込 む. 雰 囲 気 はJavaScriptに 似 てるが, 上 記 のようにサーバー 内 で 実 行 される. phpはコレに 考 え 方 が 似 ている. オリジナルのクラス 等 を 作 成 する 場 合 は,Servletとの 連 携 が 必 要. Servlet Javaそのもの. mainメソッドは 書 かないのが 普 通. そもそも スーパークラスがフレームワーク 的 にできている. Javaのprint 機 能 でHTMLの 行 を 表 示 しないと,クライアント 側 で 解 釈 不 能 になる. どちらかといえば,JSPのサブルーチン 的 に 使 われるのが 普 通. 25
参 考 <HTML> <HEAD> <TITLE> JSP loop </TITLE> </HEAD> <BODY> <ul> <% int i; for(i=0; i<10; i++){ %> <li> number <%= i*3 %> <% } %> </ul> </BODY> </HTML> サンプル // Simple Servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Another extends HttpServlet { } public void doget( HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<html>"); out.println("<head>"); out.println("<title>another!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>another!</h1>"); out.println("</body>"); out.println("</html>"); } 26
枠 組 み orz ライブラリの 逆 フレームワークとは? ライブラリは 全 体 (main 関 数 的 なものを 含 む)は 自 身 で 作 り, 部 分 は 他 人 の 作 ったものを 流 用 する. C 言 語 の 数 値 計 算 ライブラリ lm Javaの 各 種 API フレームワークは 全 体 は 他 人 が 作 ったものを 使 い, 部 分 を 自 分 でカスタマイズする. 多 くのフレームワークでは 業 務 の 大 まかな 流 れが 想 定 されている. サーバーサイドのアプリケーションフレームワーク. (spring や cakephp 等 ) 27
Springについて Javaベースのアプリケーションフレームワーク ServletとJSPを 使 う. 普 通 のJavaのクラス(POJO: Plain Old Java Object) をドメインモデルとして 使 いプログラミングできる. DAO (Data Access Object)も 提 供 する. データベースへのアクセスを 抽 象 化, 一 般 化 しているク ラスのこと. データベースの 詳 細 (SQL 等 )や 種 類 の 違 い(MySQL or postgresql 等 )を 吸 収 してくれる. 28
アーキテクチャ 決 定 Not TO DO! 1. ハードウェアやそのコストを 考 えずにアーキテク チャを 決 定 する. 2. いままでこうやってきたから ということで 先 祖 伝 来 のアーキテクチャを 使 い 続 ける. 3. スケーラビリティを 考 慮 しない. 4. セキュリティを 考 慮 しない. 5. 市 場 や 流 行 にふりまわされない. 29
続 き 6. プロジェクトの 要 求 に 基 づきアーキテクチャの 目 的 を 明 確 化 できない. 7. 設 計 に 入 る 前 にアーキテクチャについて 必 要 以 上 に 長 い 時 間 を 費 やす. 8. システムをテストする 方 法 についての 考 慮 をする のを 忘 れる. 9. ユーザーが 必 要 としていることを 考 慮 せずに, アーキテクチャを 定 義 しようとする. 10. アーキテクチャの 構 築 を 一 切 行 わない. 30
本 日 は 以 上 31