質問

Active Directory にいくつかの変更 (グループへのユーザーの追加/削除、ユーザーの属性値の変更など) を行うアプリケーションがあります。

私たちは現在、それを再設計中です (「スパゲッティ コード」から、より階層的なソリューションに)。Active Directory 管理機能は、ドメイン層である程度抽象化したいものですが、同時に、ほとんどの機能はテクノロジーに大きく依存しています。

すべての Active Directory アクセス コードを DB アクセスとともにデータ アクセス レイヤーに配置する必要がありますか、それとも関数の Active Directory ライブラリを作成し、ドメイン モデルからこのライブラリを直接呼び出しても問題ありませんか?これにより、ドメイン オブジェクトが永続的に認識されるようになりますが、これはおそらく悪い考えでしょうか?

それとも、すべての Active Directory アクセスは代わりにサービス層で実行され、ドメイン層さえ関与すべきではないでしょうか?

役に立ちましたか?

解決

ドメインモデルは次のようにする必要があります テクノロジーに依存しない, そのため、AD コードをドメイン モデルに含めないでください。

本質的に、AD コードはデータ アクセスの単なる別の形式であると言えるため、データ アクセスに属します。 (ダル)。ただし、これはデータベース モジュールに属しません。これは、 単一責任の原則 (SRP - 個々のタイプだけでなくモジュールにも適用されます)。

データベース アクセスとバンドルするのではなく、独自のライブラリに実装します。概念的には、これは同じレイヤーに属しますが、実行する機能が異なるため、同じレイヤーに 2 つのライブラリがあることになります。それはまったく問題ありません。各レイヤーに必要な数のライブラリを含めることができます。

ドメイン モデルでは、AD アクセス (および DB アクセス) を抽象化として扱います。抽象的な リポジトリ がデフォルトのアプローチです。AD ライブラリには AD リポジトリの実装が含まれ、DB ライブラリには DB リポジトリの実装が含まれます。

これはよく合います ドメイン駆動設計 という概念と、 腐敗防止層.

使用できます 依存関係の注入 (DI) 具体的なリポジトリをドメイン モデルに接続します。

他のヒント

私は技術、特定の物事がドメインモデルに入れるべきではない、実装の詳細だと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top