可以传递参数来选择使用哪个代码的通用实现

问题描述 投票:0回答:1

我有一个像这样的

interface

public interface IIdentifierManager
{
    Task<bool> Method1(string identifierName, string identifier);
    Task<bool> Method2(IEnumerable<string> ids);
}

并且有五个

classes
已经实施了它,例如:

public class CatIdentifierManager: IIdentifierManager
{
   // you know the dill!
}

所以当我:

IEnumerable<IIdentifierManager> idManagers;

取决于我想要哪种实现,我会这样做:

 var myVar1 = idManagers.OfType<JoeIdentifierManager>()?.FirstOrDefault();
 var myVar2 = idManagers.OfType<HisIdentifierManager>()?.FirstOrDefault();
 var myVar3 = idManagers.OfType<HerIdentifierManager>()?.FirstOrDefault();
 var myVar4 = idManagers.OfType<CatIdentifierManager>()?.FirstOrDefault();
 var myVar5 = idManagers.OfType<DogIdentifierManager>()?.FirstOrDefault();

我正在寻找更好的设计建议,所以也许我可以有一个主要实现,其中包含所有这五个,也许我通过一个

parameter
来告诉它使用哪一个。 你建议如何做?

c# generics design-patterns interface
1个回答
0
投票

不要做任何愚蠢的事情,比如使用设置参数来选择实现的方法。您可能需要一个静态工厂方法,为您选择一个实现,然后您可以调用该方法。

不要害怕有一些额外的类或方法,只要它们漂亮且整洁即可。许多开发人员认为方法和类越少越好,但根据我的经验,随着代码库的增长,这会导致混乱。您想要更改现有行为,但它与该函数的所有其他变体完全耦合。

© www.soinside.com 2019 - 2024. All rights reserved.