2

OSGiアプリケーションの設計を読んだ後-私はサービスフレームワークを悪用していますか?そして、一貫性のある「アプリケーション」を作成するためにOSGiバンドルをグループ化する最良の方法は何ですか、私は今、「OSGiをプログラムしない」というマントラをどのように適用するかという疑問に悩まされています。

制限されたコンテキストが個々のバンドルではなくアプリケーション全体であると仮定すると、APIバンドル、およびDDDスタイルで、そのエンティティを操作するためのリポジトリで、任意の集約ルートエンティティを自由に宣言できます。さて、問題の核心は、リポジトリ自体が(ドメインオブジェクトの)レジストリであり、この設計がOSGiサービスレジストリを回避するため、明示的なリポジトリはOSGiスタイルとは正反対のように見えることです。ただし、リポジトリを廃止するには、エンティティのルックアップを実行するために、コンシューマーがOSGiをプログラムする必要があります。

リポジトリは単なるファサードであると言われていますが、これは、サービスレジストリに委任するリポジトリ実装を作成する必要があることを意味しますか?コンシューマーはドメインモデルへの2つのエントリポイント(リポジトリとサービスレジストリ自体)を持っているため、これは一貫したアプローチではないようです。ドメインロジックとフレームワークコードをスパゲッティのように混合することに戻ったため、リポジトリを放棄することはDDDではなくなりました。

では、ここでのポイントは何ですか?ドメイン駆動設計は「OSGiの方法」と互換性がありませんか、それともいくつかの重要な概念が欠けていますか?

4

2 に答える 2

3

OSGiに依存しない理由は、コード内のミドルウェアOSGiの可視性により、コードのまとまりが低下するためです。ドメインコードとOSGiコードを混在させないでください(JMS、Java EE、またはその他のAPIと混合してはならないのと同じです)。凝集性の低いコードはより複雑であるため、エラーが発生しやすくなります。

ただし、インフラストラクチャをドメインコードにリンクするブリッジングコードが常に必要です。このブリッジングコードはとにかくいくつかのAPIに結合されるので、それを活用して、ブリッジコードの環境から自分自身を抽象化することにはまったく意味がありません。

DS(およびBlueprint、iPOJOなど)は、ビジネスロジックのレジストリを非表示にします。これらは、ドメインレジストリを提供するための非常に便利な方法です。したがって、OSGiを使用すると、ドメインオブジェクト自体がOSGiを認識していなくても、ドメインオブジェクトの非常に強力なリポジトリを作成するためのコードを記述する必要はほとんどありません。

はい、コードをOSGiから別の場所に移動する場合は、ブリッジコードを書き直す必要があり、OSGiの世界から来て、OSGiが提供する汎用機能を作成するのは驚くほど大きいです。ただし、アプリが移植された場合に提供する必要があるのは機能であるため、OSGiコンストラクトを使用しないとお金が無駄になります。

結論:ドメインはOSGiと混在してはならず、ブリッジコードはOSGiを活用する必要があります。

于 2012-10-08T08:53:24.880 に答える
1

リポジトリをOSGiサービスとして登録するだけでよいと思います。リポジトリを必要とするバンドルは、サービスを参照する必要があり、リポジトリインターフェイスのみを認識している必要があります。もちろん、これは、アクティベーターでServiceTrackerを使用するか、ブループリントコンテキストなどを使用する必要があることを意味します。この方法では、OSGiに実際のJavaレベルの依存関係がないため、ブループリントコンテキストを好みます。

もちろん、これは何らかの方法でOSGiへの依存関係を作成しますが、これは避けられません。従うべき基本的な考え方は、OSGi固有のコードをビジネスコードから除外し、別々のクラスまたは青写真に含める必要があるということです。

UI、モデル、永続性の実装を備えた単純なアプリケーションを示すチュートリアルの1つを参照してください。アプリケーションは小さすぎて実際にDDDを実行できませんが、アプローチはかなり互換性があるはずです。お気づきのことの1つは、アプリケーション全体が単一のOSGiインターフェースをインポートしないことです。優れた副作用の1つは、OSGiの外部でコードを簡単に再利用できることですが、もちろん、DIを別の方法で解決する必要があります。

http://www.liquid-reality.de/x/DIBZ

于 2012-10-08T06:09:09.340 に答える