c# - "fluent"(或可链接)方法必须是不可变的吗?

标签 c# fluent fluent-interface

假设我有一个具有一些属性和一些用于操作这些属性的方法的类:

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/

相关文章:

c# - Unity 单例管理器类

laravel-4 - laravel 迁移重新组织列顺序

java - 用于 Fluent API 方法的 Eclipse 插件

database - EF 代码优先 : Many-to-many and one-to-many

c++ - 流畅的接口(interface)模式和 std::unique_ptr

c# - 按住手机上的按钮

c# - 添加多个文本框.net

c# - Fluent 验证条件规则

entity-framework-4.1 - Entity Framework 代码对字符串PK/FK关系的首字母敏感性

c# - 如何让 XSD.exe 为我生成适当的类,以便我可以创建一个很好的 XML