コードを書くより読む方に苦労しているので試行錯誤のメモを残しておこうかと思います。
ポイント
大→小の順番で読む。
要件定義書 > 設計書 > ディレクトリ構造 > ファイル名 > コード
Struts2を読んでみた
なんで今さらStruts2なのかというと、次に行く現場がStruts使っているから。
アーキテクチャ図を見る
・Strut2のアーキテクチャ
1. HTTPServletRequestからのリクエストが来たらフィルターを通りつつ、FilterDispatcherを呼ぶ。
2. FilterDispatcherはActionMapperを参照。
3. Actionを呼ぶ必要があると判断したら、FilterDispatcherはActionProxyに処理を委任する。
4. ActionProxyはConfigrationManagerを通じてstruts.xmlを参照し、呼び出すActionクラスを見つける。
5. 次に、ActionProxyはActionInvocationインスタンスを生成する。
6. ActionInvocationはinvoke()メソッドを再帰的に実行し、Interceptorを繰り返し呼び出す。
7. Interceptorが全て実行されたら、Actionが実行される。
8. Result(レスポンス)が作成される。
9. Resultには各種のTemplate(JSP、FreeMaker…etc)が適用される。
10. そして、Interceptorが先ほどとは逆順で実行される。
11. 最後にweb.xmlによって構成されたフィルターを通ってレスポンスを返す。
※なお今はFilterDispatcherは非推奨でStrutsPrepareAndExecuteFilter推奨らしい。
・参考
https://struts.apache.org/core-developers/big-picture
Struts 2 Architecture and Fundamentals – Anitech Consulting Services Pvt Ltd.
Struts 2 Architecture and Flow - javatpoint
パッケージ図を描く
主要なパッケージを見つけるためにパッケージ図を書きます。
数字は参照数。
シンプル版は部品の依存関係はviews以外省いた物。
参照される数からして恐らくdispatcherパッケージがメイン。発送係という意味。
viewsも参照されているが、画面関連なので中心ではなさそう。
utilityは役に立つものという意味。部品っぽい。
componentsは構成要素という意味。これも部品っぽい。
configは設定。
conversionは変換。
factoryは参照・被参照0。
interceptorはdispatcherに強く依存していて22。dispatcherからも1依存。
resultはレスポンス関連と思われる。
※追記
interceptor
Actionが実行される前にinterceptorがリクエストを横取りして色々実行する。
例えばバリデーション・例外処理・セッションの作成など。
インターセプターの定義はstruts-default.xmlにあります。
何を実行しているかは下記サイト。
Struts 2入門(4)~インターセプターという仕組み~ (1/4)|CodeZine(コードジン)
主要クラスのクラス図を描く
- ActionProxy
- ActionMapper
- ActionInvocation
- ConfigrationManager
- Result
- Tag Subsytem
全部見るのはしんどいので特に重要そうなActionProxyとActionMapperを見る。
パッケージ図とクラス図を融合
先に書いたパッケージ図にクラス図で書いたものを追記。
その他参考本
プログラムの読み方がわかる本―「C」「C++」によるソースコードを読み解く!
プログラマーのためのソースコードを読む技術
ソースコードリーディングから学ぶJavaの設計と実装
Code Reading―オープンソースから学ぶソフトウェア開発技法
参考サイト
ソースコードを読むための技術(チートシート) - Qiita
コードリーディングのコツは極力コードを読まないこと|牛尾 剛|note
18:35から
【告白】未経験エンジニア転向した1年目はめちゃ病んでました。 - YouTube