Skip to content

DNET_CleanArchitecture

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

クリーン・アーキテクチャ

以下、「DI」「最小構成の依存性反転原則」などの参照先は、いずれも 依存性反転原則の該当節である。

概要

最小構成の依存性反転原則を多層に適用している。

詳細

コア・ロジックは外部I/Oインターフェイス(UI、DB等)を使用する際、

  • インターフェイス経由で利用することで、コンパチ可能に実装する。
  • DIにより、インターフェイスを継承したインスタンスが設定される。

メリット・デメリット

メリット

これにより、

  • コア・ロジックは
  • 外部I/Oインターフェイス(UI、DB等)に

依存しないようにできる。

デメリット

  • 依存性反転原則の注意事項にあった

    • なんでもかんでも抽象化するとコードが 複雑化し、混沌となる
    • 抽象度を上げる時は、必ず必要最小限にすること

    などを超えている感があるのと、

  • ホントにコンパチのシナリオはあり得るのか?

    • 疑問と言えば疑問。
    • ただし、コンパチ・シナリオの可能性は増えつつある。
      • RDB、NoSQL、WebAPI
      • エンジニアリングの配管工化
  • MVC系の例が多いが、DesktopやFrontend系では、また別途検討が必要になる。

利用シーン

以下のようなユースケースでハマりそう。

  • EAI/ETL系のデータフロー・オーケストレーションを実行する
    プロダクト(Apache NiFiのような)ではなく、フレームワーク。

  • デファクトのフレームワークに
    御呪いを書くと繋がる系(ASP.NET の Startup.cs)

  • 以下の段階があり、どの段階が適合するか、よく検討する必要がある。

    • ラッパー
    • DI + IoC
    • 依存性反転原則
    • クリーン・アーキテクチャ

構成要素

Controller

外部I/Oインターフェイス(UI)

  • MVCのController
  • ユーザの入力を解釈し、UseCaseにそれを伝える。

UseCase + Interactor

コア・ロジック

  • MVCでServiceManagerとも呼ばれる。

  • UseCaseがインターフェイスで、Interactorが実装。

  • DIにより、Controllerから呼び出される。

  • コア・ロジックであるInteractorは、

    などの外部I/Oインターフェイスを呼び出す。

Repository

外部I/Oインターフェイス(DB)

  • Storeとも呼ばれ、データ・アクセスをする。
  • 同様にインターフェイスと実装に分かれる。
  • DIにより、Interactorから呼び出される。

Presenter

外部I/Oインターフェイス(UI⇔DB)間の情報伝達を行う。

  • MVCのViewModelを生成する。
  • 同様にインターフェイスと実装に分かれる。
  • DIにより、Interactorから呼び出される。

ドメイン駆動設計(DDD)

正直、微妙(実践が難しい)かなと。

概要(DDD)

高位の概念と実践について多数述べられている。

  • 複雑なドメインの設計は、モデルベースで行うべき

  • 大半のソフトウェアプロジェクトでは、

    • システムを実装するための特定の技術ではなく、
    • ドメインそのものとドメインのロジックに焦点を置くべき。

参考(DDD)

参考

Qiita

OSSコンソーシアム

開発基盤部会 Blog

正誤

  • 「Controller」を指すページ内リンクのアンカ(#bc3fe389)が、 実際の「Controller」の見出しのアンカ(#m1c9b02b)と一致しておらず 元 Wiki 上でリンク切れになっていたため、正しい見出しへのリンクとした。

移行メモ

  • PukiWiki のページ内アンカ(#xxxxxxxx)は GitHub Wiki では再現できないため、 同一ページ内のアンカは見出しから生成されるアンカに張り替えた。
  • 「依存性反転原則」ページのアンカを指すリンク(「DI」「DI + IoC」 「最小構成の依存性反転原則」)は多数あるが、GitHub Wiki では アンカを再現できないため、冒頭にまとめて参照を置き本文中はプレーン・テキストとした。
  • 同名の見出し(「概要」「参考」)が衝突するため、括弧で文脈を補って一意にした。

Tags: 移行, クリーン・アーキテクチャ, Clean Architecture, 依存性反転原則, DI, DDD, UseCase, Interactor, Repository, Presenter

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally