【发布时间】:2019-07-13 15:05:20
【问题描述】:
我有三个类 ClassB , ClassC 和 ClassD 都派生自 ClassA 类(这是一个空类)。
我根据 object 的类型创建了一个名为 GetInformation 的 [操作合同] 的 WCF 服务,此方法的参数是复杂对象 ClassA。
当我调用 WCF 对象时,我通过三个类(ClassB、ClassC 或 ClassD)之一来初始化 ClassA 对象。
我知道有一个空类通常是一个设计缺陷,但在我的情况下它可能是最佳选择吗?或者什么是这个 scnario 的最佳设计?
ClassA 是一个空的超类 这是我的代码
[KnownType(typeof(ClassB))]
[KnownType(typeof(ClassC)))]
[KnownType(typeof(ClassD))]
[DataContract]
public class ClassA
{
}
ClassB 是 ClassA 的派生对象
[DataContract]
public class ClassB: ClassA
{
[DataMember]
public int num1{ set; get; }
}
ClassC 是 ClassA 的派生对象
[DataContract]
public class ClassC: ClassA
{
[DataMember]
public int num1{ set; get; }
[DataMember]
public int num2{ set; get; }
}
ClassD 是从 ClassA 派生的
[DataContract]
public class ClassD: ClassA
{
[DataMember]
public string val1{ set; get; }
}
GetInformation 根据对象类型返回Message
[ServiceContract]
public interface IServices
{
[OperationContract]
string GetInformation(ClassA object);
}
【问题讨论】:
-
这不仅是软件设计的反模式,当目标代表远程服务、WCF 或其他时,它尤其糟糕。你永远不知道什么是可接受的请求。不要在请求参数中使用多态性,因为它是一个失败的合同