返回RxJava的方法的命名约定可完成

时间:2017-10-20 09:00:10

标签: android rx-java naming-conventions naming reactive

我有和Android应用一起使用视图类(FragmentActivity)观察其ViewModel

ViewModel公开了返回getUserName的{​​{1}}等方法。虽然也许有可能找到一个更好的名字(也许是Observable<String>),但我对现在的名字感到满意 - 这很有说服力。

然而,这里开始了一个难点:observeUserName也可以告诉视图执行某些操作 - 例如close close,pop backstack等。对于这种情况ViewModel定义了以下方法(并且相应{ {1}}):

ViewModel

在我看来,这个方法的名字太可怕了。 Hovewer我找不到更好的东西。像Subject这样的东西可能更具说明性,但很难阅读。

那么,是否有任何建议或常用的做法来命名这些方法?

1 个答案:

答案 0 :(得分:1)

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


我的经验法则

我在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来表示单个事件而不是完成...但是也许这仅仅是我)。