Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

はじめに① アーキテクチャ is 何? かさいさん(Kasai Koji) SNS Twitter: @StreamWest1629(かさいさん) GitHub: StreamWest-1629 コーディング時に決めておく指針 「何をすべきか」がわかる 「やりたいこと」が伝わる その手段の1個にできたら 満点💯

Slide 3

Slide 3 text

はじめに② ここで話す内容が必ずしも正しいとは限らない 「わかりやすいよ」 「つくりやすいよ」 くらいの認識で! 今回は事前に Zennの記事として公開済  👉特に指摘されることなく  👉30Like押していただけた!! Zenn「クリーンアーキわからんかった人のた めのオニオンアーキテクチャ」

Slide 4

Slide 4 text

クリーンアーキテク チャとは?

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

クリーンアーキテク チャとは? 特徴① 具体的なところから抽象的なところへ 依存関係がわかりやすい 依存方向の ルール

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

クリーンアーキテク チャとは? 特徴② 例: Use Cases層から「データベースに保存する」動作をす るとき... どのように保存するかは Infrastructure層が決めること 👉MySQLに保存しようがSQLiteに保存しようが ユースケース層には関係ない 👉保存に失敗してもデータに不備がなければ Infrastructure層の責任 問題把握 がしやすい!

Slide 11

Slide 11 text

クリーンアーキテク チャとは? 特徴③ 具体的なところから抽象的なところ行くから 外部環境にプロダクトが 依存しにくい 👉MySQLに保存しようがSQLiteに保存しよ うがUse Cases層には関係ない

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

クリーンアーキテク チャの問題(注意)点 必ずしも4層である とは限らない あくまでも概念を説明するための図 「4層にこだわらなくていい」 依存関係逆転の 原則(DIP) 関心の分離 依存方向の ルール すごく抽象的 これらが守られていれば それでよい

Slide 15

Slide 15 text

クリーンアーキテク チャの問題(注意)点 依存関係逆転の原則 は明記されない 依存関係逆転の原則とは? 言語の インターフェイス モジュール1 モジュール2 見かけ上、一方向に 依存しているように見え る仕組み モジュール2が”言語のインターフェイス”の要件を満たすと 👉モジュール1は”言語のインターフェイス”として モジュール2を参照できる 依存関係逆転の原則は必要だが 場所について明記はない

Slide 16

Slide 16 text

クリーンアーキテク チャの問題(注意)点 フレームワーク・ドライバ は大抵ライブラリとして提 供される Infrastructure層が既にあるものだと, 既存では、 上位層のオブジェクト は呼び出せない インターフェイス層や ユースケース層など

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

オニオンとクリーンの比較 クリーンアーキテクチャの概念 オニオンアーキテクチャの概念 Entities層 Domain Model層 Entities層またはUse Cases層 Domain Services層 Use Cases層 Application Services層 Interface層またはInfrastructure層 Infrastructure層 Infrastructure層 (外部のライブラリ・ドライバなど)

Slide 22

Slide 22 text

ほんのちょっと宣伝 もくもく会、はじめました。 ● ボットによる厳格な 時間管理 ● 「会」と言いながら 24時間常設 ● コミュニティとして のもくもく会 学生も社会人もご気軽にご参加ください!!

Slide 23

Slide 23 text

クリーンアーキわからんかった   人のためのオニオンアーキテクチャ 再利用・改善可能で・可読性の高い プログラミングを目指して ありがとうございました