1

次の例を検討してください。

namespace ValueObjects
{
  public class User
  {
    public string UserCode { get; set; }
    public string UserName { get; set; }
  }

  public class Company
  {
    public string CompanyCode { get; set; }
  }
}

ここで、User クラスに CompanyCode プロパティを持たせたいと考えています。最初の明らかな解決策は、単に User クラスに CompanyCode プロパティを配置することです。

public class User
{
  public string UserCode { get; set; }
  public string UserName { get; set; }
  public string CompanyCode { get; set; }
}

ここでの問題は冗長性です。これは、Company クラスにプロパティ CompanyCode が既に存在するためです。ユーザーが Company クラスを継承せずに Company の CompanyCode プロパティを使用できるようにする方法はありますか (ここでの問題は、C# がクラスの多重継承を許可していないことです)。 ICompany インターフェイスを使用します (ただし、値オブジェクトではインターフェイスが面倒です)。Company クラスを User クラスに含めることだけを考えていますが、適切な CompanyCode のみを使用します。

このようなもの..

  public class User
  {
    public string UserCode { get; set; }
    public string UserName { get; set; }
    private Company company;
    public string CompanyCode { get { company.CompanyCode } set {company.CompanyCode }

  }

しかし、文字列プロパティ CompanyCode を追加するだけでも違いはありません。皆さんのアドバイスが必要です。前もって感謝します..

4

1 に答える 1

2

あなたのソリューションは有効です。封じ込めが必要です。「is-a」関係ではなく「has a」関係 (継承)。別のオプションは

public Company UserCompany;

これにより、将来追加された場合に、User オブジェクトが Company オブジェクトの他のパブリック プロパティにアクセスできるようになります。

于 2010-09-12T13:56:44.287 に答える