返回 RxJava 的 Completable 的方法的命名约定

Naming convention for methods returning RxJava's Completable

我有 Android 应用,其视图 class(FragmentActivity)观察其 ViewModel

ViewModel 公开了 getUserName 和 returns Observable<String> 等方法。虽然也许有可能找到一个更好的名字(也许observeUserName),但我对现在的名字很满意——它很能说明问题。

然而,困难的部分从这里开始:ViewModel 还可以告诉视图执行一些操作 - 例如关闭自身、弹出堆栈等。对于这种情况 ViewModel 定义了以下方法(和对应 Subject):

class ViewModel {
   // other methods, fields

   // ViewModel can call returnToPreviousScreen.onComplete()
   CompletableSubject returnToPreviousScreen = CompletableSubject.create();

   Completable returnToPreviousScreen() { return returnToPreviousScreen; }
}

在我看来,这个方法的名字很糟糕。但是我找不到更好的东西。 observeWhenToReturnToPreviousScreen 之类的内容可能更具解释性但难以阅读。

那么,对于命名此类方法,是否有任何建议或常用做法?

命名问题没有统一的答案,所以你能得到的只有意见


经验法则

我在 rx-java 中的命名方法通常会考虑两件事:

  1. 它是否表达了"stream"个发出的事件(通常用名词的复数形式)?
  2. 它是否适用于 rx java 方法链的其他部分,尤其是 subscribe 方法?

以上两个通常可以简化为尝试将方法名称放在这句话中:

This code subscribes to {name_of_the_method}.


例子

A) getUserName

This code subscribes to getUserName.

这句话 没有 真的有意义,因为 getUserName 没有表达 stream。恰恰相反,它表明有一个值可以 get.

getUserName().subscribe()

B) observeUserName

This code subscribes to observeUserName.

虽然方法 kind-of 表达了事件的 stream,但它不适用于 subscribe。公开 Observable 的方法不是提供有关 observing 的信息的地方。该方法的使用者将观察该方法 returns.

observeUserName().subscribe()

C) userNames

This code subscribes to userNames.

这在某些情况下可能有效。它很好地表达了正在发出的 userName 项目流,并且与 subscribe 配合得很好。这实际上取决于特定场景,因为它表明您可以期待多个 userNames,而您真的想观察单个 userName 是如何变化的。

userNames().subscribe()

C) userNameChanges

This code subscribes to userNameChanges.

这个方法很好地表达了有一个项目流("change" 事件)并且它与 subscribe 方法一起工作得很好。

userNameChanges().subscribe()

Return 到上一屏幕

就您的 returnToPreviousScreen 案例而言,我想我最终会使用类似的东西:

This code subscribes to returnRequests().

This code subscribes to previousScreenRequests().

甚至是单数形式,因为流中只能发出一个事件:

This code subscribes to previousScreenRequest().

(不是问题的主题,但我想我会使用 Single<Unit> 而不是 Completable,来表达单一事件发射而不是完成...但也许这只是我).