Скажем, у меня есть класс с некоторыми свойствами и некоторые методы для управления этими свойствами:
public class PersonModel
{
public string Name { get; set; }
public string PrimaryPhoneNumber { get; set; }
public void LoadAccountInfo(AccountInfo accountInfo)
{
this.Name = accountInfo.Name;
}
public void LoadPhoneInfo(PhoneInfo phoneInfo)
{
this.PrimaryPhoneNumber = phoneInfo.PhoneNumber;
}
}
Типичное использование:
var model = new PersonModel();
model.LoadAccountInfo(accountInfo);
model.LoadPhoneInfo(phoneInfo);
Я думаю, было бы здорово сделать методы целыми:
public PersonModel LoadAccountInfo(AccountInfo accountInfo)
{
this.Name = accountInfo.Name;
return this;
}
public PersonModel LoadPhoneInfo(PhoneInfo phoneInfo)
{
this.PrimaryPhoneNumber = phoneInfo.PhoneNumber;
return this;
}
Тогда использование будет:
var model = new PersonModel()
.LoadAccountInfo(accountInfo)
.LoadPhoneInfo(phoneInfo);
Но я не возвращаю модифицированный "клон" объекта переданного объекта PersonModel в каждом из этих связанных методов. Они просто изменяют исходный объект и возвращают его (для удобства). Для меня это создает двусмысленность, потому что кто-то, называющий эти методы, может предположить, что они являются неизменяемыми (т.е. Они оставляют исходный объект неповрежденным, но возвращают измененный объект).
Означает ли это нарушение какой-либо передовой практики в отношении свободно-совместимых интерфейсов?