C# 中的接口/旧用法



我有 2 个类做非常相似的工作,但返回不同的模型。

public class WorkerCars
{
public async Task<Cars> FetchCars(SomeDBdataCars dbData){ //Some codehere }
}
public class WorkerShips
{
public async Task<Ships> FetchShips(SomeDBdataShips dbData){ //Some codehere }
}

数据库模型与 SomeDBdataShips 中的一些额外字段完全相同。

public class SomeDBdataCars 
{
public string EngineName {get; set;}
public string MaterialName {get; set;}
public int MaxSpeed {get; set;}
public int MinSpeed {get; set;}
}
public class SomeDBdataShips 
{
public string EngineName {get; set;}
public int MaxSpeed {get; set;}
public int MinSpeed {get; set;}
public long Price {get; set;}
}

我用于客户端的输出模型:

public class Cars 
{
public string EngineName {get; set;}
public string MaterialName {get; set;}
public int MaxSpeed {get; set;}
public int MinSpeed {get; set;}
public int AvgSpeed {get; set;}
}
public class Ships 
{
public string EngineName {get; set;}
public int MaxSpeed {get; set;}
public int MinSpeed {get; set;}
public long Price {get; set;}
}

我看到的优化解决方案是使泛型类Fetcher ofFetchCars 和 FetchShips,它将返回一些可以在 Workers 类中使用和解析的泛型模型。

如您所见,您的两个模型都有共同的逻辑。关于WorkerCars类和WorkerShips类的事实是,它们可以从输入到输出"获取"一些数据。以便可以将常见行为提取到泛型接口。例如,让我们将其称为IFetcher

public interface IFetcher<in TIn, TOut>
{
Task<TOut> FetchAsync(TIn data);
}

你的两个 worker 类都将像这样实现这个接口:

public class WorkerCars: IFetcher<SomeDBdataCars, Cars>
{
public async Task<Cars> FetchAsync(SomeDBdataCars data)
{
...
}
}
public class WorkerShips: IFetcher<SomeDBdataShips, Ships>
{
public async Task<Ships> FetchAsync(SomeDBdataShips data)
{
...
}
}

最新更新