Springを使ったwebアプリにリファクタリングしよう

1,826 views

Published on

Spring Day 2016のハンズオンの座学資料です。

Published in: Software
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,826
On SlideShare
0
From Embeds
0
Number of Embeds
1,503
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Springを使ったwebアプリにリファクタリングしよう

  1. 1. 1 【ハンズオン】 Spring を使った Web アプリに リファクタリングしよう 2016/11/18 日本 Spring ユーザ会 土岐 孝平
  2. 2. 自己紹介 • 土岐 孝平 ( とき こうへい ) • Spring を使用したシステム開発の支援 • Java や Spring の研修の講師 • 資格 – Spring Professional – Spring Web Application Developer • 書籍の執筆 2 [ 改訂新版 ]Spring 入門
  3. 3. ハンズオンの概要 • Servlet ・ JDBC を直接使ったアプリを、 Spring を使ったアプリにリファクタリングする • プログラムが洗練されて、生産性が上がること を実感する • Spring が行ってることを知る – 洗練された部分≒裏で Spring が働く部分 3
  4. 4. アプリの題材 • 顧客管理アプリ 4 参照系 更新系
  5. 5. アプリの構造 ( 現状 ) 5 web.xml DB ブラウザ JSP ファイル Customer XxxServlet Customer ServiceImpl Customer DaoImpl Customer Service Customer Dao Customer JDBC JDBC プレゼンテーション層 サービス層 データアクセス層
  6. 6. 問題点 • データアクセス層 – リソースの取得・解放のコードが冗長 • サービス層 – トランザクション制御のコードが冗長 • プレゼンテーション層 – リクエストのマッピングが面倒 – 入力チェックのコードが複雑 • その他 – 下位の層の具象クラスに依存 6
  7. 7. リソースの取得・解放のコードが冗長 • sample.customer.dao. CustomerDaoImpl クラス 7 データアクセス層
  8. 8. トランザクション制御のコードが冗長 • sample.customer.service. CustomerServiceImpl 8 サービス層
  9. 9. リクエストのマッピングが面倒 • WEB-INF/web.xml 9 プレゼンテーション層
  10. 10. 入力チェックのコードが複雑 • sample.customer.servlet. CustomerEditServlet 10 プレゼンテーション層
  11. 11. 下位の層の具象クラスに依存 • sample.customer.service. CustomerServiceImpl 11 その他
  12. 12. 【演習】 Spring を使って解決しましょう • どのように解決されるか、演習を通して理解しましょう • 演習手順は github にアップされています – https://github.com/KouheiToki/jsug-handson-20161118 • 演習時間: 80 分 – 目安 • 躓いたら、講師陣にお気軽にお声掛けください 12 初心者 中級者 参照系の機能 80 分 45 分 更新系の機能 50 分 35 分
  13. 13. 改善点 • データアクセス層 – DB 接続・切断のコードなくなった • サービス層 – トランザクション制御のコードがなくなった • プレゼンテーション層 – リクエストのマッピングが簡単になった – 入力チェックが簡単になった • その他 – 下位の層の具象クラスに依存しなくなった 13
  14. 14. リソースの取得・解放のコードがなくなった • sample.customer.dao. CustomerDaoImpl クラス 14 データアクセス層
  15. 15. トランザクション制御のコードがなくなった • sample.customer.service. CustomerServiceImpl 15 サービス層
  16. 16. リクエストのマッピングが簡単になった • sample.customer.controller.CustomerShowController 16 プレゼンテーション層
  17. 17. 入力チェックが簡単になった • sample.customer.entity.Customer 17 プレゼンテーション層
  18. 18. 下位の層の具象クラスに依存しなくなった • sample.customer.service. CustomerServiceImpl 18 その他
  19. 19. その他ポイント • Bean のコンフィグレーション – コンフィグレーション方法の種類と使い分け • データアクセス – コネクション・トランザクション周りの仕組み • Spring MVC – 画面周りの処理の流れ • Spring Boot – Spring Boot が行っていること 19
  20. 20. コンフィグレーションの方法 • コンフィグレーションの方法は3種類から選べ ます – XML – アノテーション – JavaConfig 20 n のコンフィグレーション DI コンテナ : Foo 結果は同じ ※ DI コンテナが   管理するオブジェクトのことを    Bean という
  21. 21. 一般的と思われる使い分け • 業務個別の Bean(Controller 、 Service 、 Dao) はアノテーション – Bean の数が増えてもメンテナンスが楽 • 裏方の Bean は XML もしくは JavaConfig – 環境ごとに Bean 定義を用意&一元化できて切替が容易 – サードパーティのクラスにアノテーションは付けれない 21 : Controller : Service : Dao : Transaction Manager : DataSource : View Resolver 本番用 テスト用 業務個別 裏方 n のコンフィグレーション : Transaction Manager : DataSource : View Resolver
  22. 22. コネクション・ トランザクション周りの仕組み • コネクションの取得・解放、トランザクションの開始・終了は Spring が行う – アプリで上記のコードは出てこない – コネクションを引数で渡さなくてよい 22 foo : Controller : Proxy @Transactional : Service : Dao :データア クセス機能 foo bar baz SQL ThreadLocal : Connection connect 、  begin commit 、  close データアクセス
  23. 23. • HttpServlet を継承した DispacherServlet が全体 の処理を制御している 画面周りの処理の流れ 23 Controller Model Dispatcher Servlet Handler Mapping Handler Adapter View Resolver View ブラウザ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧⑨ Controller と メソッドを 特定 引数の値を 用意 View の形式・ ファイルを特 定 全体の処理 を制御 Spring MVC
  24. 24. Spring Boot が行っていること • 必要な Jar ファイルのダウンロードや、裏方の Bean のコンフィグレーショ ン、組込サーバ (Tomcat) の実行を自動で行ってくれる • 業務個別の Bean のプログラムの作りは、 Boot を使っても使わなくても変 わらない • 組込じゃない Tomcat にデプロイすることも可能 24 : Controller : Service : Dao 裏方の Bean : Tomcat 組込サーバ 必要な Jar ファイル Spring の jar JPA の jar JUnit の jar ・・・ Boot が用意 業務個別の Bean ・・・ Spring Boot Tomcat の jar : Transaction Manager : DataSource : View Resolver 接続先などの プロパティ 今回 使用した部分
  25. 25. さいごに • 書籍を購入して、知識を広げましょう • おすすめの書籍 25 [ 改訂新版 ]Spring 入門 Spring 徹底入門
  26. 26. 26 ご清聴ありがとうございました
  27. 27. 27 ライセンスについて • JSUG マスコットアイコン(本スライド左下)が残されている場合に限り、本作品(またそれ を元にした派生作品)の複製・頒布・表示・上演を認めます。 • 非商用目的に限り、本作品(またそれを元にした派生作品)の複製・頒布・表示・上演を認め ます。 • 本作品のライセンスを遵守する限り、派生作品を頒布することを許可します。

×