【问题标题】:How to implement optional branches in fluent interfaces如何在流畅的接口中实现可选分支
【发布时间】:2014-02-23 10:22:23
【问题描述】:

我目前正在创建一个流畅的界面,但我不能 100% 确定实现可选分支的最佳方式是什么。一个小例子:

// Normal service registration
.AddService(myService)
// Service registration with additional parameters
.AddService(myOtherService).WithParameter(ServiceParam.Timeout, 100)
.AddService(myThirdService)

现在,我不确定 AddService() 和 WithParameter() 应该具有哪些返回类型。基本接口提供AddService,它必须返回支持WithParameterAddService的东西。您是否建议具有以下结构(伪代码):

interface FluentStart
{
    AddService
}

interface FluentServiceConfiguration
{
    WithParameter
}

最后,AddService 会返回一个接口:

interface FluentStartORFluentServiceConfiguration
    : FluentStart
    , FluentServiceConfiguration

?有没有其他(更好的)方法可以做到这一点?

【问题讨论】:

    标签: c# fluent-interface


    【解决方案1】:

    你可以使用 lambda 表达式:

    interface FluentStart
    {
        AddService( service );
        AddService( service, Action<FluentServiceConfiguration> config );
    }
    
    // Normal service registration
    .AddService(myService)
    // Service registration with additional parameters
    .AddService(myOtherService, x => x.WithParameter(ServiceParam.Timeout, 100))
    .AddService(myThirdService)
    

    【讨论】:

    • 这种失去流畅的方式是吧?
    • 相信还是蛮流畅的
    • Fluent 界面并不是要能够大声朗读并创建完美的英语句子。这是关于提供一个非常流畅的 API。
    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2014-09-07
    相关资源
    最近更新 更多