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

ツールで防衛 クリーンアーキテクチャ / CleanArchitecture

nrs
September 01, 2018

ツールで防衛 クリーンアーキテクチャ / CleanArchitecture

動画: https://www.youtube.com/watch?v=btJPK3TaJMg&feature=youtu.be&t=10830

2018/09/01 大阪にて行われたプログラミング生放送勉強会でのプレゼンです。
クリーンアーキテクチャの実装についての解説をメインにしています。

資料中に出てくる URL

# 著者ホームページ
https://nrslib.com/

# このスライドを元にした解説
https://nrslib.com/practice-of-clean-architecture/
# サンプル
https://github.com/nrslib/PracticeOfCleanArchitecture

nrs

September 01, 2018
Tweet

More Decks by nrs

Other Decks in Programming

Transcript

  1. 自己紹介 • 成瀬 允宣 - Masanobu Naruse • GMOインターネット(システム本部 UXデザイン開発部)

    • プログラマ • C# , Typescript, Scala • DDD とかアーキテクチャの話が好きです • @nrslib • https://nrslib.com/ 2
  2. もくじ • 直近の苦労話 • 何が問題だったのか • 思い描いた夢 • クリーンアーキテクチャ •

    立ちはだかる現実 • アーキテクチャのための冗長化に対する解決方法 • 最後に 4
  3. クリーンアーキテクチャ • 円はレイヤーを表す • Enterprise Business Rules • ビジネスロジックのレイヤー •

    Application Business Rules • ビジネスロジックの API が所属するレイヤー • Interface Adapters • 入力 / 出力 やデータ永続化関係 • モデルを DB などに保存する処理はここ • Frameworks & Drivers • Web フレームワーク等々 • 矢印は依存の方向 • 変化しづらいビジネスロジックを中心に • 依存を一方向に限定して変化に対応 • 外側のレイヤーが変更されても内部のレイヤーは 変更不要 20
  4. クリーンアーキテクチャ 21 • 円はレイヤーを表す • Enterprise Business Rules • ビジネスロジックのレイヤー

    • Application Business Rules • ビジネスロジックの API が所属するレイヤー • Interface Adapters • 入力 / 出力 やデータ永続化関係 • モデルを DB などに保存する処理はここ • Frameworks & Drivers • Web フレームワーク • 矢印は依存の方向 • 変化しづらいビジネスロジックを中心に • 依存を一方向に限定して変化に対応 • 外側のレイヤーが変更されても内部のレイヤーは 変更不要 とにかくやってみよう
  5. クリーンアーキテクチャ | 登場人物 • UseCase • ビジネスロジックの API • interface

    や抽象クラス • Repository • GateWays • データ永続化に関するオブジェクト • リポジトリーパターン • Interactor • UseCase の実装クラス • ビジネスロジック • モック • Controller • 入力を解釈して UseCase に伝えるもの • MVC の Controller や単体テストクラスとか 22 もうちょっと詳しく -> https://nrslib.com/clean-architecture/ 動くサンプル欲しい -> https://github.com/nrslib/CleanArchitectureSample ※ Presenter は一旦置いておきます
  6. クリーンアーキテクチャ | Bus パターン 34 特定の Response を取得することを期待して Request を作る

    Request を渡すと それに対応した Response を返してくれる Response さえもらえれば処理内容はなんでもいい
  7. クリーンアーキテクチャ | Dependency Injection 37 DI Container で設定 Test 環境

    Product 環境 プログラムに変更を加えることなく リポジトリや Interactor を切り替え
  8. クリーンアーキテクチャ | Presenter 39 Bus Request Response Production Interactor Mock

    Interactor 例えば「処理の途中経過を表示したい」とき
  9. 夢のような世界 • テストしやすい • モックの Interactor を使って好きなデータをフロントに送れる • バックエンドもデータ永続化処理や API

    も差し替え可能 • 待たない • モックを差し込めるのでバックエンドを待つことなくフロントを作れる • 迷わない • ロジックを書く場所は必ず Interactor • 全ての処理はクラスになっているのでクラスからメソッドを探さなくていい • 移植可能 • プレゼンテーション層(MVC フレームワーク等)にビジネスロジックが記述 されないので dll 化してマルチプラットフォーム可能 44
  10. 現実 45 • UseCase を定義 • Request を定義 • Response

    を定義 • Interactor を定義 • MockInteractor を定義 • Test 用の Dependency Injection 設定 • Production 用の Dependency Injection
  11. 現実 46 • UseCase を定義 • Request を定義 • Response

    を定義 • Interactor を定義 • MockInteractor を定義 • Test 用の Dependency Injection 設定 • Production 用の Dependency Injection 面倒
  12. ツール | 概要 49 DI 設定 Script / DI 設定ファイル

    UseCase 名を 入力 Request Response Product Interactor UseCase Test Interactor クラス生成 ツールを作ります 機能はクラスの生成と DI 登録
  13. ツール | クラス生成 52 Test 用の Interactor は とりあえず json

    形式で書いたファイルから データを読み取るように デバッグ用ファイルのイメージ 1回目の データ 2回目の データ