gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:36:11 24 4
gpt4 key购买 nike

我有一个带有 View 类(FragmentActivity)的 Android 应用,观察它的 ViewModel .

ViewModel公开方法,例如 getUserName返回 Observable<String> .虽然也许有可能找到一个更好的名字(可能是 observeUserName ),但我对当前的名字很满意 - 它非常具有解释性。

然而,困难的部分从这里开始:ViewModel也可以告诉 View 执行一些操作——例如关闭自身、弹出堆栈等。对于这种情况 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?方法?

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

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.

👎 虽然这种方法表达了 stream的事件,它不适用于 subscribe .公开 Observable 的方法不是有关 observing 的信息的地方.该方法的使用者将观察该方法返回的内容。

observeUserName().subscribe()

C) userNames

This code subscribes to userNames.

👎👍 这在某些情况下可能有效。它很好地表达了 userName 的流正在发射的项目并且与 subscribe 配合良好.这实际上取决于特定情况,因为它表明您可以期待多个 userNames虽然你真的想观察单个 userName变化。

userNames().subscribe()

C) userNameChanges

This code subscribes to userNameChanges.

👍 这种方法很好地表达了存在项目流(“更改”事件)并且它与 subscribe 配合得很好。方法。

userNameChanges().subscribe()

返回上一界面

至于你的returnToPreviousScreen案例是这样的,我想我最终会使用类似的东西:

This code subscribes to returnRequests().

This code subscribes to previousScreenRequests().

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

This code subscribes to previousScreenRequest().

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

关于android - 返回 RxJava 的 Completable 的方法的命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46845703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com