「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>依存性反転原則]]

*目次 [#l88da091]
#contents

*概要 [#z3bf9209]
[[最小構成の依存性反転原則>依存性反転原則#ecda4880]]を多層に適用している。

*詳細 [#r787552c]
コア・ロジックは外部I/Oインターフェイス(UI、DB等)を使用する際、
-インターフェイス経由で利用することで、コンパチ可能に実装する。
-[[DI>依存性反転原則#g8343c51]]により、インターフェイスを継承したインスタンスが設定される。

**メリット・デメリット [#i3942654]

***メリット [#zbf80ba5]
これにより、

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

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

***デメリット [#gc0a10ca]
-[[依存性反転原則]]の注意事項にあった

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

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

-ホントにコンパチのシナリオはあり得るのか?
--疑問と言えば疑問。
--ただし、コンパチ・シナリオの可能性は増えつつある。
---RDB、NoSQL、WebAPI
---エンジニアリングの[[配管工化>https://www.google.com/search?q=site%3Aosscons.jp+%E9%85%8D%E7%AE%A1%E5%B7%A5]]

-以下はMVCの例だが、DesktopやFrontend系では、また別途検討が必要になる。
-MVC系の例が多いが、DesktopやFrontend系では、また別途検討が必要になる。

***利用シーン [#g2119f30]
以下のようなユースケースでハマりそう。

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

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

-以下の段階があり、どの段階が適合するか、よく検討する必要がある。
--ラッパー
--[[DI + IoC>依存性反転原則#w42dcdfc]]
--[[依存性反転原則]]
--クリーン・アーキテクチャ

**構成要素 [#r19a19fe]

***Controller [#m1c9b02b]
外部I/Oインターフェイス(UI)

-MVCのController
-ユーザの入力を解釈し、[[UseCase>#a0aa4dfe]]にそれを伝える。

***UseCase + Interactor [#a0aa4dfe]
コア・ロジック

-MVCでServiceManagerとも呼ばれる。
-UseCaseがインターフェイスで、Interactorが実装。
-[[DI>依存性反転原則#g8343c51]]により、[[Controller>#bc3fe389]]から呼び出される。

-コア・ロジックであるInteractorは、
--[[Repository>#y2e4ef36]]
--[[Presenter>#k0ebeaab]]

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

***Repository [#y2e4ef36]
外部I/Oインターフェイス(DB)

-Storeとも呼ばれ、データ・アクセスをする。
-[[同様>#a0aa4dfe]]にインターフェイスと実装に分かれる。
-[[DI>依存性反転原則#g8343c51]]により、[[Interactor>#a0aa4dfe]]から呼び出される。

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

-MVCのViewModelを生成する。
-[[同様>#a0aa4dfe]]にインターフェイスと実装に分かれる。
-[[DI>依存性反転原則#g8343c51]]により、[[Interactor>#a0aa4dfe]]から呼び出される。

**ドメイン駆動設計(DDD) [#h6ae72f7]
正直、微妙(実践が難しい)かなと。

***概要 [#v78536e5]
高位の概念と実践について多数述べられている。
-複雑なドメインの設計は、モデルベースで行うべき

-大半のソフトウェアプロジェクトでは、
--システムを実装するための特定の技術ではなく、
--ドメインそのものとドメインのロジックに焦点を置くべき。

***参考 [#vf91d6c3]
-ドメイン駆動設計 - Wikipedia~
https://ja.wikipedia.org/wiki/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88

*参考 [#j9329152]

-世界一わかりやすいClean Architecture - nuits.jp blog~
https://www.nuits.jp/entry/easiest-clean-architecture-2019-09

**Qiita [#nc8f6a2f]
-実装クリーンアーキテクチャ~
https://qiita.com/nrslib/items/a5f902c4defc83bd46b8
-フロントエンドでClean Architectureを適用してみる(+サンプルコード)~
https://qiita.com/ttiger55/items/50d88e9dbf3039d7ab66

**OSSコンソーシアム [#tec78158]

***開発基盤部会 Blog [#o740357a]
-DDDに関して思った事(難し過ぎるとOOADの二の舞になるよ。的な話)。~
https://www.osscons.jp/jok7exzd5-537/
>https://twitter.com/openhishopjpo/status/1237548569696985088

-色々考え、汎用認証サイトのクリーン・アーキテクチャを放棄した件~
https://www.osscons.jp/jobvap48p-537/
>https://twitter.com/openhishopjpo/status/1284107881344757761

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS