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

クリーンアーキわからんかった人のためのオニオンアーキテクチャ

8274f8330eb9f9830ffdfa495ca95a1f?s=47 Kasai Kou
November 04, 2021

 クリーンアーキわからんかった人のためのオニオンアーキテクチャ

LT会の登壇資料です.
Zenn: https://zenn.dev/streamwest1629/articles/no-clean_hello-onion-architecture
(記事追加したい願望が強いのでZennフォローしてくれるとありがたい)

8274f8330eb9f9830ffdfa495ca95a1f?s=128

Kasai Kou

November 04, 2021
Tweet

More Decks by Kasai Kou

Other Decks in Programming

Transcript

  1. クリーンアーキわからんかった   人のためのオニオンアーキテクチャ 再利用・改善可能で・可読性の高い プログラミングを目指して 千葉工業大学 機械電子創成工学科 B2 川西浩嗣(@StreamWest1629)

  2. はじめに① アーキテクチャ is 何? かさいさん(Kasai Koji) SNS Twitter: @StreamWest1629(かさいさん) GitHub:

    StreamWest-1629 コーディング時に決めておく指針 「何をすべきか」がわかる 「やりたいこと」が伝わる その手段の1個にできたら 満点💯
  3. はじめに② ここで話す内容が必ずしも正しいとは限らない 「わかりやすいよ」 「つくりやすいよ」 くらいの認識で! 今回は事前に Zennの記事として公開済  👉特に指摘されることなく  👉30Like押していただけた!! Zenn「クリーンアーキわからんかった人のた

    めのオニオンアーキテクチャ」
  4. クリーンアーキテク チャとは?

  5. クリーンアーキテク チャとは? 伝統的レイヤード アーキテクチャ ・上から下に向かって依存していく ・データ構造がInfrastructure層に依存する Infrastructure層の変更が プロダクト全体の変更に!

  6. クリーンアーキテク チャとは? プロダクトを 四層に分割する考え方 フレームワーク・ドライバなど Infrastructure層 ビジネスクロックがある Use Cases層 前述の二層間の変換を担う

    Interface層 データ構造などがある Entities層
  7. クリーンアーキテク チャとは? 特徴① 具体的なところから抽象的なところへ 依存関係がわかりやすい 依存方向の ルール

  8. クリーンアーキテク チャとは? 特徴① 絶対この順番だから 循環参照が起きない!!

  9. クリーンアーキテク チャとは? 特徴② それぞれの層で注目している問題が相異なる 注目している問題以外は ブラックボックスでよい! 関心の分離

  10. クリーンアーキテク チャとは? 特徴② 例: Use Cases層から「データベースに保存する」動作をす るとき... どのように保存するかは Infrastructure層が決めること 👉MySQLに保存しようがSQLiteに保存しようが

    ユースケース層には関係ない 👉保存に失敗してもデータに不備がなければ Infrastructure層の責任 問題把握 がしやすい!
  11. クリーンアーキテク チャとは? 特徴③ 具体的なところから抽象的なところ行くから 外部環境にプロダクトが 依存しにくい 👉MySQLに保存しようがSQLiteに保存しよ うがUse Cases層には関係ない

  12. クリーンアーキテク チャの問題点

  13. クリーンアーキテク チャの問題(注意)点 言語のインターフェイス型 とインターフェイス層は 関係ない 言語のインターフェイス 👉「実装をもたない抽象型」 クリーンアーキテクチャの Interface層 👉「二層間の変換にフォーカス

    したモジュール」 ユースケース層と インフラストラクチャ層
  14. クリーンアーキテク チャの問題(注意)点 必ずしも4層である とは限らない あくまでも概念を説明するための図 「4層にこだわらなくていい」 依存関係逆転の 原則(DIP) 関心の分離 依存方向の

    ルール すごく抽象的 これらが守られていれば それでよい
  15. クリーンアーキテク チャの問題(注意)点 依存関係逆転の原則 は明記されない 依存関係逆転の原則とは? 言語の インターフェイス モジュール1 モジュール2 見かけ上、一方向に

    依存しているように見え る仕組み モジュール2が”言語のインターフェイス”の要件を満たすと 👉モジュール1は”言語のインターフェイス”として モジュール2を参照できる 依存関係逆転の原則は必要だが 場所について明記はない
  16. クリーンアーキテク チャの問題(注意)点 フレームワーク・ドライバ は大抵ライブラリとして提 供される Infrastructure層が既にあるものだと, 既存では、 上位層のオブジェクト は呼び出せない インターフェイス層や

    ユースケース層など
  17. クリーンアーキテクチャの問題(注意)点 フレームワーク・ドライバ は大抵ライブラリとして提 供される 実際のクリーンアーキテクチャ 理想的なクリーンアーキテクチャ

  18. オニオンアーキテク チャの提案

  19. オニオンアーキテク チャの提案 =クリーンアーキテク チャの具体化のひとつ フレームワーク・ドライバを参照 する Infrastructure層 ビジネスクロックがある Application Services層

    参照型などがある Domain Services層 データ構造などがある Domain Model層
  20. オニオンアーキテクチャの提案 Infrastructure層 Application Services 層 Domain Services層 Domain Model層 ライブラリ・ドライバ

    を使った処理を管理 Domain Services層で 定義する参照型に 従ったモジュール ビジネスロジック を管理 言語のインターフェイス を管理 Domain Service 内の型として Infrastructure層 を参照 依存関係 逆転の原則 データ構造等 を管理 どこにも 依存しない 見かけ上はこの方向に依存していく
  21. オニオンとクリーンの比較 クリーンアーキテクチャの概念 オニオンアーキテクチャの概念 Entities層 Domain Model層 Entities層またはUse Cases層 Domain Services層

    Use Cases層 Application Services層 Interface層またはInfrastructure層 Infrastructure層 Infrastructure層 (外部のライブラリ・ドライバなど)
  22. ほんのちょっと宣伝 もくもく会、はじめました。 • ボットによる厳格な 時間管理 • 「会」と言いながら 24時間常設 • コミュニティとして

    のもくもく会 学生も社会人もご気軽にご参加ください!!
  23. クリーンアーキわからんかった   人のためのオニオンアーキテクチャ 再利用・改善可能で・可読性の高い プログラミングを目指して ありがとうございました