私はここで少し混乱しています。選択したオプションに応じて、DTO の特定のプロパティのみが有効になるシナリオがあります。だから、私はデザインの下に来ました。
[DataContract]
class MyDTO
{
[DataMember]
public BaseData CommonData { get; set; }
[DataMember]
public Options AvailableOptions { get; set; }
[DataMember]
public Option1Data Data1 { get; set; }
[DataMember]
public Option2Data Data2 { get; set; }
}
[DataContract]
public class BaseData
{
[DataMember]
public int BaseVar1 { get; set; }
}
[DataContract]
public enum Options
{
[EnumMember]
Option1,
[EnumMember]
Option2
}
[DataContract]
public class Option1Data
{
[DataMember]
public string Option1Var1 { get; set; }
}
[DataContract]
public class Option2Data
{
[DataMember]
public string Option2Var1 { get; set; }
}
しかし、明らかにMyDTO
クラスはOCPの原則に違反しています。列挙型に新しいオプションが追加されるたびに、そのオプションのデータを取得するために、もう 1 つのプロパティを追加するOptions
ように変更する必要があります。MyDTO
この場合変更MyDTO
してもよろしいですか、それともより良い設計はありますか?