私はOSGiに関するプレゼンテーションをたくさん見ましたが、 OSGiはより良いモジュール化を実現する上で有望だと思います。どうやら「ホットデプロイメント」と「異なるバージョンの x を並行して実行する」ことも市長のセールス ポイントです。
OSGi が解決すると約束していることは問題でさえあるのだろうか...? 同様の主張がメイドだったOOの初期を思い出しました:
オブジェクト指向が新しいとき、大きな論点は再利用性でした。オブジェクト指向を使用する場合、「一度書く」だけで「どこでも使用できる」と広く主張されていました。
実際には、これはかなり低レベルの例でしか機能していませんでした。その理由は、再利用可能なコードを書くのが難しいからだと思います。技術的にではなく、インターフェース設計の観点から。将来のクライアントがクラスをどのように使用したいかを予測し、正しい選択を前もって行う必要があります。これは定義上困難であり、潜在的な再利用性の利点を提供できないことがよくありました。
OSGiを使用すると、ここでも、私たちが実際には持っていない問題の潜在的な解決策である約束に陥る可能性があるのではないかと私は疑っています。あるいは、もしそれらを持っていたとしても、OSGi に助けを求めることを正当化するのに十分な量と重大度でそれらを持っていません。たとえば、モジュールのサブセットの「ホットデプロイメント」は間違いなく素晴らしいアイデアですが、実際にどのくらいの頻度で機能しますか? 特定の問題のモジュール化が間違っていたことが判明したためではないことがどれくらいありますか? 複数のモジュール間で共有されるモデル エンティティはどうですか? これらのモジュールはすべて同時に変更する必要がありますか? それとも、インターフェイス コントラクトを維持できるようにするために、オブジェクトをプリミティブにフラット化し、モジュール間通信でのみ使用しますか?
OSGi を適用する際の最も難しい問題は、モジュール化を「正しく」行うことだと思います。OO でクラスのインターフェイスを正しく設定するのと同様に、OSGi を使用しても問題は同じままです。今回はより大きなスケールで、パッケージまたはサービス レベルでさえもです。
ご想像のとおり、私は現在、プロジェクトで使用する OSGi を評価しようとしています。私たちが抱えている主な問題は、コードベースが大きくなるにつれて複雑さが増していることです。私は、システムをより小さなモジュールに分割して、相互作用がますます定義されないようにしたいと考えています。
- 何をモジュール化するかを決定するのに役立つフレームワークがないことを考えると、OSGi はあなたにとって報われたことがありますか?
- チームで作業することで、生活が楽になりましたか?
- バグの数を減らすのに役立ちましたか?
- 主要コンポーネントの「ホットデプロイ」に成功したことがありますか?
- OSGi は時間の経過とともに複雑さを軽減するのに役立ちますか?
- OSGi はその約束を守りましたか?
- それはあなたの期待に応えましたか?
ありがとう!