我有三个不同的系统,我必须与之沟通。对于每个系统,我必须以不同的方式进行通信并获得不同类型的数据。例如,对于两个系统,我必须使用REST API进行通信,而第三个系统必须使用NET.TCP协议进行通信。
我的问题是,我可以使用某种模式或某种抽象吗? 据我所知,不可能有一个共同的类型(接口),但不同的方法,而不进行强制转换。我正在使用C#
答案 0 :(得分:1)
您可以使用泛型
public interface IDataSource<TData>
{
IEnumerable<TData> GetData();
}
如果您可以传递描述源地址的相同类型的参数,例如一个简单的字符串,您可以使用
声明接口public interface IDataSource<TData>
{
IEnumerable<TData> GetData(string address);
}
如果这是不可能的,因为不同的系统需要一组不同的参数,您可以使用第一个接口,而是将参数传递给不同实现的构造函数。由于构造函数永远不是接口的一部分,因此您始终可以这样做。
另一种可能性是为地址对象添加额外的泛型类型参数。
public interface IDataSource<TData, TAddress>
{
IEnumerable<TData> GetData(TAddress address);
}
如果不同的数据源需要兼容,例如因为你想将它们插入List<T>
,你也可以声明一个非通用的接口
public interface IDataSource
{
IEnumerable GetData();
}
public interface IDataSource<TData> : IDataSource
{
IEnumerable<TData> GetData();
}
实现将显式实现非泛型接口,因此如果不通过IDataSource
访问,则会自动隐藏其成员。该列表现在可以声明为List<IDataSource>
。