私は私のシステムが依存するインターフェイス定義されています:異なるパッケージにインターフェイスを実装する具象クラスのセットを正しく整理するにはどうすればよいですか?
IMethodCall
を、私はIMethodCall
を実装するクラスの束を作成しました:彼らは実装の詳細です
AbstractMethodCall
ConstructorCall
TargetConstructorCall
VoidMethodCall
TargetVoidMethodCall
NonVoidMethodCall
TargetNonVoidMethodCall
、そして私のシステムのdoesn彼らについて知りません(少なくとも、知る必要はありません)。
当時のデータセットに基づいて、どのインプリメンテーションをインスタンス化するかを選択するのは面倒なロジックがあります。そのため、すべてのロジックを単一の場所にグループ化するためのファクトリを作成することにしました。
MethodCallFactory
私は、ここで使用されているパッケージ構造が何であるべきかを理解しようとしています。私の最初のアイデアは、すべての具体的なクラスをmethodCalls
パッケージに入れて、パッケージ保護されたクラスに設定することだったので、誰もその存在を知ることはできませんでした。その後、私はIMethodCall
とMethodCallFactory
を外部に入れて、私のシステムのユーザーが使用できるようにしました。問題は、具体的なクラスをパッケージ保護されたものとして置くと、ファクトリはパッケージに入っていなければならないということです。外部のビューアではパッケージが含まれているだけです工場。
現時点では、具体的なクラスを公開することが最善のトレードオフですが、私は皆さんがどのようにこのような状況に対処しているのだろうかと思います。
公開しても問題ありませんか? – Jeffrey
パブリックにすることの害は、ファクトリを使用する本質的な性質によって、直接的にアクセスできるということです。 – nrobey