Добавление методов в класс преобразователя с интерфейсом

57
4

Я написал довольно простой класс преобразования, который превращает Foo в Bar.

Поскольку я хочу несколько конвертеров для других классов, я создал интерфейс с двумя способами:

public interface IConverter<in TSource, out TDestination>
{
TDestination Convert(TSource sourceObject);
IEnumerable<TDestination> ConvertMany(IEnumerable<TSource> sourceObjects);
}

И мой класс реализует это так:

public class ObjectConverter : IConverter<Foo, Bar>
{
public Bar Convert(Foo sourceObject)
{
return new Bar
{
// Mapping attributes...
};
}
public IEnumerable<Bar> ConvertMany(IEnumerable<Foo> sourceObjects)
{
return sourceObjects.Select(obj => new Bar
{
// Mapping attributes...
});
}
}

Что все прекрасно работает. Я хотел добавить еще ConvertMany метод ConvertMany который принимает другие объекты в качестве источника и возвращает его как Bar. Было бы неплохо добавить его в этот класс, так как он также возвращает Bar или это нечто более подходящее для второго класса, который также реализует этот интерфейс?

Я новичок в С# и использую интерфейсы, поэтому я не уверен, что будет лучше.

(С другой стороны, имеет ли смысл это? Есть ли лучшие альтернативы?)

спросил(а) 2020-04-04T02:25:27+03:00 6 месяцев, 2 недели назад
1
Решение
72

Вы должны добавить еще одну реализацию своего интерфейса для достижения ожидаемых результатов:

public interface IConvertFromMany<TSource, TDestination>
{
IEnumerable<TDestination> ConvertMany(IEnumerable<TSource> sourceObjects);
}

public interface IConverter<TSource, TDestination> : IConvertFromMany<TSource, TDestination>
{
TDestination Convert(TSource sourceObject);

}

Используйте его так:

public class ObjectConverter : IConverter<Foo, Bar>, IConvertFromMany<AnotherSourceObject, Bar>
{
//....your implementations here
}

ответил(а) 2020-04-04T02:41:04.464839+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема