Рекомендуемый шаблон, когда метод изменяет аргумент

Допустим, я создаю класс SomeLibrary. В этом классе есть метод Calculate, который принимает один аргумент - экземпляр SomeClass.

class SomeLibrary 
{
    void Calculate(SomeClass argument) 
    {
        //Some algorithm...

        //argument's value is changed!
        argument.value = 3;
    }
}

Результатом вычисления является модифицированный SomeClass. Как сообщить об этом пользователю? Я вижу 2 решения:

  1. Верните SomeClass вместо void - в этом случае аргумент все еще модифицируется, но на этот раз он также возвращается. Обратной стороной этого является то, что пользователь может не ожидать изменения аргумента, возможно, ему нужно сохранить его версию перед изменением.
  2. В Calculate можно сделать глубокую копию аргумента, и этот аргумент будет возвращен. Однако создание глубокой копии - не всегда простая задача.

Что вы думаете?

0
0
18
1

Ответы 1

Если вы готовы принять ООП, вам нужно сосуществовать с мутация. То есть вы даете экземпляр чего-то, обычно ожидается, что он будет видоизменен. С этим нет проблем.

Если в ваших собственных документах не указано обратное, мутация допустима. В противном случае вы можете взглянуть на AutoMapper.

Спасибо за ваш вклад. Я не очень понимаю, какое отношение AutoMapper имеет к теме?

Loreno 31.10.2018 13:36

@Loreno У него важная взаимосвязь: если вам нужно создать новые экземпляры и сопоставить предыдущие данные с новым экземпляром, вы можете использовать эту библиотеку для экономии времени: D

Matías Fidemraizer 31.10.2018 14:19

@Loreno Конечно, вот и все

Matías Fidemraizer 02.11.2018 11:12

Другие вопросы по теме