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



我有和Android应用程序与视图类(FragmentActivity)观察它的ViewModel

ViewModel公开了返回Observable<String>getUserName等方法。虽然也许有可能找到一个更好的名字(也许是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. 它是否表达了发出的事件的"流"(通常使用名词的复数形式)?
  2. 它是否适用于 rx java 方法链的其他部分,尤其是subscribe方法?

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

此代码订阅{name_of_the_method}.


例子

A)getUserName

此代码订阅getUserName.

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

getUserName().subscribe()

B)observeUserName

此代码订阅observeUserName

尽管 kind-of 方法表示事件的stream,但它不适用于subscribe。公开Observable的方法不是有关observing的信息的地方。该方法的使用者将观察该方法返回的内容。

observeUserName().subscribe()

C)userNames

此代码订阅userNames.

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

userNames().subscribe()

C)userNameChanges

此代码订阅userNameChanges.

此方法很好地表达了存在项目流("更改"事件),并且与subscribe方法配合得很好。

userNameChanges().subscribe()

返回上一个屏幕

就您的returnToPreviousScreen案例而言,我想我最终会使用以下内容:

此代码订阅returnRequests().

此代码订阅previousScreenRequests().

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

此代码订阅previousScreenRequest().

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

最新更新