我想为我作为框架的一部分构建的一些类创建流畅的界面。我已经创建了方法,我能够成功地链接方法。现在我想确保我可以处理不正确的方法调用序列。
我正在做的事情就像CreateWorkflow - > OpenConfiguration - > ChangeUserName 在上面的场景中,如果首先调用ChangeUserName是没有意义的,因为它依赖于OpenConfiguration。
我很困惑我是否正确为这种情况创建Fluent方法链以及如何使序列工作。对我来说,这种情况似乎非常适合创建流畅的API。
答案 0 :(得分:1)
以下是按特定顺序强制执行方法链的示例代码。我使用了here中的示例并修复了原始代码中的小问题。 Here是dotnet fiddler中正在运行的代码
public interface IName
{
IAge WithName(string name);
}
public interface IAge
{
IPersist WithAge(int age);
}
public interface IPersist
{
void Save();
}
public class Person : IName, IAge, IPersist
{
public string Name { get; private set; }
public int Age { get; private set; }
public IAge WithName(string name)
{
Name = name;
return this;
}
public IPersist WithAge(int age)
{
Age = age;
return this;
}
public void Save()
{
// save changes here
}
}
答案 1 :(得分:0)
真正的关键是,如果您需要特定的序列来使用流畅的API来帮助您改进API需求。也许你应该考虑一些不同的东西。如果ChangeUserName需要OpenConfiguration,则API的使用者不应该关心。要么内部化依赖关系,要么API变为:
CreateWorkflow - > ChangeUserName
或者如果消费者已经拥有配置对象,您可以使用依赖注入方法并使API类似于:
CreateWorkflow(IConfigurationManager) - > ChangeUserName
或
CreateWorkflow - > ChangeUserName(IConfigurationManager)
我在这里展示了两种方法,因为我不确定您的配置类的依赖范围是什么。通过内化需求或在其中一个方法的签名上添加必需参数,您应该能够消除固定序列问题。除了明确的“开始”和“完成”API之外。
希望这有帮助。