我创建了一个流畅的API,可以按预期工作。 现在我想强制执行一些规则,以确保所有内容都正确:
1:调用的第一个方法应该是BuildTestPlan
,intellisense中不应列出其他任何内容(==>现在全部可用 - >已解决:请参阅更新)
2:只有BuildTestPlan
AddTestSequence
应该可用(==>这没关系)
3:只有AddTestSequence
AddTest
应该可用(==>这没关系)
4:AddTest
之后应该有3个可用选项:AddTest
(==>这没关系),AddTestSequence
(= =>这里我被困了)和GetResult
(==>这没关系)
代码:
public class FluentTestPlanBuilderWithRules : ITestPlanBuilder, ITestSequenceBuilder, ITestBuilder
{
public ITestSequenceBuilder BuildTestPlan()
{
// Do stuff
return this;
}
public ITestBuilder AddTestSequence()
{
// Do stuff
return this;
}
public ITestBuilder AddTest()
{
// Do stuff
return this;
}
public TestPlan GetResult()
{
// Return built TestPlan
}
}
public interface ITestPlanBuilder
{
ITestSequenceBuilder BuildTestPlan();
}
public interface ITestSequenceBuilder
{
ITestBuilder AddTestSequence();
}
public interface ITestBuilder
{
ITestBuilder AddTest();
TestPlan GetResult();
}
用法:
var builder = new EnforcedFluentTestPlanBuilder();
var o = builder.BuildTestPlan()
.AddTestSequence()
.AddTest()
.AddTest()
.AddTest()
.AddTestSequence()
.AddTest()
.AddTest()
.AddTestSequence()
.AddTest()
.GetResult();
我担心没有办法强制执行nr 1,因为它们都是公共方法。
但是AddTestSequence
之后和AddTest
之后是否可以BuildTestPlan
?
更新 找到nr 1 here
的解决方案