Есть методы, которые возвращают void, но изменяют состояние своих аргументов (т. Е. Предоставляют скрытое или неявное возвращаемое значение), как правило, плохая практика?Недействительные методы возврата, которые изменяют состояние их аргумента как анти-шаблон?
Мне кажется, что их сложно насмехаться, что предполагает, что они, возможно, являются признаком плохого дизайна.
Какие шаблоны существуют для их устранения?
Очень надуманный пример:
public interface IMapper
{
void Map(SourceObject source, TargetObject target);
}
public class ClassUnderTest
{
private IMapper _mapper;
public ClassUnderTest(IMapper mapper)
{
_mapper = mapper;
}
public int SomeOperation()
{
var source = new SourceObject();
var target = new TargetObject();
_mapper.Map(source, target);
return target.SomeMappedValue;
}
}
Как насчет метода void Initialize(), который возвращает void и существует только с целью изменения состояния объекта? Или void Fill (объект o), который выполняет какое-либо действие над объектом o? Тип возврата не имеет корреляции с внутренним состоянием и аргументами. Семантика метода должна четко указывать, будет ли изменено состояние или аргументы. Если метод делает что-то большее, что он предназначен, то это анти-шаблон. Это более чистое кодирование. –
Это именно то, во что я ехал - семантика не ясна или, по крайней мере, путается в этих случаях. – MalcomTucker