Скажем, у меня есть класс с некоторыми свойствами и некоторыми методами для управления этими свойствами:
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 в каждом из этих цепных методов. Они просто изменяют исходный объект и возвращают его (для удобства). Для меня это создает двусмысленность, потому что кто-то, вызывающий эти методы, может предположить, что они неизменяемы (т.е. они оставляют исходный объект нетронутым, но возвращают измененный объект).
Нарушает ли это какой-либо вид передовой практики в отношении плавных / цепных интерфейсов?