【问题标题】:Which is more fluent - longer or shorter syntax?哪个更流畅 - 更长或更短的语法?
【发布时间】:2009-07-14 02:27:07
【问题描述】:

我正在尝试创建我的第一个流畅的界面,我只是想知道其他人认为哪个更流畅,他们更喜欢使用哪个?

Check.Field().Named("est").WithValueOf("sdsd").IsNotNull()

Check.Field("est").WithValueOf("sdsd").IsNotNull()

Check.Field("est").WithValue("sdsd").IsNotNull()

干杯 安东尼

【问题讨论】:

    标签: c# .net fluent-interface


    【解决方案1】:

    最后一个:

    Check.Field("est").WithValue("sdsd").IsNotNull()
    

    【讨论】:

      【解决方案2】:

      我同意:

      Check.Field("est").WithValue("sdsd").IsNotNull()
      

      尽可能短,但仍然有意义。

      避免使用像.as. .of. .and. .in. 这样的干扰词,除非它们添加上下文含义。我见过流畅的界面可以做到这一点,除了更多的打字和更多的箍让应用程序在执行时跳过之外,它并没有增加任何有用的东西。

      【讨论】:

        【解决方案3】:

        另一个选项可能是:

        Check.Field("est").IsNotNull("sdsd")
        

        类似 LINQ 的 FirstOrDefault 的东西是用谓词调用的,而不是过滤然后调用 FirstOrDefault。

        【讨论】:

        • 我想到了这一点,但我认为如果有人对代码一无所知并从字面上看到“Check.Field("est").IsNotNull("sdsd")" vs "Check.Field("est").WithValue("sdsd").IsNotNull()" 我原以为后者会更清楚。
        • 在不知道代码的情况下让我感到困惑的是,一个值为“sdsd”的字段如何可能为空(我读到的意思是“有一个空值”)。
        【解决方案4】:

        Check 是什么?我怀疑它根本不需要。我了解您要执行的操作,但请记住,您尝试构建的表达式仍可能以 if 语句结尾。考虑到这一点,想想“if check X”的读法。不太好,恕我直言。此外,“字段”函数必须做什么才能解析该名称?您是否有其他地方可以以更好的方式呈现(可能是某些基本类型的扩展方法?)

        【讨论】:

        • 其实我有以下几种情况:检查和验证。 Check 会抛出一个异常,因为 validate 会在最后返回一个 bool。所以我在想它的读取方式如下: public void Test(object value) { Check.Argument("value").WithValue(value).IsNotNull(); .... } 和我的验证案例如下: public void Test(object value) { if (Validate.That("value").WithValue(value).IsNotNull()) { ... } }
        • 还有字段的含义。 Check.Field & Check.Argument 实际上有 2 种可能性。不同之处在于 Check.Argument 会抛出像 ArgumentNullException 这样的异常,而 Check.Field 会抛出 NullReferenceException。
        【解决方案5】:

        或者,为了模仿某些集合,使用Item property

        Check["est"].WithValue("sdsd").IsNotNull()
        

        有些人可能还说您应该只使用 .IsNull() 并否定整个表达式,就像这样,但这是“六个 - 对 - 六个”的事情:

        !Check["est"].WithValue("sdsd").IsNull()
        

        【讨论】:

        • 我更喜欢 IsNotNull 方法,因为您可以从字面上阅读代码在做什么。
        • 你甚至不能确定 IsNotNull() 返回一个布尔值。这在流利的界面中更不可能,您将返回this - IsNotNull() 可能会返回一个可以进一步过滤的集合(jQuery 样式),...IsNotNull().IsVisible()... .此外,在 vb 中,它的可读性更差 - not Check.filters...IsNull()
        • 因此我谨慎地使用了“有人可能会说”的措辞:)。 (1) 方法名称以“Is”开头,这是返回布尔值的约定,即使在流畅的接口中也是如此 - 并非所有内容都可以返回“this”。 (2) 原来的问题被标记为 C# 而不是 VB,所以我忽略了“Not”,只提到了“!”。
        猜你喜欢
        • 1970-01-01
        • 2011-07-09
        • 1970-01-01
        • 2020-01-22
        • 2013-01-25
        • 2012-03-21
        • 1970-01-01
        • 1970-01-01
        • 2011-09-13
        相关资源
        最近更新 更多