3

継承をめぐる構成がここで意味をなすかどうか、そしてそうであればそれを実行するための良い方法を求めたかった。

私はそのようなインターフェースを持っています:

public interface IUser
{
  string FirstName {get; set}
  string LastName  {get; set}
}

「高度な」ユーザーインターフェイスもあります。これには、IUserと同じフィールドがありますが、いくつかの追加機能があります。電話番号、メールアドレスなど。

このインターフェイスは、独自のプロパティをIAdvancedUser継承して追加する必要がありますか、それともその中にインスタンスを含め、セッターインジェクションを使用してそのメンバーをインスタンス化する必要がありますか?後者の場合、これらの状況でうまく機能する.Net / C#イディオムがいくつかありますか?たとえば、ラッピングまたは別のアプローチを介してメンバーをメンバーとして公開しますか?IUserIUserIUserIAdvancedUser

これらはDTOオブジェクトであり、メソッドは含まれず、プロパティのみが含まれます。

4

1 に答える 1

2

答えは次のとおりIAdvancedUserですIUser

その場合: いいえ、継承を使用します。

ただし、" composition over inheritance" はクラスと同じ規則に従わないため、インターフェイスには適用されません。

たとえば、これを行うことができます:

interface IAdvancedFeatures
interface IUser
interface IAdvancedUser : IUser, IAdvancedFeatures

そうすれば、ユーザーに強制することなく、高度な機能を実装できるようにすることができますが、それ以外の場合は、全員が高度なユーザーでなければなりません。

私は通常、インターフェイスをロールではなく機能を定義するものとして扱うようにしています。したがって、( my のように) コンポジションを優先する必要があると言えますがIAdvancedUser、クラス (内部でコンポジションする場所) と同じ意味ではありません。

于 2012-11-12T19:19:25.457 に答える