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

Pio*_*ski 6 android naming naming-conventions rx-java reactive

我有一个带有视图类(FragmentActivity)的Android应用程序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; }
}
Run Code Online (Sandbox Code Playgroud)

我认为该方法的名称很糟糕。我找不到更好的东西。诸如此类的observeWhenToReturnToPreviousScreen内容可能更具解释性,但难以阅读。

因此,是否有建议或命名方法来命名此类方法?

Bar*_*ski 9

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


经验法则

我在 rx-java 中命名的方法通常着眼于两件事:

  1. 它是否表达了发射事件的“流”(通常带有复数形式的名词)?
  2. 它是否适用于 rx java 方法链的其他部分,尤其是subscribe方法?

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

此代码订阅{name_of_the_method}


例子

一种) getUserName

此代码订阅getUserName

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

getUserName().subscribe()
Run Code Online (Sandbox Code Playgroud)

乙) observeUserName

此代码订阅observeUserName

虽然方法 kind-of 表达了stream事件的 ,但它不能很好地与subscribe. 方法公开Observable不是有关 的信息的地方observing。该方法的使用者将观察该方法返回的内容。

observeUserName().subscribe()
Run Code Online (Sandbox Code Playgroud)

C) userNames

此代码订阅userNames

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

userNames().subscribe()
Run Code Online (Sandbox Code Playgroud)

C) userNameChanges

此代码订阅userNameChanges

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

userNameChanges().subscribe()
Run Code Online (Sandbox Code Playgroud)

返回上一画面

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

此代码订阅returnRequests()

或者

此代码订阅previousScreenRequests()

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

此代码订阅previousScreenRequest()

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