假设我有一个类,它有一些属性和一些用于操作这些属性的方法:
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对象的"克隆"。它们只是修改原始对象并将其返回(为方便起见)。对我来说,这会产生一种歧义,因为调用这些方法的人可能会假设它们是不可变的(即它们保留了原始对象但返回了一个修改后的对象)。
那么这是否违反了有关流畅/可链接接口的最佳实践?