在某些情况下,空类是正确的选择吗?

时间:2019-07-13 15:05:20

标签: c# .net wcf oop

我有三个类ClassB,ClassC和ClassD都是从ClassA类(这是一个空类)派生的。

我根据对象的类型创建了一个带有GetInformation的[操作合同]的WCF服务,该方法的参数是复杂的对象ClassA。

当我调用WCF对象时,我按三个类(ClassB,ClassC或ClassD)之一初始化ClassA对象。

我知道空类通常是设计上的缺陷,但是对于我而言,这是否是最佳选择,或者该方案的最佳设计是什么?

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返回基于对象类型的消息

[ServiceContract]
public interface IServices
{
    [OperationContract]
    string GetInformation(ClassA object);
}

2 个答案:

答案 0 :(得分:2)

您不需要创建空类。

由于这三个类 ClassB ClassC ClassD 没有通用的方法或属性。

因此您可以为每个班级创建一个运营合同

[ServiceContract]
public interface IServices
{
    [OperationContract]
    string GetInformationB(ClassB objectB);

   [OperationContract]
    string GetInformationC(ClassC objectC);

   [OperationContract]
    string GetInformationD(ClassD objectD);
}

答案 1 :(得分:1)

您可以为您的课程实现接口。 sjb-sjb为您写了什么。 但我知道,您使用的类没有任何通用方法或属性。只有

public class ClassC: ClassA
{
    [DataMember]
    public int num1{ set; get; }
    [DataMember]
    public int num2{ set; get; }
}

[DataContract]
public class ClassB: ClassA
{
    [DataMember]
    public int num1{ set; get; }
}

您可以这样重写它:

public class ClassC: ClassB
    { 
        [DataMember]
        public int num2{ set; get; }
    }

在设计应用程序时可能会出现问题。 并尝试使用组合而不是Inheritanse或接口。为什么? 您可以在这篇文章中了解它:

  

https://softwareengineering.stackexchange.com/questions/260343/why-is-inheritance-generally-viewed-as-a-bad-thing-by-oop-proponents

或那里:

  

https://codeburst.io/inheritance-is-evil-stop-using-it-6c4f1caf5117