1

DDD と Spring について質問があります。私は常に貧血ドメイン モデルとサービスを中心にアプリケーションを設計し、ビジネス ロジック/永続性を管理しています。

Book などの Domain オブジェクトに対して、Spring 管理の永続化/リポジトリ サービスがあるとします。ブックで save() メソッドを公開する必要がある場合は、ドメイン内にリポジトリ Bean が必要になるか、リポジトリ Bean のコンテキストを検索する必要があります。これは、依存性注入とは正反対です。

ここで、リポジトリ ID がドメインに注入され、ドメイン オブジェクトがキャッシュされている場合 (クラスター化されたキャッシュ)、逆シリアル化では、Spring コンテナーが異なるため、注入されたリポジトリ サービスがありません。

私は間違っているかもしれませんが、誰かがこのシナリオがどのように機能するかを説明できれば、非常に役立ちます

4

2 に答える 2

2

アプリケーションの「ファサード」はリポジトリ(または他のインフラストラクチャサービス)を使用して「本」を保存する必要があると思います。本はそれ自体を保存すべきではありません。これはリポジトリの責任です。

ドメイン エンティティからインフラストラクチャ操作 (データベースの検索など) を行う必要がある場合は、コンテキストを検索する (結果として Spring に結合される) か、依存関係を介してリポジトリを注入することにより、このリポジトリにアクセスする必要があります。エンティティへの注入。

問題は、エンティティの「インスタンス化」は Spring の責任ではなく、Persistence Provider の責任であるため、Spring はこの注入を処理できないことです。何をすべきか?

まあ、これを行うにはいくつかの方法があります(どれも「美しい」ものではありません)。

  • AOP を介して: インスタンス化の瞬間にエンティティに依存関係を注入するようにシステムを構成するアスペクト指向フレームワーク (AspectJ など) を使用してコードをインストルメント化できます。
  • Hibernate インターセプタを介して: Persistence Provider が Hibernate の場合、エンティティのライフサイクルの特定のポイントにインターセプタを配置するためのフックが提供されます。すべてのエンティティのインスタンス化に依存関係を注入するために、Spring コンテキストをルックアップするインターセプターを構成できます。
  • おそらく最も簡単な方法は、必要なときにエンティティから要求されたサービスを検索する、Spring と組み合わせた小さな静的な「serviceLocator」を実装することです。このサービス ロケーターは、エンティティが Spring に結合されるのを回避するための単なるレイヤーです。
于 2011-06-28T11:52:36.817 に答える
1

「保存」メソッド(たとえばDBに保存)はドメインオブジェクトに属していないと思います...本自体を「保存」しますか?それともリポジトリに保存されていますか?...

于 2011-02-25T13:00:24.523 に答える