1

私は 3 つのクラスを持っています。各クラスは、特定の継承された能力に対して個別に継承できます。

ただし、2 つのクラスを 3 番目のクラスに継承して、他の 2 つの機能とそのデフォルトのロジック実装を含む「スーパー」クラスを作成できます。

コーディングロジックを一元化するための最良のアプローチは何ですか?

以下に示すように、Class2は、私が組み込んだものの蒸留形式ですClass3。インターフェイスを開発し、実装ごとにロジックを何度も実装する代わりに、プロパティの検証ロジックを 1 つの場所に実装したいと考えています。

Class2単体での使用はもちろん、 との併用も可能なシチュエーションがありClass1ます。各クラスには独自の用途がありますが、 &をClass3組み合わせて、両方のクラスの機能を組み合わせた究極の実装を実現します。21

クラス:
public mustinherit class Class1(of T as {New, Component})
  private _prop as T

  public sub New()
    ...
  end sub

  protected friend readonly property Prop1 as T
    Get
      ..validation..
      return me._prop
    end get
  end property
end class

public mustinherit class Class2
  private _prop as short

  public sub new(val as short)
    me._prop = val
  end sub

  protected friend readonly property Prop2 as short
    get
      return me._prop
    end get
  end property
end class
現在の Class3 実装:
public mustinherit class Class3(of T as {New, Component})
  Inherits Class1(of T)

  'Distilled the logic design below into its own MustInherit class cause this design
  '  by itself is useful without Clas1 implementation.
  private _prop as Short  <--- Same as Class2._prop

  public sub New(val as short)
    me._prop = val
  end sub

  protected friend readonly property Prop2 as short
    get
      return me._prop
    end get
  end property
end class

@Servy ごと:

クラス1
public mustinherit class Data(of T as {New, Component})
...
end class
クラス2
public mustinherit class Brand
...
end class
クラス3
public mustinherit class BrandData(of T as {New, Component})
  inherits Data(Of T)
...
end class
4

1 に答える 1

1

インターフェイスを開発し、実装ごとにロジックを何度も実装する代わりに、プロパティの検証ロジックを 1 つの場所に実装したいと考えています。

インターフェイスを何度も実装する必要はありません。一度に検証ロジックを実装してから、検証が必要なクラスにそれを挿入する必要があります。

interface IValidationLogic
{}

class Class1
{
    protected readonly IValidationLogic _validationLogic;
    public Class1(IValidationLogicvalidationLogic)
    {
        _validationLogic = validationLogic;
    }
}

class Class2
{
    protected readonly IValidationLogic _validationLogic;
    public Class2(IValidationLogicvalidationLogic)
    {
        _validationLogic = validationLogic;
    }
}

class Class3 : Class2
{
    public Class2(IValidationLogicvalidationLogic)
         : base(validationLogic) 
    {}
}


class MyValidationLogic : IValidationLogic
{}


var obj = new Class3(new MyValidationLogic())
于 2013-01-23T16:54:23.113 に答える