Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Application Design 勉強会 #10

Application Design 勉強会 #10

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

Kazuki Chigita

October 02, 2019
Tweet

More Decks by Kazuki Chigita

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  14. PROXYパターンの適用

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  23. PROXYパターンの適用2

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  31. DBと戦う他のアプローチ
    ーExtension Objectパターン(28章)
    ーVisitorパターン(28章)
    ーDecoratorパターン(29章)
    ーFacdeパターン
    ー DatabaseFacadeを作成し,ビジネスロジックぽいものと
    DB知識っぽいものを分離して実装
    ー Façadeとそれに紐づくものが強結合してしまう問題点があるがリファクタしやすい.

    View Slide

  32. 参考文献
    ロバート・C・マーチン他.
    アジャイルソフトウェア開発の奥義第二版
    オブジェクト指向開発の真髄と匠の技.
    SBクリエイティブ,2008

    View Slide