2011-06-20 8 views
2

Page、Newsなどのコンテンツアイテムを記述するクラスがあり、これらのクラスに添付ファイル(ファイルやその他のタイプのアイテム)を追加する機能を実装する場合は、例えば、これらの各ファイルでInterfaceを使用してクラスにプロパティを付与する

public List<Attachment> Attachments { get; set; } 

を作成するかにのみ、このプロパティ

List<Attachment> Attachments { get; set; } 

を持っていることをIAttachmentContainerと呼ばれるインターフェイスにこれをリファクタリングして、すべてのこれらのクラスで、このインタフェースを使用します(クラスが面)?

あなたが気づいたように、私たちはジェネリックコレクション(List)を使用して以来、私たちのインターフェースは追加の方法を必要としませんでしたか?

これらのコレクションの多くは、添付ファイル(ウィジェットなどもある可能性があります)以外にもたくさんあります。できるだけクリーンなソリューションを提供したいと思います。これまでのところ、このインターフェイス方法は、私に迷惑をかける唯一のものが、ほとんどが無回答です。

基本的に私は、これはOKに見えるん

public class News : IAttachmentContainer, IWidgetContainer, ... 

で終わるのでしょうか?

+0

が起こってありますOKらしいです別の添付ファイル/ウィジェットに似たプロパティ/メソッドであることもしそうなら、 'IContainer ここでT:BaseContainedClass'というインターフェースを定義することができます。あなたはまだかなりsimiarで終わるだろう。 –

+0

すべてのコンテンツアイテム(News、Pages、..)に亘って添付ファイルを扱う際に、同様のプロパティ/メソッドが使用されますが、インターフェイス自体はあまり似ていません。たとえば、添付ファイルは基本的にファイルになり、それらはウィジェットとはまったく違った動作をします(ウィジェットはUIアイテムのようになります)。しかし、ニュースとページの両方がIAttachmentContainerを実装している場合、同じ方法で添付ファイルを扱うことができます。つまり、同じDB永続化動作、ビジネスルール、シリアル化処理などを意味します。 – mare

+1

これは、プロパティのみを持ち、メソッドはありません。プロパティゲッタは、パラメータを取らないメソッドと概念的には違いはありません。あなたの質問については、添付ファイルやウィジェットで実行する必要のある操作の種類に関する情報がなくても、そのデザインがどのようになるべきかについては何も言い難いです。 – mquander

答えて

2

あなたが

ProcessAttachments(IAttachmentContainer MyObject)... 

...のような関数を使用しようとしているなら、あなたはそれを添付ファイルのインタフェースを実装する任意のオブジェクトを渡すことができます...

ProcessAttachments(NewsObject); 
+0

はい、これが私の考え方と実装のところです。 – mare

関連する問題