見出し画像

はじめての設計をやり抜くための本【設計編】第4章内部設計の手法②画面プログラム設計

 ■Spring Bootでの開発
Model、View、Controllerの役割
[Model]
・ビジネスロジックとエンティティを合わせたもの。エンティティとはDBのデータをオブジェクトで表現したもの
[View]
・GUIの画面
・WebではJSPやThymeleafやHTML、HTMLを表示するWebブラウザがViewにあたる。ViewではModelの情報を表示する。
[Controller]
・ControllerはModelとViewを制御する。画面からのリクエストを適切なModelに仲介しModelの結果をViewに表示する。

●Spring Bootでプログラミングするもの
・Controllerクラス
・Entityクラス
・Thymeleafファイル

Spring BootにおけるMVC

■画面遷移図からControllerの抽出
画面遷移でリンクかフォームになっている画面遷移はControllerが呼び出されるか静的なHTMLなどへの画面遷移である。画面遷移からControllerを全て洗い出し、Controller一覧にまとめる。

画面遷移図の例


検索ボタンによる検索画面から一覧画面への遷移と、戻るリンクによる一覧画面から検索画面への遷移と、戻るリンクによる一覧画面から検索画面への遷移である。検索ボタンによる遷移は普通はボタン(<input type = "submit"…..>)とフォーム(<form action="…"…>)で実現される。一覧画面から検索画面へ戻るリンクの遷移もリンク(<a href="…"…>)で実現される。


■Controller設計
Controller一覧に挙がっているそれぞれのControllerで行う処理を設計する。
[Controllerで行う処理]
・リクエストパラメーターのバリデーション
・リクエストパラメーターの取得
・ビジネスロジックの呼び出し
・レスポンスへのデータ設定
・画面遷移

[設計方法]
・Controllerの設計ではController設計書をUMLのシーケンス図で作成する。
しかし、UMLのシーケンス図では分岐が記述しにくい場合があるので簡単に記述するのであればアクティビティ図でも良い。
・文章で記述すべきものがあれば図にメモを残す。
※補足資料を作成するのはいいが、情報が散乱しないように注意する。
・Controllerクラスのインスタンスは複数のリクエストで共有される。同時に同じControllerが呼び出されれば同じControllerクラスのインスタンスが同時に実行される。Controllerクラスはスレッドセーフ(あるコンピュータプログラムを複数のスレッドで並行して実行しても、問題が生じない仕様や設計になっていること。)であることが重要。簡単に言うと、単純にメンバー属性を作成しなければ良い。Controllerは状態を持たないように設計する。                                 


■画面共通部品の設計
画面設計でUI設計ポリシーを作成する。共通ヘッダーや共通フッター、共通メニュー、画面表示項目のフォーマットを定義した。これらを共通部品として設計する。
共通ヘッダーや共通フッター、共通メニューなどはThymeleafHTMLファイルを作成する。そして各画面からそれらの共通ThymeleafHTMLファイルを呼び出す。


■HTTPセッションの設計
HTTPセッションはHTTPというステートレス(システムが現在の状態を表すデータなどを保持せず、入力の内容によってのみ出力が決定される方式)なプロトコルで状態を保持するための仕組み。
・この仕組みを使用しなければHTTPリクエストが来るたびに全く別のリクエストとして処理される。その場合、ログイン認証などの処理ができない。
・HTTPリクエスト間に関連を持たせるにはリクエストに同じIDを付与すれば良い。このIDをセッションIDと呼ぶ。HTTPセッションはWebブラウザからのリクエストごとにこのセッションIDをリクエスト情報に付与することで実現する。例:Cookie
Cookieは書き出したサーバーのドメイン情報を持ち、同じドメインに対してしか送信しない。よって他のサーバーが書き出したCookieを参照することはできない。
・このようなHTTPセッションは、Webシステムを開発する上で必須の機能である。HTTPセッションの設計では、HTTPセッションにどのような情報を格納し、その情報がどこで作成されて、どこで破棄されるかというセッション情報のライフサイクルを設計する。
・セッション情報はWebアプリケーションによって、メモリ中に保持・管理されている。サーバー間でセッション情報の共有を行うことが必要である。
最近ではRedisなどのメインメモリキャッシュを使用してサーバー間でセッション情報を共有することが一般的である。Spring Bootを使用している場合、Spring Sessionを利用することで簡単にセッション共有できる。

[注意点]
セッション共有を行う場合は、セッション情報があまりに大きいと共有するための処理に時間がかかりすぎる。大きなセッション情報をDBに格納したり通信で送ったりするには時間がかかるためである。セッション共有する場合はセッションに格納する情報は最低限のものにする必要がある。


第4章内部設計の手法②画面プログラム設計を終了します。
次回は③ビジネスロジックプログラム設計について記載します。


この記事が気に入ったらサポートをしてみませんか?