$30 off During Our Annual Pro Sale. View Details »

クリーンアーキテクチャを活かす考察

kanayannet
November 14, 2021

 クリーンアーキテクチャを活かす考察

kanayannet

November 14, 2021
Tweet

More Decks by kanayannet

Other Decks in Programming

Transcript

  1. Gunma.web #43
    Gunma.web #43
    クリーンアーキテクチャ を活かす考察
    クリーンアーキテクチャ を活かす考察
    @kanayannet

    View Slide

  2. Agenda
    Agenda
    なぜ、やろうと思ったのか?
    考察
    活かし方
    まとめ

    View Slide

  3. なぜ、やろうと思ったのか?
    なぜ、やろうと思ったのか?

    View Slide

  4. チームリーダとして作業の割り振りを考える

    View Slide

  5. 依存関係の切り方をしっかりやらないと..
    各担当者間でやり直しが多くなる
    理由は...
    後述で出します。

    View Slide

  6. 依存関係をしっかりと切れれば...
    各担当者がハッピー
    deploy
    までスムーズ

    View Slide

  7. そんな事を考えていると
    ..
    そんな事を考えていると
    ..
    クリーンアーキテクチャに遭遇
    クリーンアーキテクチャに遭遇

    View Slide

  8. この本ですね
    この本ですね

    View Slide

  9. アーキテクチャのルールは
    アーキテクチャのルールは




    どれも同じである
    どれも同じである

    View Slide

  10. アーキテクチャのルールは
    アーキテクチャのルールは




    どれも同じである
    どれも同じである
    繰り返し
    大事なのでリピート

    View Slide

  11. 何がどう同じなのか?
    何がどう同じなのか?
    話していきたいと思います。
    話していきたいと思います。

    View Slide

  12. 考察
    考察

    View Slide

  13. この本実は
    ...
    この本実は
    ...

    View Slide

  14. とにかく前振りが長い!
    とにかく前振りが長い!

    View Slide

  15. どのくらい長いのかというと
    ...
    どのくらい長いのかというと
    ...

    View Slide

  16. View Slide


  17. 22
    章」\
    (^o^)


    22
    章」\
    (^o^)

    一体
    21
    章までは何を
    ...
    一体
    21
    章までは何を
    ...

    View Slide

  18. 前振りが結構重要部分
    前振りが結構重要部分

    View Slide

  19. 結論だけ聞いても「
    ???

    結論だけ聞いても「
    ???

    View Slide

  20. 前振りの中で印象深いものを
    前振りの中で印象深いものを




    いくつか話していきます。
    いくつか話していきます。
    すなわち、どのアーキテクチャにも共通する事

    View Slide

  21. アーキテクチャの重要性
    アーキテクチャの重要性
    変更コストによって計測できる
    そもそも「変更のない開発」ってあるの?
    初めに作ったものが「絶対」なんてのは...
    少なくとも自分は経験ない by @kanayannet

    View Slide

  22. 設計とアーキテクチャに
    設計とアーキテクチャに




    何も違いはない
    何も違いはない
    概要だろうが詳細だろうが、設計でありアーキテクチャであ

    よく分けて考える人がいるが...
    この本では「何も違いはない」と断言している

    View Slide

  23. UI,
    ビジネスルール
    , DB
    アクセス
    UI,
    ビジネスルール
    , DB
    アクセス
    ビジネスルールは独立させる事が可能
    それだけでリリースも可能
    DB
    やUI
    とは別のチームが開発可能

    View Slide

  24. ソフトウェアの振るまい
    ソフトウェアの振るまい
    簡単に振る舞いを変更できるため
    ソフト
    振る舞いを変更できないもの
    ハード(
    ウェア)
    と呼んだ
    既存の成果物を変更せず拡張できるようにすべき

    View Slide

  25. SRP
    SRP
    単一責任の原則
    モジュールはたったひとつのアクターに対して責務を負うべ

    単一の修正が一つだけではなく複数の修正を誘発してしま
    うのは違反

    View Slide

  26. OCP
    OCP
    オープンクローズドの原則
    拡張に対しては開き、修正に対しては閉じてなくてはならな

    既存の成果物を変更せず拡張できるようにすべき

    View Slide

  27. 変化しやすい具象クラスを参照しない
    変化しやすい具象クラスを参照しない
    変化しやすいクラスを継承すると
    変化のたびに変更が必要になる危険性があがる

    View Slide

  28. 循環依存は厄介
    循環依存は厄介
    あるコンポーネントの変更が 依存関係を循環し、自身にも悪
    影響を与えてしまう

    View Slide

  29. コンポーネント図
    コンポーネント図
    循環依存恐ければ図にしてみると良い

    View Slide

  30. 依存関係逆転
    依存関係逆転
    参照元と先を変更する事で循環依存を避けられる

    View Slide

  31. ....
    もっと色々あるが
    ...
    ....
    もっと色々あるが
    ...
    そろそろ本題に入ります。
    そろそろ本題に入ります。
    詳しくはみなさんも是非読んでみて..

    View Slide

  32. Clean Architecture
    Clean Architecture

    View Slide

  33. エンティティ
    エンティティ
    ビジネスを表すものとして独立させる
    これがないとビジネスとして成立しない最低限の単位

    View Slide

  34. ユースケース
    ユースケース
    自動化されたシステムを使用する方法を記述したもの
    アプリケーション固有のビジネスルールを記述する
    入力データを加工し適切なエンティティへの参照を実現する

    View Slide

  35. この二つの依存関係
    この二つの依存関係
    エンティティは自身を制御するユースケースのことを知らな
    い。
    エンティティもユースケースも通信手段やDB
    やフレームワー
    クの事は知らない
    そのくらい独立させておく(
    汎用性を持たせる)
    DB, http,
    その他外的要素がなくともテストできる

    View Slide

  36. フレームワーク非依存
    フレームワーク非依存
    フレームワーク依存をなくす事でツールとして利用する

    View Slide

  37. UI
    非依存
    UI
    非依存
    ビジネスルールの変更なしに変更できる
    http
    経由 ->
    コンソールUI
    にするなど

    View Slide

  38. 外部エージェント依存
    外部エージェント依存
    ビジネルルールは外界のIF
    を知らない
    ブラウザ経由 ->
    アプリにする際に変更がない

    View Slide

  39. 活かし方
    活かし方

    View Slide

  40. 頭の体操
    頭の体操
    DB,
    コード設計も含みます

    View Slide

  41. どんな頭の使い方?
    どんな頭の使い方?
    知らない =
    無保証ではなく...
    知らなくても動くようにする
    つまり依存をなくす方法を考える

    View Slide

  42. 一番大事なのは
    ...
    一番大事なのは
    ...
    ビジネスを実現
    ビジネスロジック や ビジネスルール と言われている箇所
    これを middleware
    で縛らない

    View Slide

  43. コンポーネント図
    コンポーネント図
    絵にすると...
    循環依存に気付きやすいよね?

    View Slide

  44. これ
    RDB
    の外部キーでも
    これ
    RDB
    の外部キーでも




    同じ事だよね?
    同じ事だよね?
    外部キーで循環依存は運用していくと厳しくなりそう。

    View Slide

  45. 難しいな
    ...
    難しいな
    ...
    controller
    と web framework
    どう切り離せる?

    View Slide

  46. とはいえ
    ...
    とはいえ
    ...
    ビジネスルールは切り離せそう
    ここ大事

    View Slide

  47. まとめ
    まとめ

    View Slide

  48. web framework
    controller
    部分は結構結合している...
    切り離し方知ってる人いる?

    View Slide

  49. 依存関係を整理していれば...
    ビジネスルールの分離はやれてる箇所はありそう
    とはいえ今後は意識したい

    View Slide

  50. 図や絵にする事大事
    他の人と共有するときも ->
    情報非対称性 対策
    自分も気付きやすい

    View Slide

  51. 参考
    参考
    読んでいただければ、もっと色々と解ります。

    View Slide

  52. ご清聴
    ご清聴




    ありがとう
    ありがとう




    ございました
    ございました

    View Slide