Application Design 勉強会 #10

Application Design 勉強会 #10

Proxyパターンとの向き合い方

A445824f9bb334ec104f5c1c7b67fee2?s=128

Kazuki Chigita

October 02, 2019
Tweet

Transcript

  1. APPLICATION DESIGN 勉強会 26章 THU OCT 3RD KAZUKI CHIGITA

  2. 課題 ソフトウェアが境界を通過することは難しい.

  3. 課題 ソフトウェアが境界を通過することは難しい. ー 意味のあるまとまり間のやりとり ーネットワーク(TCP)やデータベース等の外部との接続

  4. 課題 ソフトウェアが境界を通過することは難しい. ー 単一責任の原則(SRP) ー 閉鎖性共通の原則(CCP) ー 依存関係逆転の原則(DIP) ービジネスルールと外的ルールの分離 これらができない傾向にある

  5. 例(ショッピングサイトのモデル) 上のモデルに対してItemを追加するような操作をする.

  6. 前提 (本当は全部data class なんだけどシンタックスが壊れたのでつけてない)

  7. 例(ショッピングサイトのモデル) 上のモデルに対してItemを追加するような操作をする.

  8. 例(ショッピングサイトのモデル)

  9. 例(ショッピングサイトのモデル)

  10. 例(ショッピングサイトのモデル) 強結合

  11. 例(ショッピングサイトのモデル) SPR & CCP 違反

  12. 例(ショッピングサイトのモデル) SPR & CCP 違反

  13. 例(ショッピングサイトのモデル) SPR & CCP 違反 DIP 違反

  14. PROXYパターンの適用

  15. PROXYパターンの適用 Interfaceに切り出す.利用者はこれを使う. DBの実体. DB操作を担う Productのドメイン に関する処理

  16. PROXYパターンの適用 Interfaceに切り出す.利用者はこれを使う. DBの実体. Productのドメイン に関する処理 DB操作を担う

  17. PROXYパターンの適用 Interfaceに切り出す.利用者はこれを使う. DBの実体. Productのドメイン に関する処理 DB操作を担う

  18. PROXYパターンの適用 Interfaceに切り出す.利用者はこれを使う. DBの実体. Productのドメイン に関する処理 DB操作を担う

  19. PROXYパターンの適用 Interfaceに切り出す.利用者はこれを使う. DBの実体. Productのドメイン に関する処理 DB操作を担う これ無駄では?→

  20. 【再掲】例(ショッピングサイトのモデル)

  21. 【再掲】例(ショッピングサイトのモデル) 個に対する操作にはあまり意味をなさない.

  22. 【再掲】例(ショッピングサイトのモデル) もとの課題でもあった関係性の強結合を解決する.

  23. PROXYパターンの適用2

  24. PROXYパターンの適用2 処理の委譲が行われている

  25. PROXYパターンの適用2 DBに関する固有の処理 ビジネスルールに関する処理 使用者に対するinterface

  26. PROXYパターンまとめ ーProxyパターンはビジネスルールとデータベースの処理を完全に切り離すことができる ーここでは例示としてDBを扱ったが外部のAPIに対しても同じように扱うことができる ーまた,SRP,CCP,DIPの各問題をクリアしている解決策とも言える ProxyはDBとimplの両者に紐付いており,変更の影響を強く受ける 【問題点】

  27. 多重継承できる言語なら Stairway to Heaven Patternの適用が可能

  28. 多重継承できる言語なら Stairway to Heaven Patternの適用が可能 ←DBに対する知識を持っている.read(). write()のみの抽象クラス

  29. 多重継承できる言語なら Stairway to Heaven Patternの適用が可能 ←DBに対する知識を持っている.read(). write()のみの抽象クラス ビジネスルール DB知識

  30. 多重継承できる言語なら Stairway to Heaven Patternの適用が可能 ←DBに対する知識を持っている.read(). write()のみの抽象クラス ビジネスルール DB知識 ←適切に分離し,影響を最小限にする

  31. DBと戦う他のアプローチ ーExtension Objectパターン(28章) ーVisitorパターン(28章) ーDecoratorパターン(29章) ーFacdeパターン ー DatabaseFacadeを作成し,ビジネスロジックぽいものと DB知識っぽいものを分離して実装 ー

    Façadeとそれに紐づくものが強結合してしまう問題点があるがリファクタしやすい.
  32. 参考文献 ロバート・C・マーチン他. アジャイルソフトウェア開発の奥義第二版 オブジェクト指向開発の真髄と匠の技. SBクリエイティブ,2008