Рекомендуемый шаблон, когда метод изменяет аргумент - PullRequest
0 голосов
/ 31 октября 2018

Допустим, я создаю класс с именем 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. В Вычислении может быть сделана глубокая копия аргумента, и этот будет возвращен. Однако создание глубокой копии не всегда является простой задачей.

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

1 Ответ

0 голосов
/ 31 октября 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...