Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

4,673 views

Published on

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

Published in: Software
  • Be the first to comment

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 マスコットアイコン(本スライド左下)が残されている場合に限り、本作品(またそれ を元にした派生作品)の複製・頒布・表示・上演を認めます。 • 非商用目的に限り、本作品(またそれを元にした派生作品)の複製・頒布・表示・上演を認め ます。 • 本作品のライセンスを遵守する限り、派生作品を頒布することを許可します。

×