Я вижу код в нашей унаследованной системе, где общедоступные методы класса, клонируют объект, выполняют мутацию состояния и возвращают новую копию объекта.Должен ли метод объекта возвращать новую копию объекта
Это просто неправильно, но просто интересно, знает ли кто-нибудь об известной причине. В противном случае, если кто-нибудь знает о действительно плохих причинах сделать это, вы можете помочь. Мне просто нужно вооружиться некоторыми аргументами и для этой ситуации, прежде чем я пойду и предложим большие перемены.
Благодаря
Пример кода
public Class MyClass
{
public string MyProp { get; set; }
public MyClass Cancel()
{
var newObj = this.Clone();
newObj.Status = Status.Cancelled;
return newObj;
}
}
Я уверен, что есть причина, по которой ваша устаревшая система делает это. – Uooo
Похоже на применение [неизменности] (http://en.wikipedia.org/wiki/Immutable_object), который имеет некоторые очень хорошие преимущества (а также очевидные недостатки). – Oak
Это изменение, которое может легко привести к ошибкам/ошибкам - так что если у вас нет хороших тестов и нет причин для бизнеса, не делайте этого. Это не имеет никакого отношения к прямой оо, это больше вопрос о протоколе и семантике ваших классов, если имеет смысл возвращать новые экземпляры или выполнять изменения на копии. – weismat