システムが依存するインターフェイスを定義しました。
IMethodCall
を実装する一連のクラスを作成しましたIMethodCall
。
AbstractMethodCall
ConstructorCall
TargetConstructorCall
VoidMethodCall
TargetVoidMethodCall
NonVoidMethodCall
TargetNonVoidMethodCall
それらは実装の詳細であり、私のシステムはそれらについて知りません (少なくとも、知る必要はありません)。
その時点で手元にある一連のデータに基づいて、インスタンス化する実装を選択する背後にはいくつかのトリッキーなロジックがあるため、すべてのロジックを 1 つの場所にグループ化するファクトリを作成することにしました。
MethodCallFactory
ここで使用されるパッケージ構造がどうあるべきかを理解しようとしています。私の最初のアイデアは、すべての具体的なクラスをmethodCalls
パッケージに入れ、それらをパッケージ保護として設定することでした。次に、システムのユーザーがそれらを使用できるように、外にIMethodCall
出しました。MethodCallFactory
問題は、具象クラスをパッケージ保護として配置すると、ファクトリもパッケージに含まれている必要があることです。これは、外部ビューアーの場合、それを含むためだけに存在するパッケージのように見えるため、ちょっと奇妙に思えます。工房。
現時点で最善のトレードオフは、具体的なクラスを公開することですが、この種の状況を通常どのように処理するのだろうか?