2017-02-01 1 views
0

に依存して実装するプロパティは、私は、基本クラスがいる:デザイン:BaseClassのプロパティ

public abstract class TechObject { 
    protected TechObject(FwVersion version) { 
     FwVersion = version; 
    } 

    public FwVersion FwVersion { get; set; } 
} 

をそして、私はこのクラスを継承する別のクラスを持っています。このクラスの

public partial class PositioningAxis : TechObject { 
    public PositioningAxis(FwVersion version) : base(version) { 
    } 
} 

このような私に自動的に生成されたプロパティ:

public partial class PositioningAxis { 
    public int Drive_V3 { get; set; } 
    public int Drive_V4 { get; set; } 
} 

私が達成したいあなたがFwVersion V4とクラスPositioningAxisのオブジェクトを作成するときにV4のプロパティのみが表示されているということです。

私はすべてのクラスを変更できますが、私は良いパターンを見つけることはできません。

私が望ましくないのは、各バージョンのクラスを作成することです。また、私は、TechObjectの各バージョンからすべてのプロパティを表示する必要はありません。

+1

コンパイル時と実行時の動作が混ざり合っているようです。 'DoSomething void(PositioningAxis a){...}'と宣言されたメソッドの本体がどのように機能すると思いますか? 'Drive_V4'が利用可能かどうかを判断するために、今までのパラメータの完全な履歴を知ることはどういう意味ですか? –

+1

クラスを自動生成する場合は、なぜFwVersionを使用するのが大好きですか?別々のクラス 'PositioningAxis3'と' PositioningAxis4'をコード化してください。それはCOMモデルに従うか、 'IPositioningAxis3'や' IPositioningAxis4'のようなインターフェースを定義します。あなたのシステムで自由に使用でき、パラメータとしてメソッド内で使用される共通の 'IPositioningAxis'を共有します。 – MickyD

答えて

0

あなたのアイデアが正しく表示されているかどうかわかりませんが、これはおそらく良いデザインではありません。私はおそらくインターフェイスを選択し、各バージョンのクラスを実装するだろうが、ちょっと、それは私がそれをやる方法です。ですから、このようなことはどうですか。

public class FwVersion 
{ 
    public int Version; 
} 

public abstract class TechObject 
    { 
     public FwVersion FwVersion { get; set; } 
    } 

public partial class PositioningAxis : TechObject 
{ 
    private int Drive_V3 
    { 
     get; set; 
    } 
    private int Drive_V4 
    { 
     get; set; 
    } 

    public int Drive 
    { 
     get 
     { 
      switch (this.FwVersion.Version) 
      { 
       case 3: return Drive_V3; 
       case 4: return Drive_V4; 
       default: return -1; 
      } 
     } 
     set 
     { 
      switch (this.FwVersion.Version) 
      { 
       case 3: Drive_V3 = value; 
        break; 
       case 4: Drive_V4 = value; 
        break; 
      } 
     } 
    } 
} 
+0

のように見えます。それ。各バージョンのクラスに関する問題は、それが後の進捗状況を上回り、最後に約100+クラスになるということです。 –

+0

私はあなたのビジネスに鼻を張ってはいけませんが、これは最初から私にとっては悪いデザインのようです。いずれにせよ、私は助けることができてうれしいです。 –

+0

残念ながら、私は建築的なビジネスで新しいです...過去にコーディングサルでした。しかし、私は今、私の心を変え、完全に異なったデザインに行きました。うまくいけばそれはよりよいでしょう。とにかくありがとう –

関連する問題