我有和Android应用程序与视图类(Fragment
,Activity
)观察它的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 中命名的方法通常着眼于两件事:
- 它是否表达了发出的事件的"流"(通常使用名词的复数形式)?
- 它是否适用于 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
来表达单一的事件发射而不是完成......但也许那只是我)。