如何使具体实现更通用

时间:2017-06-08 17:54:14

标签: c# .net

我有这个界面

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

我有多个实现此接口的类。下面给出了这个实现的一个例子。

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);
    }
}

每个具体实现的唯一区别是&#39; FormsAttributes.DepositorTaxId&#39;。我怎样才能使这更通用?

1 个答案:

答案 0 :(得分:0)

你可以创建一个这样的抽象类:

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();
}