假设我有一个具有一些属性的类和一些用于操作这些属性的方法:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
典型用法是:
var model = new PersonModel();
model.LoadAccountInfo(accountInfo);
model.LoadPhoneInfo(phoneInfo);
Run Code Online (Sandbox Code Playgroud)
我认为将方法链接起来会很酷:
public PersonModel LoadAccountInfo(AccountInfo accountInfo)
{
this.Name = accountInfo.Name;
return this;
}
public PersonModel LoadPhoneInfo(PhoneInfo phoneInfo)
{
this.PrimaryPhoneNumber = phoneInfo.PhoneNumber;
return this;
}
Run Code Online (Sandbox Code Playgroud)
那么用法是:
var model = new PersonModel()
.LoadAccountInfo(accountInfo)
.LoadPhoneInfo(phoneInfo);
Run Code Online (Sandbox Code Playgroud)
但是我没有在每个可链接的方法中返回传入的PersonModel对象的修改"克隆".他们只是修改原始对象并返回它(为方便起见).对我来说,这会产生歧义,因为有人调用这些方法可能会认为它们是不可变的(即它们保持原始对象完整但返回修改后的对象).
这是否违反了关于流畅/可链接接口的任何最佳实践?