2010-12-20 2 views
0

は今のところ、私は次のようなデザインを持っています。継承デザイン

ただし、新しいクラスIconUploaderを追加しています。他のクラスとは異なり、これは使用できるアイテムではなく、管理パネルです。 ImageUploaderには、安全なファイルのみがアップロードされることを確認するための特定のセキュリティチェックが含まれており、IconUploaderにもこの予防措置が必要です。

しかし、私は何をすべきか分かりません。理想的には、私はImageUploaderのインターフェースを作っていますが、実際のコードをインターフェースに入れることはできないので、できません。 ImageUploaderItemクラス階層の外に移動してその機能を静的にすることはできますが、それは私にはうってつけです。それは...ですか?もしそうでなければ、これを再構築する最良の方法は何ですか?

N.B:PHPを使用しています。何かに影響がある場合は、PHPを使用しています。

答えて

0

有効なファイルのリストをあなたはおそらくGenericUploaderを持っている必要があり、その後、アップローダーの各タイプを指定することができ、その後、GenericUploaderは、これらの要件は、(他のものと一緒にあなたがそれをするために行う望むかもしれない)満たされていることを確認します。

+0

右ですが、このクラスはどこに配置しますか?私がアイテム階層に置いておくと、ImageUploaderはアイテムではなくてもアイテムになります。アイテム階層外に移動すると、オブジェクトは1つのクラスだけを拡張できますので、インターフェースを作成しない限り、AvatarUploaderをそのアイテムとItemの両方の子にすることはできません。 – waiwai933

+0

これは 'ImageUploader'の上にあります。そして、 'IconUploader'は' ImageUploader'と同じレベルになります。 (つまり、セキュリティチェックを上に移動すると、両方ともセキュリティチェックを継承します)。 –

+0

私は誤解したと思います。 IconUploaderは画像をアップロードしますが、他の画像とは異なり、アイテムではありません。 – waiwai933

0

抽象的で共通の機能を持つImageUploaderBaseクラスが必要です。

0

アップロード者のセキュリティチェックと一般的なアップロード機能を別のUploaderクラスに移動して、ImageUploaderがこのUploaderクラスを使用するようにすることができます(Avatar/FaviconUploaderのような派生クラスも同様です)。

次に、IconUploaderにアップローダーを使用させることができます(Itemから派生するものではありません)。

ImageUploaderとIconUploaderにIUploaderインターフェイスを実装させ、インターフェイスへのすべての呼び出しがUploaderクラスに転送されて実装されるようにすることができます。