我们的webservice必须返回不同的类型,这些类型可能有一个基本类型,但具有一些共享属性,但具有不同的属性。
方法可能如下所示: CreateObject(int typeID)
并且取决于typeID,将返回不同类型的对象。如果这不是web服务,那么IOC容器就可以解决问题。但在我们的场景中,对象必须由服务创建,并且实际上将被用作另一个服务,然后将该对象传递给业务层。
我们试图避免大量的映射,如果可能的话,只能在一个地方定义对象类型。
在这种情况下要寻找的好设计模式是什么?
答案 0 :(得分:0)
这样的伎俩(当然这可以通过IOC等来进行nicyified),我缺少的那个是" KnownType"属性:
[ServiceContract]
public interface IService1
{
[OperationContract]
AbstractResult GetAbstractData(int id);
}
[DataContract]
[KnownType(typeof(ConcreteResult1))]
[KnownType(typeof(ConcreteResult2))]
public abstract class AbstractResult
{
[DataMember]
public int ID { get; set; }
}
[DataContract]
public class ConcreteResult1 : AbstractResult
{
[DataMember]
public string Name { get; set; }
}
[DataContract]
public class ConcreteResult2 : AbstractResult
{
[DataMember]
public int Number { get; set; }
}
服务方法的简单示例:
public class Service1 : IService1
{
public AbstractResult GetAbstractData(int id)
{
if (id == 1)
return new ConcreteResult1() { ID = 1, Name = "red" };
else
return new ConcreteResult2() { ID = 2, Number = 123 };
}
}