简体   繁体   English

如何使具体实施更加通用

[英]How to make concrete implementation more generic

I have this interface 我有这个界面

 public interface IMapper
{
    bool CanMap(List<Field> fields);
    AccountHolder Map(List<Field> fields);
}

I have multiple classes that implements this interface. 我有多个实现此接口的类。 Given below is an example of this implementation. 下面给出的是此实现的示例。

public class DepositorMapper : IMapper
{
    private readonly IFormUIElementHelper _formHelper;

    public DepositorMapper(IFormUIElementHelper formHelper)
    {
        _formHelper = formHelper;          
    }

    public bool CanMap(List<Fields> fields)
    {
        var taxId = _formHelper.GetFieldValue<string>(fields, FormsAttributes.DepositorTaxId);

        return !string.IsNullOrWhiteSpace(DepositorTaxId);
    }
}

The only difference in each concrete implementation is the 'FormsAttributes.DepositorTaxId'. 每个具体实现中的唯一区别是“ FormsAttributes.DepositorTaxId”。 How can i make this more generic? 我该如何使其更通用?

You can make an abstract class like that: 您可以像这样创建一个抽象类:

public abstract class BaseDepositorMapper : IMapper
{
    private readonly IFormUIElementHelper _formHelper;

    public BaseDepositorMapper (IFormUIElementHelper formHelper)
    {
        _formHelper = formHelper;          
    }

    public bool CanMap(List<Fields> fields)
    {
        var taxId = _formHelper.GetFieldValue<string>(fields, GetDepositorTaxId());

        return !string.IsNullOrWhiteSpace(taxId);
    }

    public abstract DepositorTaxIdType GetDepositorTaxId();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM