RxJava的Completable返回方法的命名规范

13

我有一个安卓应用程序,它的视图类 (Fragment, Activity) 观察其 ViewModel

ViewModel 暴露了一些方法,如 getUserName,它返回了 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这样的名称可能更具解释性,但很难阅读。

所以,是否有任何命名此类方法的建议或常用实践?

1个回答

11

关于命名问题,没有通用答案,所以您只能得到意见


经验法则

我在rx-java中进行命名的方法通常考虑两个方面:

  1. 它是否表达了一个发射事件的"流"(通常是名词复数形式)?
  2. 它是否与rx java方法链的其他部分以及subscribe方法很好地配合使用?

这两点通常可以简化为尝试将方法名放入以下句子中:

这段代码订阅{name_of_the_method}


举个例子

A) getUserName

这段代码订阅getUserName

该句子并不真正有意义,因为getUserName并没有表达stream。相反,它暗示了存在一个可以get的值。

getUserName().subscribe()

B) observeUserName

这段代码订阅了observeUserName

虽然此方法有点表现出事件stream的特征,但与subscribe不太配合。暴露Observable的方法不是关于observing的信息的地方。该方法的使用者将观察该方法返回的内容。

observeUserName().subscribe()

C) userNames

这段代码订阅userNames

在某些情况下,这可能有效。它很好地表示了一个发出userName项目的流,并且与subscribe很搭配。但它实际上取决于特定场景,因为它暗示你可以期望多个userNames,而你真正想要观察的是单个userName如何更改。

userNames().subscribe()

C) userNameChanges

这段代码订阅userNameChanges

这个方法很好地表达了存在一系列项目(“change”事件)的流,并且它与subscribe方法很好地配合使用。

userNameChanges().subscribe()

返回上一个屏幕

就你的 returnToPreviousScreen 情况而言,我认为我最终会使用这样的代码:

此代码订阅returnRequests()

或者

此代码订阅previousScreenRequests()

甚至可以使用单数形式,因为流中只能发射一个事件:

此代码订阅previousScreenRequest()

(虽然不是问题的主题,但我认为我会使用 Single<Unit> 而不是 Completable 来表示单个事件发射而不是完成...但也许只是我的个人观点)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接