假设我有一个具有一些属性和一些用于操作这些属性的方法的类:
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 对象的修改后的“克隆”。他们只是修改原始对象并返回它(为了方便)。对我来说,这会产生歧义,因为调用这些方法的人可能会认为它们是不可变的(即它们保持原始对象不变但返回修改后的对象)。
这是否违反了有关流畅/可链接接口(interface)的任何最佳实践?
最佳答案
我个人认为不变性和流畅的接口(interface)是不同的问题。您可能会发现一般来说不变性是一件好事,是一种最佳实践。但这取决于您是否使用了流畅的界面。
关于c# - "fluent"(或可链接)方法必须是不可变的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6705130/