2017-10-26 11 views
0

私たちは巨大なプロジェクトをより小さなモジュールに分割しています。大きなアプリを小さなモジュールに分割する - 壁紙

例:A、Bモジュールを1つのアプリケーションにまとめて独立に作成したい場合は、独立してコンパイルします。多くの相互参照があります。

依存関係を分割する最も良い方法は何ですか? 現在、インターフェースを作成し、それをそれぞれのサービスとして公開しようとしています。 AImpl(Bによって呼び出される必要があるいくつかのクラス)、次にBはclass.forNameでそれを使用し、AImplには型キャストを使用します。実行時には動作します。

多くのリワークが必要です。これは正しいアプローチですか?

ありがとうございました。

答えて

0

私は少なくともストレートフォークを考えます。これにより、個々のプロジェクトを個別に進化させることができます。共有ライブラリが本当に必要な場合は、あとでそれらを識別し、必要に応じてそれらを使用するようにリファクタリングすることができます。

私は過去にこのようにしたとき、「依存関係」は私が思っていたほど一般的ではないこと、そして私はそれらを同じものに靴ひねりにしたことがわかった長年にわたって

たとえば、モジュールA(請求書と呼ぶ)には、クレジット条件、残高などの顧客があります。モジュールB(サポート担当者)では、同じ顧客ソフトウェアのバージョンやサポートの履歴など、まったく異なる属性を持つことになります。

「ユーザー」と呼ばれるものと、共通のID値を持つもの以外は、お互いに関係がなく、実際には同じクラスに属していません。モジュールAがモジュールBから分岐するとすぐに、Userオブジェクトははるかに小さくなり、集中しました。

これは、人々がマイクロサービスで行う発見と同じです。彼らが共有する必要があると思ったことは、実際には共有する必要はなく、実際にはそれらを分解することによって恩恵を受けました。それは完全なものではありません。実際には本当に共有される複雑なオブジェクトが存在することもありますが、それはあなたの思うほど一般的ではありません。多くの場合、同じ「名前」を持ち、同じクラス/モジュールに入れられている2つの異なるものの問題です。

+0

私はAとBは関連していないと仮定していますが、お互いの機能を呼び出す必要があります。今日、彼らは直接電話します。フォークの後、何が最善の方法ですか? Bはその実装をインタフェースとして公開し、Aはclass.forNameを使用し、それを実装インタフェースにキャストして使用します。 – cloudpre

関連する問題